均衡器

均衡器程序是一个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文件为空,都意味着包含所有节点。

hdfs自动均衡参数 hdfs均衡命令_均衡器