Небольшие файлы и блоки HDFS - PullRequest
8 голосов
/ 19 декабря 2011

Хранит ли блок в распределенной файловой системе Hadoop несколько небольших файлов или блок хранит только 1 файл?

Ответы [ 5 ]

14 голосов
/ 19 декабря 2011

Несколько файлов не хранятся в одном блоке. Кстати, один файл может храниться в нескольких блоках. Отображение между файлом и идентификаторами блоков сохраняется в NameNode.

Согласно Hadoop: полное руководство

В отличие от файловой системы для отдельного диска, файл в HDFS, который меньше, чем один блок, не занимает весь объем базового хранилища.

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

4 голосов
/ 15 сентября 2017

Размер блока Hadoop - это концепция хранения Hadoop. Каждый раз, когда вы сохраняете файл в Hadoop, он будет разделен на размеры блоков и в зависимости от коэффициента репликации и локальности данных будет распределен по кластеру.

Для деталей:

  • Когда вы загружаете файл в HDFS, он будет разделен на блоки. Каждый блок подобен отдельному файлу с максимальным размером, как описано размером блока.

  • Каждый блок будет содержать файл .meta вместе с ним для хранения метаданных блока в Hadoop.

  • Если файл очень маленький, то весь файл будет в одном блоке, а блок (файл хранения) будет иметь тот же размер, что и файл и метафайл.

Некоторые команды:

  • Подключитесь к любому узлу данных в вашем кластере [если у вас есть доступ;)]. Затем перейдите в каталоги хранилища для этого узла, и вы увидите фактические блоки, хранящиеся на узле данных, как показано ниже.

(каталог соответствует моему кластеру - / data2 / dfs / dn /):

БЛОК Размер: 1 ГБ

cd / data / dfs / dn -> current -> Finalized -> subDir0 -> ( это Gold )

Блок использует только КБ памяти для небольших файлов или может быть, когда размер файла соответствует размеру моего блока + некоторые КБ

-rw-r - r-- 1 hdfs hdfs 91K 13 сентября 16:19 blk_1073781504

-rw-r - r-- 1 hdfs hdfs 19K 13 сентября 16:21 blk_1073781504_40923.meta

Если размер файла больше, то размер блока будет выглядеть примерно так:

-rw-r - r-- 1 hdfs hdfs 1.0G 31 августа 12:03 blk_1073753814

-rw-r - r-- 1 hdfs hdfs 8.1M 31 августа 12:04 blk_1073753814_12994.meta

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

hdfs fsck -blocks -locations

Дайте мне знать, если я что-то упустил здесь.

3 голосов
/ 28 июня 2013

Блок будет хранить один файл.Если ваш файл больше BlockSize (64/128 / ..), он будет разбит на несколько блоков с соответствующим BlockSize.

3 голосов
/ 11 марта 2013

Ну, вы могли бы сделать это, используя файловую систему HAR (Hadoop Archive), которая пытается упаковать несколько небольших файлов в блок HDFS файла специальной детали, управляемого файловой системой HAR.

1 голос
/ 26 июня 2014

Суть нужно понимать в hdfs, file is partioned into blocks based on size, а не в том, что в памяти будут какие-то блоки, где хранятся файлы (это ошибочное представление)

В основном несколько файловне хранятся в одном блоке (если это не архив или файл Har).

...