小文件和HDFS块

时间:2011-12-19 14:42:25

标签: hadoop hdfs

Hadoop分布式文件系统中的块是存储多个小文件,还是一个块只存储一个文件?

5 个答案:

答案 0 :(得分:14)

多个文件不存储在单个块中。顺便说一下,单个文件可以存储在多个块中。文件和block-id之间的映射将保留在NameNode中。

根据Hadoop : The Definitive Guide

  

与单个磁盘的文件系统不同,HDFS中小于单个块的文件不会占用整个块的底层存储空间。

HDFS旨在处理大文件。如果有太多小文件,则NameNode可能会被加载,因为它存储了HDFS的名称空间。请查看此article,了解如何使用太多小文件来缓解此问题。

答案 1 :(得分:4)

Hadoop块大小是Hadoop存储概念。每次当您在Hadoop中存储文件时,它将分为块大小,并根据复制因子和数据位置将其分布在群集上。

详情:

  • 在HDFS上推送文件时,它将被分为块。每个块就像一个单独的文件,具有块大小所描述的最大大小。

  • 每个块都包含一个.meta文件,用于在Hadoop上存储块的元数据信息。

  • 如果文件非常小,那么整个文件将在一个块中,并且块(存储文件)将与文件和元文件具有相同的大小。

一些命令:

  • 连接到群集上的任何数据节点[如果您有权访问;)]。然后转到该节点的存储目录,您可以看到存储在数据节点上的实际块,如下所示。

(Dir是我的群集 - / data2 / dfs / dn /):

BLOCK大小:1 GB

cd / data / dfs / dn - >当前 - >完成 - > subDir0 - > (这里是黄金

Block仅为小文件使用KB存储空间,或者当文件大小为我的blocksize +某些KB

-rw-r - r-- 1 hdfs hdfs 91K Sep 13 16:19 blk_1073781504

-rw-r - r-- 1 hdfs hdfs 19K Sep 13 16:21 blk_1073781504_40923.meta

当文件更大时,块的大小将如下所示

-rw-r - r-- 1 hdfs hdfs 1.0G Aug 31 12:03 blk_1073753814

-rw-r - r-- 1 hdfs hdfs 8.1M Aug 31 12:04 blk_1073753814_12994.meta

我希望它能解释块存储的东西。如果您想知道文件在块中的存储方式,请运行

hdfs fsck -blocks -locations

如果我错过了这里的任何内容,请告诉我。

答案 2 :(得分:3)

那么你可以使用HAR(Hadoop Archive)文件系统来做到这一点,该文件系统试图将多个小文件打包到由HAR文件系统管理的特殊部分文件的HDFS块中。

答案 3 :(得分:3)

一个块将存储一个文件。如果您的文件大于BlockSize(64/128 / ..),那么它将在具有相应BlockSize的多个块中进行分区。

答案 4 :(得分:1)

需要在hdfs, file is partioned into blocks based on size 中理解要点,而不是在内存中存在一些存储文件的块(这是误解)

基本上多个文件不存储在一个块中(除非它是Archive或Har文件)。