需要深入研究Hadoop集群的存储节点并做相应的优化,减少新机型带来的性能压力。NameNode的优化可以参考(深度优化Hadoop NameNode读写性能)
1. 现状分析
为了解决上述提到的问题,需要分析Hadoop DataNode(后面简称DN)内核运行原理。我们知道DN主要用于接收用户的数据写入,并与NameNode(后面简称NN)节点定期通信,拿到执行命令。现网HA场景下,其基本的架构如下:
-
BPServiceActor会根据集群NN的配置而实例化多个,集群有3个NN则会实例化出三个NN
-
BPServiceActor主要用于从NN处获取Command(对数据的增删改查,迁移等等),上报心跳、IBR(增量块汇报)以及FBR(全量块汇报)
-
FsDataSet接口负责承接用户请求,并将对应的读写等操作落实到具体的volume上来,并对DN本省维护的一些块信息做更新操作(块大小,时间戳,完成状态等)
用户client创建文件时,会从NN上拿取待写入的DN信息。client拿到信息之后,会直接连接DN节点发起写请求,DN会根据volume的负载(一般是当前volume已使用空间),
选择负载较低的磁盘写入。写入完毕之后,会触发IBR发送给NN。当我们增加单机volume个数时,会带来如下问题挑战:
-
FsDataSet使用全局锁控制volume读写