继续提问:data block size in HDFS, why 64MB?
我知道HDFS中的块大小在分布中的所有数据节点(大小取决于配置)中一致/相同。
我的问题是: 为什么这个块大小在所有NameNode中保持一致?
我问这个问题是因为,我说有10个高端处理机作为DataNode,另有20个低端硬件。如果我们在这10台机器的HDFS中保留更高的块块,它可以更快地处理吗? NameNode也有元数据来识别DataNode中的块,那么机器之间块大小不一致的问题是什么?
答案 0 :(得分:2)
假设我有10个高端处理机作为DataNode,另有20个低端硬件。如果我们在这10台机器的HDFS中保留更高的块块,它可以更快地处理吗?
HDFS块是hadoop中数据并行的基本单位。即,一个CPU核处理一个HDFS块。根据DataNode的处理能力,对于同一文件具有不同的块大小64MB,128MB,256MB等将无济于事,因为每个HDFS块将由一个核处理。即使是功能更强大的机器也会拥有更多的CPU内核而不是更快的CPU内核(CPU内核的时钟速度在过去十年中已达到2.5到3.5 GHz左右)。
对于某些文件(或像Parquet这样的文件类型)更加密集,有更大的块大小是有意义的。但是根据DataNode将一个文件拆分为可变大小的HDFS块当然没有意义。这可能就是为什么hadoop设计师决定采用一致的块尺寸。
您提到了高端处理机。如今,更快的机器意味着CPU具有比具有更高时钟速度(GHz)的CPU更多的内核。从很长一段时间(差不多十年)开始,时钟速度几乎达到了极限。速度达到了2.5到3.5 GHz的峰值。
在HDFS上运行的框架,例如MapReduce,Spark等,一块HDFS由一个CPU核心处理。因此,较大的块仍将由那些较大的机器中的1个核心处理。这将使这些任务运行得慢得多。
即使使用高端处理机,每CPU核心处理能力也会与普通节点相同。在具有更多核心数的节点上存储更大的块将无济于事(这些盒子中的各个核心的处理能力将与较小/正常节点的处理能力相似)。
此外,还有一些其他原因让hadoop设计师决定反对它......
允许指定块大小作为群集范围的设置,如@ cricket_007所述,以及使用dfs.blocksize在每个文件的基础上覆盖。
以下可能是一个驱动因素,为什么一个文件的所有块都具有一致的大小。
这可能是引入太多复杂性的一些原因,因此不支持此功能。