Что такое файл последовательности в hadoop?

Я новичок в Map-reduce, и я хочу понять, что такое ввод данных в файл последовательности. Я учился в книге 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, как показано ниже, где вы можете использовать имя файла в качестве ключа и содержимое в качестве значения.

    SequenceFile File Layout
    (источник: csdn.net)

  • Некоторые преимущества:

    1. Меньшее количество памяти требуется на NameNode. Продолжаем с примером 10000 файлов размером 100 КБ,
      • Перед использованием SequenceFile 10 000 объектов занимают около 4,5 МБ ОЗУ в NameNode.
      • После использования SequenceFile, 1GB SequenceFile с 8 блоками HDFS, эти объекты занимают около 3,6 КБ ОЗУ в NameNode.
    2. SequenceFile является разделяемым, поэтому подходит для MapReduce.
    3. SequenceFile поддерживает сжатие.
  • Поддерживаемые сжатия, структура файла зависит от типа сжатия.

    1. несжатого
    2. Сжатые записи: сжимает каждую запись как добавленную в файл. record_compress_seq
      (источник: csdn.net)

    3. Блок-сжатый 这里写图片描述
      (источник: csdn.net)

      • Ожидание, пока данные не достигнут размера блока для сжатия.
      • Сжатие блоков обеспечивает лучшую степень сжатия, чем сжатие записи.
      • Сжатие блоков обычно является предпочтительным вариантом при использовании SequenceFile.
      • Блок здесь не связан с блоком HDFS или файловой системой.