Вот еще один альтернативный, это еще наследие подход указывал в своих @ Андрей комментарии, но с дополнительными шагами делает ваш входную папку в качестве буфера для приема небольших файлов, которые своевременно перенаправляют их в каталог tmp и объединяют их и возвращают результат обратно.
шаг 1: создать каталог TMP
hadoop fs -mkdir tmp
шаг 2: переместить все маленькие файлы в каталог TMP в момент времени
hadoop fs -mv input/*.txt tmp
шаг 3 -merge маленьких файлов с помощь Hadoop-потоковая банка
hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.6.0.jar \
-Dmapred.reduce.tasks=1 \
-input "/user/abc/input" \
-output "/user/abc/output" \
-mapper cat \
-reducer cat
шаг 4- шаг выход к входной папке
hadoop fs -mv output/part-00000 input/large_file.txt
шаг 5 - удалить выход
hadoop fs -rm -R output/
шаг 6 - удалить все файлы из TMP
hadoop fs -rm tmp/*.txt
Создать скрипт из шага 2 до шага 6 и график его выполнения с регулярными интервалами для слияния небольших файлов с регулярными интервалами (может быть на каждую минуту, исходя из ваших потребностей)
шагов для планирования хрон для объединения маленьких файлов
шага 1: создать скрипт /дома/а/mergejob.ш с помощью описанных выше шагов (от 2 до 6)
Важное примечание: вам необходимо указать абсолютный путь Hadoop в сценарии следует понимать под хрон
#!/bin/bash
/home/abc/hadoop-2.6.0/bin/hadoop fs -mv input/*.txt tmp
wait
/home/abc/hadoop-2.6.0/bin/hadoop jar /home/abc/hadoop-2.6.0/share/hadoop/tools/lib/hadoop-streaming-2.6.0.jar \
-Dmapred.reduce.tasks=1 \
-input "/user/abc/input" \
-output "/user/abc/output" \
-mapper cat \
-reducer cat
wait
/home/abc/hadoop-2.6.0/bin/hadoop fs -mv output/part-00000 input/large_file.txt
wait
/home/abc/hadoop-2.6.0/bin/hadoop fs -rm -R output/
wait
/home/abc/hadoop-2.6.0/bin/hadoop fs -rm tmp/*.txt
шаг 2: график скрипт, используя хрон запускать каждую минуту с помощью выражения CRON
а) редактировать кронтаб путем выбора редактора
>crontab -e
б) добавьте следующую строку в конце и выйти из редактора
* * * * * /bin/bash /home/abc/mergejob.sh > /dev/null 2>&1
Работа слияния будет запланировано бежать за каждую минуту.
Надеюсь, это было полезно.
Возможный дубликат [Объединение нескольких файлов в один из Hadoop] (http://stackoverflow.com/questions/3548259/merging-multiple-files-into-one-within-hadoop) – Andrew