копирование каталога из локальной системы в код hdfs java
У меня проблема с попыткой скопировать каталог из моей локальной системы в HDFS с помощью кода java. Я могу перемещать отдельные файлы, но не могу понять, как переместить весь каталог с подпапками и файлами. Кто-нибудь может мне помочь? Спасибо заранее.
2 ответов
просто использовать FileSystem
' s copyFromLocalFile метод. Если исходный путь является локальным каталогом, он будет скопирован в назначение HDFS:
...
Configuration conf = new Configuration();
conf.addResource(new Path("/home/user/hadoop/conf/core-site.xml"));
conf.addResource(new Path("/home/user/hadoop/conf/hdfs-site.xml"));
FileSystem fs = FileSystem.get(conf);
fs.copyFromLocalFile(new Path("/home/user/directory/"),
new Path("/user/hadoop/dir"));
...
вот полный рабочий код для чтения и записи в HDFS. Требуется два аргумента
входной путь (локальный / HDFS )
выходной путь (HDFS)
я использовал песочницу Cloudera.
package hdfsread;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class ReadingAFileFromHDFS {
public static void main(String[] args) throws IOException {
String uri = args[0];
InputStream in = null;
Path pt = new Path(uri);
Configuration myConf = new Configuration();
Path outputPath = new Path(args[1]);
myConf.set("fs.defaultFS","hdfs://quickstart.cloudera:8020");
FileSystem fSystem = FileSystem.get(URI.create(uri),myConf);
OutputStream os = fSystem.create(outputPath);
try{
InputStream is = new BufferedInputStream(new FileInputStream(uri));
IOUtils.copyBytes(is, os, 4096, false);
}
catch(IOException e){
e.printStackTrace();
}
finally{
IOUtils.closeStream(in);
}
}
}