2014-01-22 2 views

ответ

7

Цитирование из Hadoop - Полное руководство:

HDFS хранит небольшие файлы нерационально , так как каждый файл хранится в блоке, а блок метаданные хранятся в памяти посредством namenode. Таким образом, большое количество небольших файлов может съесть много памяти на namenode. (Обратите внимание, однако, что небольшие файлы не принимают больше дискового пространства, чем требуется для хранения необработанного содержимого файла. Например, файл размером 1 МБ, размер которого составляет 128 МБ, использует 1 МБ диска пространство, не 128 MB.) Hadoop Архивы или HAR файлы, являются файл архивации объекта, который упаковывает файлы в HDFS блоков более эффективно, тем самым уменьшая использование памяти NameNode в то же время позволяя прозрачный доступ к файлам.

Заключение: Каждый файл будет храниться в отдельном блоке.

+1

Например, 1 MB файл, хранящийся с размер блока 128 МБ использует 1 МБ дискового пространства, а не 128 МБ.) Как hdfs используют оставшиеся 127M в этом блоке? Блоки –

-1

Да. когда вы храните большое количество небольших файлов, они сохраняются в одном блоке, пока блок не будет иметь равное пространство для размещения. Но неэффективность приходит, потому что для каждого из этих маленьких файлов будет создана запись индексирования (имя файла, блок, смещение), созданная в namenode для каждого маленького файла. Это избавляет память, зарезервированную для метаданных в namenode, если у нас есть много небольших файлов вместо небольшого количества очень больших файлов.

+0

являются логическими, а не физическими, один блок не может содержать более одного файла, а пространство, оставшееся после каждого блока, может использоваться другими блоками. – MikA

1

Ниже то, что указано в Hadoop Definitive Guide:

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

Например, если у вас есть файл размером 30 МБ, а размер блока - 64 МБ, то этот файл будет храниться в одном блоке логически, но в физической файловой системе HDFS использует только 30 МБ для хранения файл. Остальные 30 МБ будут свободны в использовании.

+0

Файл будет храниться в одном блоке логически? что здесь логически означает? –

+0

«один блок логически» означает, что при запуске mapreduce maptask рассмотрит этот файл 30mb как один блок для обработки (только если размер разделения такой же, как размер блока hdfs) – prad

0

каждый блок принадлежит только один файл, просто сделать, как показано ниже: 1.Use FSCK команды, чтобы получить блок информации о файле:

hadoop fsck /gavial/data/OB/AIR/PM25/201709/01/15_00.json -files -blocks 

из поставил так:

/gavial/data/OB/AIR/PM25/201709/01/15_00.json 521340 bytes, 1 block(s): OK 
0. BP-1004679263-192.168.130.151-1485326068364:blk_1074920015_1179253 len=521340 repl=3 

Status: HEALTHY 
Total size: 521340 B 
Total dirs: 0 
Total files: 1 
Total symlinks:  0 
Total blocks (validated): 1 (avg. block size 521340 B) 
Minimally replicated blocks: 1 (100.0 %) 
Over-replicated blocks: 0 (0.0 %) 

блок id is

blk_1074920015 

2.использовать FSCK команду, чтобы показать статус блока, из положить, как это

HDFS FSCK -blockId blk_1074920015

Block Id: blk_1074920015 
Block belongs to: /gavial/data/OB/AIR/PM25/201709/01/15_00.json 
No. of Expected Replica: 3 
No. of live Replica: 3 
No. of excess Replica: 0 
No. of stale Replica: 0 
No. of decommission Replica: 0 
No. of corrupted Replica: 0 
Block replica on datanode/rack: datanode-5/default-rack is HEALTHY 
Block replica on datanode/rack: datanode-1/default-rack is HEALTHY 

очевидно, что блок принадлежит только один файл

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