hadoop中的hdfs文件系统,可以动态的增加、删除节点,增加比较容易,在新的节点上配置好hadoop的各种xml文件后,直接启动即可。为了平衡集群内各个datanode节点平衡,可以执行hdfs中的balancer命令,使用方式如下:
$ hdfs balancer --help
Usage: java Balancer
[-policy <policy>] the balancing policy: datanode or blockpool
[-threshold <threshold>] Percentage of disk capacity
[-exclude [-f <hosts-file> | comma-sperated list of hosts]] Excludes the specified datanodes.
[-include [-f <hosts-file> | comma-sperated list of hosts]] Includes only the specified datanodes.
为了防止运行balancer命令时多度占用集群带宽,可以在hdfs-site.xml配置如下参数:
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>1048576</value>
<description>
Specifies the maximum amount of bandwidth that each datanode
can utilize for the balancing purpose in term of
the number of bytes per second.
</description>
</property>
可以看到,在hadoop2.6.0版本中,默认配置为1048576b / 1024 / 1024=1M/s
下线datanode节点则相对较麻烦,因为需要保证要下架的机器中的数据拷贝到集群其他节点中,所以不能够直接关闭节点来达到下线的目标。具体步骤如下:
1. 修过namenode的hdfs-site.xml文件,增加如下配置
<property>
<name>dfs.hosts.exclude</name>
<value></value>
<description>Names a file that contains a list of hosts that are
not permitted to connect to the namenode. The full pathname of the
file must be specified. If the value is empty, no hosts are
excluded.</description>
</property>
这里的value为一个包含要下架机器的文件列表,比如要下架的机器hostname为:foo、bar两台,这个文件的位置为/etc/hadoop/conf/dfs.exclude
,那么该文件中的内容则为:
foo
bar
一个hostname占一行。
2. 执行hdfs dfsadmin -refreshNodes
,来让namenode重启读取配置文件
3. 执行hdfs dfsadmin -report
命令,查看要下架机器的状态Decommission Status : Decommission in progress
表示正在向集群内其他节点拷贝数据.拷贝完成后,状态变为Decommissioned
时,说明要下降机器中的数据已经拷贝到其他机器中
4. 停掉datanode。$HADOOP_HOME/sbin/hadoop-daemon.sh stop datanode
5. 去掉步骤1添加的配置项,再次执行hdfs dfsadmin -refreshNodes
参考:
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/H...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。