Datanode块扫描器

各个datanode运行一个块扫描器,定期检测节点上的所有块,从而在客户端读到坏块之前及时检测和修复坏块。可以依靠DataBlockScanner所维护的块列表依次扫描块,查看是否存在校验和错误。扫描器利用节流机制,来维持datanode的磁盘带宽。
默认情况下,扫描器每隔三周就会检测块,以应对可能的磁盘故障,这个周期由dfs.datanode.scan.period.hours属性设置。损坏的块报给namenode,并被及时修复。

均衡器

随着时间的推移,各个datanode上的块分布的越来越不均衡。不均衡的集群会降低MapReduce的本地性,导致部分datanode相对更为繁忙。应避免出现这种情况。
均衡器(balancer)程序是一个hadoop守护进程,它将块从繁忙的datanode移到相对空闲的datanode,从而重新分配块。同时坚持块复本放置策略,将复本分散到不同机架,以降低数据损坏率。他不断移动块,直到集群达到平衡,即每个datanode的使用率(该节点上已经使用的空间和空间容量之间的比率)和集群的使用率(集群中使用的空间与集群的空间容量之间的比率)非常接近,差距不超过给定的阀值。可调用下面指令启动均衡器运行:Start-balancer.sh。
-threshold参数指定阀值,以判断集群中是否均衡。这个标记是可选的;若不使用,默认阀值是10%。在任何时刻,集群中都只运行一个均衡器。均衡器会一直运行,直到集群变均衡。
为了降低集群负荷、避免干扰其他用户,均衡器被设计为在后台运行。在不同节点之间复制数据的带宽也是受限的。默认值是很小的1MB/s。可以通过hdfs-site.xml文件中的dfs.balance.bandwidthPerSec属性指定。
注意:在使用hdfs的过程中需要经常备份元数据和数据。元数据在namenode中;数据在datanode中,虽然datanode拥有多分数据备份,但是关键数据还是需要定期备份。如果要运行均衡器,需要在终端键入启动均衡器的指令,这就相当于我们的磁盘整理。这里说的均衡器是一个hadoop守护进程,我们启动均衡器以后,他就会在后台运行,运行达到我们设置的阀值后,均衡器自动停止。

向集群添加新节点

①将新节点的网络地址添加到include中(由dfs.hosts和mapred.hosts属性指定的文件;在cloudera manager管理中该文件叫dfs_hosts_allow.txt);
②运行一下指令,更新namenode的经过审批的一系列datanode集合:
Hadoop dfsadmin -refreshNodes
③以新节点更新slave文件。这样的话,hadoop控制脚本会将新节点包括在未来的操作中。
④启动新的datanode
⑤重启MapReduce集群
⑥检查新的datanode和TaskTracker是否出现在网页界面中
注意:hdfs不会自动将块从旧的datanode移到新的datanode以平衡集群,用户需要自己激活均衡器运行。

从集群中删除节点

①将待解除节点的网络地址添加到exclude文件中(cloudera中叫dfs_hosts_exclude.txt),不更新include文件
②重启MapReduce集群,已终止在待解节点上运行的TaskTracker。
③执行一下指令,使用一系列新的审核通过datanode来更新namenode设置:
Hadoop dfsadmin -refreshNodes
④转到网页界面,查看待解除datanode的管理状态是否已经变为“Decommission in Progress”。将这些datanode的块复制到其他datanode中。
⑤当所有的datanode的状态变为“Decommissioned”时,表明所有块都已经复制完毕。关闭已经删除的节点。
⑥从include文件中删除这些节点,并执行一下命令:hadoop dfsadmin –refreshNodes。
⑦从slaves文件中删除节点

升级

①执行升级任务之前,确保前一升级已经定妥;
②关闭MapReduce,终止在taskTracker上运行任何孤儿任务。
③关闭hdfs,并备份namenode目录。
④在集群和客户端安装新版本的hadoop HDFS和MapReduce。
⑤使用-upgrade选项启动HDFS
⑥等待,直到升级完成
⑦检查HDFS是否运行正常
⑧启动MapReduce
⑨回滚或定妥升级任务(可选的)。