2015-09-24 4 views
0

Я хочу создать путь HDFS в моем коде картографа. У FileSystem есть все методы, которые мы можем сделать из CLI, таких как put, get, mkdir и т. Д. ... но не получить, когда каталог уже существует в HDFS, как сгенерировать его путь в моем коде трансформера или редуктора.MapReduce - генерировать путь HDFS

Я использую MR2 ..

Спасибо.

+0

Что вы подразумеваете под созданием пути? – YoungHobbit

+0

См. Мои комментарии ниже. – Ajay

+0

Почему вы хотите сгенерировать код в коде Mapper или Reducer? – pradeep

ответ

0

чтения input.txtHDFS из

public class HdfsRead { 
     public static void main(String[] args) throws IOException { 

      String uri = args[0]; 

      Configuration conf = new Configuration(); 
      FileSystem fs = FileSystem.get(URI.create(uri), conf); 
      FSDataInputStream in = null ; 
      try 
      {byte [] buffer = new byte[256]; 
       in = fs.open(new Path(uri)); 
        IOUtils.copyBytes(in, System.out, 4096, false);  

      } 
      finally 
      { 
       IOUtils.closeStream(in); 
      } 
     } 
    } 

проверка файлов, если уже существует, удалите его

FileSystem fs = FileSystem.get(conf); 
Path path = new Path(args[0]); 
if(fs.exists(path)){ 
    fs.delete(path); 
} 

commandline argument 
args[0] = "hdfs://localhost:9000/input.txt" 
+0

В вашем примере hdfs: // localhost: 9000 является своего рода hardcoding, но когда мы переместим наш код в кластер (production), этот код не будет работать. Предположим, я создал папку «mydir» в hdfs, и я хочу сгенерировать ее путь, например hdfsURL + path.Seprator + «mydir» для дальнейшей обработки. Как мы можем это сделать? – Ajay

+0

@Ajay Вы можете передать hdfsUrl из командной строки или установить его системное свойство, а затем прочитать его в своей работе. – YoungHobbit

+0

Есть ли альтернативный способ получить это в нашем коде? Я имею в виду настройку API-интерфейса FileSystem? – Ajay

0

Вы можете использовать настройки() menthod в Mapper код/​​Reducer и создать каталог с помощью FileSystem API. Если вы хотите проверить, что каталог/файл уже существует, используйте метод «существует» из класса FileSystem.

Смежные вопросы