Объединение небольших файлов в один файл в формате hdfs - PullRequest
0 голосов
/ 30 апреля 2018

В кластере hdfs я ежедневно получаю несколько файлов, которые могут быть трех типов:

1) product_info_timestamp

2) user_info_timestamp

3) user_activity_timestamp

Количество полученных файлов может быть любым, но они будут принадлежать только к одной из этих 3 категорий.

Я хочу объединить все файлы (после проверки, если они меньше 100 МБ), принадлежащие одной категории, в один файл. например, 3 файла с именем product_info_ * должны быть объединены в один файл с именем product_info.

Как мне этого добиться?

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Вы можете использовать архив hadoop (файл .har) или файл последовательности. Это очень просто в использовании - просто Google "Hadoop Архив" или "файл последовательности".

0 голосов
/ 01 мая 2018

Другой набор команд по аналогичным линиям, предложенный @ SCouto

hdfs dfs -cat /hdfs_path/product_info_* > /local_path/product_info_combined.txt

hdfs dfs -put /local_path/product_info_combined.txt /hdfs_path/

0 голосов
/ 30 апреля 2018

Вы можете использовать getmerge, чтобы добиться этого, но результат будет сохранен в вашем локальном узле (граничном узле), поэтому вы должны быть уверены, что у вас там достаточно места.

hadoop fs -getmerge /hdfs_path/product_info_* /local_path/product_inf

Вы можете переместить их обратно в hdfs с помощью пут

hadoop fs -put  /local_path/product_inf /hdfs_path
...