HDFS(Hadoop分布式文件系统)集群随着使用时间的增长,难免会出现一些“性能退化”的节点,主要表现为磁盘读写变慢、网络传输变慢,我们统称这些节点为慢节点。当集群扩大到一定规模,比如上千个节点的集群,慢节点通常是不容易被发现的。大多数时候,慢节点都藏匿于众多健康节点中,只有在客户端频繁访问这些有问题的节点,发现读写变慢了,才会被感知到。
因此,要想维护HDFS集群读写性能稳定,慢节点问题一直是一个绕不开的话题。在Hadoop2.9之后,社区支持了从Namenode jmx上查看慢节点的功能,小米基于此框架,开发了一整套HDFS集群慢节点监控及自动处理流程,在实际生产环境中,具有不错的应用效果,可以保证慢节点能够被及时准确发现,并在NameNode端自动规避处理。
1、HDFS写pipeline的流程
为了保证高可靠性,文件默认以三副本的形式保存在HDFS上,当client开始写入一个新文件的时候,首先会找出三个DataNode建立pipeline,随后数据以packet为最小单元,依次通过pipeline里的三个DN,完成三副本写入。
具体的写入流程是:首先DN0收到从client端传过来的packet,DN0立即将packet传至下游DN,随后对packet进行落盘操作,DN1的操作与DN0一致,DN2作为pipeline里的最后一个节点,在落盘数据之后,会向上游DN发送ack,DN1在收到ack后继续向上游转发,DN0在收到DN1的ack后向client端转发,client收到DN0的ack即完成一次完整的pipeline写入流程。
HDFS写pipeline流程
Comments