2015-04-23 2 views
1

Параметры некоторых машин измеряются и загружаются через веб-службу в HDFS. Значения параметров сохраняются в файле для каждого измерения, где измерение имеет в среднем 1000 значений.Большое количество небольших файлов Hadoop

Проблема в том, что существует большое количество файлов. Для задания MapReduce используется определенное количество файлов (например, измерения за последний месяц). Из-за этого я не могу объединить их все в один большой файл последовательности, поскольку разные файлы нужны в разное время.

Я понимаю, что плохо иметь большое количество небольших файлов, поскольку NameNode содержит пути ко всем из них на HDFS (и хранит его в своей памяти), а с другой стороны, каждый маленький файл приведет к Создание карты.

Как я могу избежать этой проблемы?

+3

Вы пытались использовать 'CombineSequenceFileInputFormat'? Он должен объединять небольшие файлы в один раскол и создавать меньшее количество картографов. Документация: https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapreduce/lib/input/CombineSequenceFileInputFormat.html –

+0

Честно говоря, я не очень опытен с Hadoop, но я понимаю что могут возникнуть некоторые проблемы с этим подходом. Например, ссылки на все файлы на HDFS будут сохранены в памяти NameNode, это верно? Существуют ли и другие проблемы при использовании CombineSequenceFileInputFormat? – Marko

+1

Да, хранение большого количества небольших файлов в HDFS - плохая идея. Вы можете объединить небольшие файлы в один файл последовательности в час (или день). Если вы будете использовать временную метку файла в качестве ключа и содержимого файла как значение, то в mapper вы сможете фильтровать файлы, не включенные в указанный временной диапазон. –

ответ

0

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

Во всяком случае, сделать цифры: такой большой файл будет также расщепляется на несколько частей, размер которых будет размером блока (dfs.blocksize пАРАМЕТРа hdfs-defaul.xml), и каждая из этих частей будут назначен картографом. Я имею в виду, в зависимости от размера блока и среднего размера «маленького файла», возможно, выигрыш не так велик.

+0

Ну, коэффициент усиления должен быть большим, так как файл может иметь размер 8 КБ, а размер блока по умолчанию - 64 МБ. – Marko

+0

Итак, я считаю, что ваш конкатенационный скрипт должен быть умным: вы должны объединить небольшие файлы, по крайней мере, до тех пор, пока не будет достигнут размер блока. – frb

+0

Спасибо за совет, но я хотел бы избежать объединения большого количества файлов каждый раз, когда нужно выполнить задание. Но, с другой стороны, мне, вероятно, понадобится разное подмножество файлов каждый раз ... (например, если задание начинается через восемь часов, ему нужны файлы, которые были добавлены в то же время, и ему не нужны файлы из размера окна - 8 ч). – Marko

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