Параметры некоторых машин измеряются и загружаются через веб-службу в HDFS. Значения параметров сохраняются в файле для каждого измерения, где измерение имеет в среднем 1000 значений.Большое количество небольших файлов Hadoop
Проблема в том, что существует большое количество файлов. Для задания MapReduce используется определенное количество файлов (например, измерения за последний месяц). Из-за этого я не могу объединить их все в один большой файл последовательности, поскольку разные файлы нужны в разное время.
Я понимаю, что плохо иметь большое количество небольших файлов, поскольку NameNode содержит пути ко всем из них на HDFS (и хранит его в своей памяти), а с другой стороны, каждый маленький файл приведет к Создание карты.
Как я могу избежать этой проблемы?
Вы пытались использовать 'CombineSequenceFileInputFormat'? Он должен объединять небольшие файлы в один раскол и создавать меньшее количество картографов. Документация: https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapreduce/lib/input/CombineSequenceFileInputFormat.html –
Честно говоря, я не очень опытен с Hadoop, но я понимаю что могут возникнуть некоторые проблемы с этим подходом. Например, ссылки на все файлы на HDFS будут сохранены в памяти NameNode, это верно? Существуют ли и другие проблемы при использовании CombineSequenceFileInputFormat? – Marko
Да, хранение большого количества небольших файлов в HDFS - плохая идея. Вы можете объединить небольшие файлы в один файл последовательности в час (или день). Если вы будете использовать временную метку файла в качестве ключа и содержимого файла как значение, то в mapper вы сможете фильтровать файлы, не включенные в указанный временной диапазон. –