HDFS中的数据块大小,为什么是64MB?

dyk*_*ykw 43 database hadoop mapreduce block hdfs

HDFS/hadoop的默认数据块大小为64MB.磁盘中的块大小通常为4KB.64MB块大小是什么意思? - >这是否意味着从磁盘读取的最小单位是64MB?

如果是,那么这样做有什么好处? - >在HDFS中连续访问大文件很容易吗?

我们可以通过在磁盘中使用原始的4KB块大小来做同样的事情吗?

bst*_*mpi 78

What does 64MB block size mean?
Run Code Online (Sandbox Code Playgroud)

块大小是文件系统可以存储的最小数据单位.如果存储1k或60Mb的文件,则会占用一个块.一旦穿过64Mb边界,就需要第二个块.

If yes, what is the advantage of doing that?
Run Code Online (Sandbox Code Playgroud)

HDFS旨在处理大文件.假设您有一个1000Mb的文件.对于4k块大小,您必须发出256,000个请求来获取该文件(每个块1个请求).在HDFS中,这些请求通过网络传递,并带来很多开销.每个请求都必须由名称节点处理,以确定可以找到该块的位置.那是很多流量!如果使用64Mb块,请求数将减少到16,从而大大降低了名称节点上的开销和负载成本.

  • 感谢您的回答.假设块大小为4KB,文件存储在磁盘中的连续块中.为什么我们不能使用1个请求检索1000 MB文件?我知道目前HDFS可能不支持这种访问方法.但是这种访问方法有什么问题呢? (4认同)
  • 这个答案是完全错误的."块"或"块大小"的含义取决于文件系统,在HDFS的情况下,**表示它可以存储的最小单位,它是namenode引用的最小单位.并且块通常按顺序存储在物理磁盘上,这使得快速读取和写入块.对于小文件,块大小并不重要,因为它们总是小于块大小并存储为较小的块.因此,更大的块大小通常更好,但是必须权衡所需的数据量和映射器分布. (2认同)

cab*_*bad 18

HDFS的设计最初受到Google文件系统(GFS)设计的启发.以下是原始GFS文件中所述的大块大小的两个原因(关于GFS术语与HDFS术语的注释1:chunk = block,chunkserver = datanode,master = namenode;注2:粗体格式是我的):

大块尺寸提供了几个重要的优点.首先,它减少了客户端与主服务器交互的需要,因为在同一块上的读取和写入只需要向主服务器发送一个初始请求以获取块位置信息.减少对我们的工作负载尤其重要,因为应用程序主要是按顺序读取和写入大文件.[...] 其次,因为在大块上,客户端更有可能在给定块上执行许多操作,它可以通过在较长时间内保持与块服务器的持久TCP连接来减少网络开销.第三,它减少了存储在主服务器上的元数据的大小.这允许我们将元数据保存在内存中,这反过来又带来了我们将在2.6.1节中讨论的其他优点.

最后,我应该指出Apache Hadoop中当前的默认大小是128 MB.