小文件和HDFS块

Eug*_*gen 10 hadoop hdfs

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

Pra*_*ati 15

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

根据Hadoop:The Definitive Guide

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

HDFS旨在处理大型文件.如果有太多小文件,则NameNode可能会被加载,因为它存储了HDFS的名称空间.查看这篇文章,了解如何通过太多小文件来缓解问题.


iSi*_*ngh 5

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

详情:

  • 当你在 HDFS 上推送一个文件时,它会被分成块。每个块就像一个单独的文件,具有由块大小描述的最大大小。

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

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

一些命令:

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

(目录是根据我的集群 - /data2/dfs/dn/):

块大小:1 GB

cd /data/dfs/dn -> current -> Finalized -> subDir0 -> (这里是 Gold )

块仅使用 KB 的存储空间来存储小文件,或者可能是当文件大小是我的块大小 + 一些 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 8 月 31 日 12:03 blk_1073753814

-rw-r--r-- 1 hdfs hdfs 8.1M 8 月 31 日 12:04 blk_1073753814_12994.meta

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

hdfs fsck -blocks -locations

如果我在这里遗漏了什么,请告诉我。