为什么hdfs中的blocksize在所有datanode中都是一致的?

vof42yt1  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(407)

继续问:hdfs中的数据块大小,为什么是64mb?
我知道hdfs中的blocksize在分布中的所有数据节点中都是一致的/相同的(大小取决于配置)。
我的问题是:为什么这个块大小在所有namenode中保持一致?
我问这个问题是因为,假设我有10台高端处理器作为datanode,还有20台低端硬件。如果我们在这10台机器的hdfs中保持较高的块,它能处理得更快吗?而且namenode有元数据来标识datanode中的块,那么机器之间块大小不一致的问题是什么呢?

rjee0c15

rjee0c151#

假设我有10台高端处理器作为datanode,还有20台低端硬件。如果我们在这10台机器的hdfs中保持较高的块,它能处理得更快吗?

简短的回答

hdfs块是hadoop中数据并行的基本单元。i、 一块hdfs由一个cpu核处理。根据数据节点的处理能力,对同一个文件使用不同的块大小64mb、128mb、256mb等将无济于事,因为每个hdfs块将由一个内核处理。即使是功能更强大的机器也会拥有更多的cpu核心,而不是更快的cpu核心(cpu核心的时钟速度在过去十年中已经达到了2.5到3.5 ghz左右的最大值)。
对于密度更大的某些文件(或类似于Parquet地板的文件类型),具有更大的块大小是有意义的。但基于datanode将一个文件拆分为不同大小的hdfs块显然没有意义。这可能就是hadoop设计者决定保持块大小一致的原因。

冗长的回答

你提到的是高端加工机器。现在,更快的机器意味着比更高时钟速度(ghz)的cpu拥有更多的内核。从相当长的一段时间(近十年)以来,时钟的速度几乎达到了极限。速度峰值约为2.5至3.5千兆赫。
在hdfs上运行的框架如mapreduce、spark等,一块hdfs由一个cpu核处理。因此,更大的块仍将由这些更大的机器中的一个核心进行处理。这将使这些任务运行得慢得多。
即使使用更高端的处理器,每个cpu核心的处理能力也将与普通节点相同。在具有更多核心的节点上存储更大的块将没有帮助(这些框中单个核心的处理能力将类似于较小/正常节点的处理能力)。
除此之外,hadoop的设计者们也有其他一些理由反对它。。。
如@cricket\u 007所述,允许将指定块大小作为集群范围的设置,并且可以使用dfs.blocksize在每个文件的基础上重写。
以下可能是一个文件中所有块大小一致的一些驱动因素。
简化配置-如何为每个文件指定每个数据节点的块大小?也许核数比普通节点多2倍的节点应该有2倍的块大小。。这将使配置非常困难。
避免数据倾斜-有些块比其他块大会导致数据倾斜。这直接影响到数据处理框架如何处理这些文件(根据节点的不同,这些文件具有不同的块大小)。
简化复制—假设hadoop集群复制因子配置为3。所以,每一块-总共需要3份。如果块大小取决于数据节点大小(计算能力),则必须至少有与复制因子计算能力相似的节点数。如果只有3个大节点和10个普通节点,那么所有的大块都需要在大节点上。
简化故障转移—假设其中一个大节点发生故障,hadoop将无法找到另一个大节点,在那里它可以复制这些额外的大数据块以跟上复制因子(我们只有3个大节点,其中一个节点掉了)。最终,如果它将这些大数据块复制到普通节点上,它将在处理能力和数据块大小方面引入偏差,并影响数据处理作业的性能。另一种选择是在移动到普通节点时分割大的块,这也是额外的复杂性
获得可预测的性能—数据中的偏差意味着很难获得可预测的性能。
这些可能是一些引入太多复杂性的原因,因此不支持此功能。

相关问题