均衡器
均衡器程序是一个hadoop守护进程,它将块从忙碌的datanode移到相对空闲的datanode,从而重新分配块。
1、HDFS不会自动将块从旧的datanode移到新的datanode以平衡集群。用户需要自动运行均衡器。
2、均衡器在标准日志目录中创建一个日志文件,记录每次重新分配过程(每次一行)。
3、dfs.balance.bandwidthPerSec属性
在hdfs-site.xml中的dfs.balance.bandwidthPerSec属性指定均衡器在调整集群时,不同节点之间复制数据的带宽大小MB/s。
均衡器的相关知识点
1、怎样使用均衡器?
均衡器坚持块复本放置策略,将复本分散到不同机架,以降低数据损坏率。
它不断移动块,直到集群达到均衡,即每个datanode的使用率(该节点上以使用的空间与空间容量之间的比例)和集群的使用率(集群中已使用的空间与集群的空间容量之间的比率)非常接近,差距不超过给定的阈值。
2、判定均衡的标准?
它不断移动块,直到集群达到均衡,即每个datanode的使用率(该节点上以使用的空间与空间容量之间的比例)和集群的使用率(集群中已使用的空间与集群的空间容量之间的比率)非常接近,差距不超过给定的阈值。
3、怎样判定已基本均衡?!
可调用下面指令启动均衡器:
% start-balancer.sh
-threshold参数指定阈值(百分比格式),以判定集群是否均衡。
这个标记是可选的,如果不使用,默认阈值是10%。
4、一个集群中有几个均衡器?
在任何时刻,集群中都只运行一个均衡器。
5、均衡器在什么时候运行?
均衡器会一直运行,直到在集群变均衡;之后,均衡器无法移动任何块,或与namenode失去联系。
6、均衡器在不同节点之间复制数据的带宽由哪个属性指定?
为了降低集群负荷、避免干扰其他用户,均衡器被设计为在后台运行。
在不同节点之间复制数据的带宽也是受限的。
默认值是很小的1MB/s,可以通过hdfs-site.xml文件中的dfs.balance.bandwidthPerSec属性指定(单位是字节)。
委任和解除节点
委任新节点
1、委任新节点具体步骤
1)、配置hdfs-site.xml,指向namenode;
2)、配置mapred-site.xml,指向jobtracker;
3)、启动datanode和jobtracker守护进程;
注意:最好指定一些经过审核的节点,新节点包含在其中。(????)
2、连接到namenode的所有datanode
被允许连接到namenode的所有datanode放在一个文件中,文件名称由dfs.hosts属性指定
该文件放在namenode的本地文件系统中,每行对应一个datanode的网络地址(由datanode报告——可以通过namenode的网页查看?????)。
如果需要为一个datanode指定多个网络地址,可将多个网络地址放在一行,由空格隔开。
3、mapred.hosts(连接到jobtracker的所有tasktracker)
被允许连接到jobtracker的所有tasktracker也在同一个文件中指定,由mapred.hosts属性指定
通常情况下,由于集群的节点同时运行datanode和tasktracker守护进程,dfs.hosts和mapred.hosts会同时指向一个文件,即include文件。
4、向集群添加新节点的步骤
1)、将新节点的网络地址添加到include中。
2)、运行以下指令,更新namenode的经过审核的一系列datanode集合。
% hadoop dfsadmin -refreshNodes
3)、以新节点更新slaves文件。
这样的话,Hadoop控制脚本会将新节点包括在未来操作之中。
4、启动新的datanode。
5、重启MapReduce集群。
6、检查新的datanode和tasktracker是否都出现在网页界面中。
解除旧节点
1、datanode故障
HDFS能够容忍datanode故障,但这不意味着允许随意终止datanode。
以三复本策略为例,如果同时关闭不同机架上的三个datanode,丢失数据的概率会非常高。
2、tasktracker故障
Hadoop的tasktracker也可容忍故障的发生。
如果关闭一个正在运行任务的tasktracker,jobtracker会意识到发生故障,并在其它tasktracker上重新调度任务。
3、若要解除一个节点,则该节点需要出现在execlude文件
对于HDFS来说,文件名称由dfs.hosts.exclude属性控制;
对于MapReduce来说,文件名称由mapred.hosts.execlude属性控制。
这些文件列出若干未被允许连接到集群的节点。
通常情况下,这两个属性指向同一个文件。
4、从集群中移除节点的步骤
1)、将待解除节点的网络地址添加到exclude文件中。不更新include文件。
2)、重启MapReduce集群,以终止在待解除节点上运行的tasktracker。
3)、执行以下指令,使用一系列新的审核过的datanode来更新namenode设置:
% hadoop dfsadmin -refreshNodes
4)、转到网页界面,查看待解除datanode的管理状态是否已经变为“Decommission In Progress”。
将这些datanode块复制到其它datanode中。
5)、当所有datanode的状态变为“Decommissioned”是,表明所有块都已经复制完毕。关闭已经解除的节点。
6)、从include文件中移除这些节点,并运行以下命令:
% hadoop dfsadmin -refreshNodes
7)、从slaves文件中移除节点。
委任和解除节点相关知识点
1、dfs.hosts属性和mapred.hosts属性指定的文件为什么不同于slaves文件?
dfs.hosts和mapred.hosts属性供namenode和jobtracker使用,用来决定可以连接哪个工作节点。
Hadoop控制脚本使用slaves文件执行集群范围的操作,例如重启集群等。
Hadoop守护进程从不使用slaves文件。(???????????)
2、正确解除datanode节点的方法是什么?
用户将拟退出的若干datanode告知namenode,方可在这些datanode停机之前将块复制到其它datanode。
3、怎样判断一个tasktracker能否连接到jobtracker?
仅当tasktracker出现在include文件且不出现在exclude文件中时,才能够连接到jobtracker。
注意:
如果未指定include文件,或include文件为空,则意味着所有节点均在include文件中。
4、怎样判断一个datanode是否被解除委任?
如果一个datanode同时出现在include和exclude文件中,则该节点可以连接,但是很快会被解除委任。
如果未指定include文件或include文件为空,都意味着包含所有节点。