Я новичок в Map-reduce, и я хочу понять, что такое ввод данных в файл последовательности. Я учился в книге Hadoop, но мне было трудно понять.
Что такое файл последовательности в hadoop?
Ответ 1
Сначала мы должны понять, какие проблемы пытается решить SequenceFile, а затем, как SequenceFile может помочь в их решении.
В HDFS
- SequenceFile - одно из решений небольшой проблемы с файлами в Hadoop.
- Маленький файл значительно меньше, чем размер блока HDFS (128 МБ).
- Каждый файл, каталог, блок в HDFS представлен как объект и занимает 150 байт.
- 10 миллионов файлов занимали бы около 3 гигабайт памяти NameNode.
- Миллиард файлов невозможен.
В MapReduce
Задачи карты обычно обрабатывают блок ввода за раз (используя FileInputFormat по умолчанию).
Чем больше файлов, тем больше нужно задач Map, и время выполнения может быть намного медленнее.
Небольшие файловые сценарии
- Файлы представляют собой фрагменты большего логического файла.
- Файлы по своей природе являются небольшими, например изображения.
Эти два случая требуют разных решений.
- Во-первых, напишите программу для объединения небольших файлов (см. пост Натана Марза post об инструменте, называемом "Консолидатор", который делает именно это)
- Для второго необходим какой-то контейнер, чтобы каким-то образом сгруппировать файлы.
Решения в Hadoop
Файлы HAR
- HAR (Hadoop Archives) были введены, чтобы облегчить проблему большого количества файлов, оказывающих давление на память наменодов.
- HAR, вероятно, лучше всего использовать исключительно в архивных целях.
SequenceFile
- Концепция SequenceFile состоит в том, чтобы поместить каждый маленький файл в один больший файл.
Например, предположим, что есть 10000 файлов размером 100 КБ, тогда мы можем написать программу, которая поместит их в один файл SequenceFile, как показано ниже, где вы можете использовать имя файла в качестве ключа и содержимое в качестве значения.
(источник: csdn.net)Некоторые преимущества:
- Меньшее количество памяти требуется на NameNode. Продолжаем с примером 10000 файлов размером 100 КБ,
- Перед использованием SequenceFile 10 000 объектов занимают около 4,5 МБ ОЗУ в NameNode.
- После использования SequenceFile, 1GB SequenceFile с 8 блоками HDFS, эти объекты занимают около 3,6 КБ ОЗУ в NameNode.
- SequenceFile является разделяемым, поэтому подходит для MapReduce.
- SequenceFile поддерживает сжатие.
- Меньшее количество памяти требуется на NameNode. Продолжаем с примером 10000 файлов размером 100 КБ,
Поддерживаемые сжатия, структура файла зависит от типа сжатия.
- несжатого
Сжатые записи: сжимает каждую запись как добавленную в файл.
(источник: csdn.net)Блок-сжатый
(источник: csdn.net)- Ожидание, пока данные не достигнут размера блока для сжатия.
- Сжатие блоков обеспечивает лучшую степень сжатия, чем сжатие записи.
- Сжатие блоков обычно является предпочтительным вариантом при использовании SequenceFile.
- Блок здесь не связан с блоком HDFS или файловой системой.