копирование каталога из локальной системы в jdf-код hdfs

У меня возникла проблема при попытке скопировать каталог из моей локальной системы в HDFS с использованием кода Java. Я'я могу перемещать отдельные файлы, но могуt найти способ переместить весь каталог с подпапками и файлами. Кто-нибудь может мне помочь с этим? Заранее спасибо.

 octo08 окт. 2012 г., 21:19
потому что каталог не являетсяфайл', Вы должны создать каталог рекурсивно и переместить файл один за другим (вы можете сделать это параллельно, если хотите). Конечно, вы должны знать, что эта операция не атомарная, поэтому, если вы потерпите неудачу, некоторые файлы останутся незавершенными на hdfs.
 Eric Alberson08 окт. 2012 г., 18:47
Какую версию Hadoop вы используете?bin/hadoop dfs -copyFromLocal folder копииfolder и рекурсивно все в этом просто прекрасно для меня.

Ответы на вопрос(2)

Вот полный рабочий код для чтения и записи в 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);
         }
     }
}
 Satish Karuturi09 мар. 2018 г., 06:15
Привет, когда я пытаюсь это я получаю ошибку org / apache / hadoop / fs / FSDataOutputStream. Я добавил в pom библиотеки hadoop-common, hadoop-hdfs. а также добавил core-site.xml, hdfs-site.xml в мою конфигурацию.
Решение Вопроса

Просто используйтеFileSystemcopyFromLocalFile метод. Если исходный путь является локальным каталогом, он будет скопирован в место назначения 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"));
...   
 Chirag11 окт. 2012 г., 09:00
Благодарю. установка для fs.default.name требуемого hdfs: // host: port работал.
 Lorand Bendig10 окт. 2012 г., 13:19
Какое значение у вас есть в core-site.xml для fs.default.name? Он должен указывать на hdfs: // host [: port]
 Chirag09 окт. 2012 г., 10:30
путь для hdfs, который я предоставляю, имеет форму "HDFS: //cluster.abc.com: 8080 / пользователь / что-то», но это говоритнеправильная FS, ожидаемый файл: /// ", Любая помощь для этого?

Ваш ответ на вопрос