2013-08-20 4 views
0

я мог бы сделать это:Слияние HDFS файлов без прохождения через сеть

hadoop fs -text /path/to/result/of/many/reudcers/part* | hadoop fs -put - /path/to/concatenated/file/target.csv 

Но это сделает файл HDFS получить потоковый через сеть. Есть ли способ сообщить HDFS объединить несколько файлов в самом кластере?

ответ

1

У меня проблема аналогичная вашей. Здесь article with number of HDFS files merging options, но все они имеют некоторые особенности. Никто из этого списка не отвечает моим требованиям. Надеюсь, это может вам помочь.

  • HDFS concat (фактически FileSystem.concat()). Не такой старый API. Требуется исходный файл для заполнения последнего блока.
  • MapReduce jobs: возможно, я приму решение, основанное на этой технологии, но оно медленно настраивается.
  • copyMerge - насколько я вижу, это будет снова копировать. Но я еще не проверял детали.
  • File crush - снова, выглядит как MapReduce.

Таким образом, основной результат заключается в том, что скорость настройки MapReduce подходит вам, без проблем. Если у вас есть требования в реальном времени, все становится сложным.

Одна из моих «сумасшедших» идей заключается в использовании механики сопроцессора HBase (конечных точек), и файлы блокируют информацию о местоположении для этого, поскольку у меня есть Hbase на том же кластере. Если слово «сумасшедший» не остановит вас, посмотрите на это: http://blogs.apache.org/hbase/entry/coprocessor_introduction

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