前言
我们都知道,HDFS在准备写文件块的时候,必须要做的一个步骤是要从集群内数以千计的节点中选择一个有效的节点作为待写入块的目标节点。那么这里何为”有效的节点”呢?指的是此节点内包含有快文件需要的Storage Type(存储类型)。比如说某block要求的类型是SSD,而当前选出的节点所有数据目录都是DISK的话,那这个节点就不是满足要求的节点,此轮选举就会被废弃,将选过的节点加入exclude列表,然后重新进行下一轮的选取。所以在这里,笔者想要只要聊聊其中选择效率的问题。这种策略其实是有一定问题的,比如说,集群内包含1000个节点,999个节点都是DISK类型,而只有1个节点是SSD类型的,那么要为SSD存储类型的文件选择目标节点,岂不是得经过好几轮选举了?因为目前的策略是每次随机挑选一个节点,然后拿来进行对比。当然如果节点完全是同构的,这当然没问题,但是如果出现多种异构型的节点,这种做法显然不够合理。本文笔者就来聊聊这个话题。
多异构存储的节点选择问题
多异构存储环境下的节点选择问题,并不是笔者直接发现的,而是源自于社区JIRA HDFS-11419(BlockPlacementPolicyDefault is choosing datanode in an inefficient way),大致提到的意思就是笔者在前言中所阐述的。归纳起来一句话,在一些集群环境结构十分特殊的情况下(比如集群存储类型比例完全不平衡时),选择偏少一方的存储类型节点