hadoop集群会经常遇到增删节点的情况,这里整理一下修改hdfs备份系数和增删datanode时的一些工作。
检查修改备份系数
查看文件备份数
1 2 3 4
| [root@VLNX107011 hue] Found 2 items drwxr-xr-x - fsdevops fsdevops 0 2015-11-18 11:09 /facishare-data/flume/test/2015 -rw-r--r-- 2 fsdevops fsdevops 33 2015-11-30 17:49 /facishare-data/flume/test/nohup.out
|
结果行中的第2列是备份系数(注:文件夹信息存储在namenode节点上,没有备份,故文件夹的备份系数是横杠)
查看集群平均备份数
通过hadoop fsck /
可以方便的看到Average block replication
的值,这个值不一定会与Default replication factor
相等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [root@VLNX107011 hue] Connecting to namenode via http://VLNX107011:50070 FSCK started by root (auth:SIMPLE) from /VLNX107011 for path / at Fri Dec 04 19:08:09 CST 2015 ................... Total size: 11837043630 B (Total open files size: 166 B) Total dirs: 3980 Total files: 3254 Total symlinks: 0 (Files currently being written: 2) Total blocks (validated): 2627 (avg. block size 4505916 B) (Total open file blocks (not validated): 2) Minimally replicated blocks: 2627 (100.0 %) Over-replicated blocks: 2253 (85.76323 %) Under-replicated blocks: 0 (0.0 %) Mis-replicated blocks: 0 (0.0 %) Default replication factor: 3 Average block replication: 2.9798248 Corrupt blocks: 0 Missing replicas: 0 (0.0 %) Number of data-nodes: 10 Number of racks: 1 FSCK ended at Fri Dec 04 19:08:09 CST 2015 in 100 milliseconds The filesystem under path '/' is HEALTHY
|
可以看到Average block replication
, Corrupt blocks
, Missing replicas
等信息。
修改备份系数
1 2 3 4 5 6 7 8
| [root@VLNX107011 hue] Replication 3 set: /user/oozie/share/lib/lib_20151103160704/hive/jetty-all-7.6.0.v20120127.jar Replication 3 set: /user/oozie/share/lib/lib_20151103160704/hive/jline-2.11.jar ...... Waiting for /backup/gitlab/1447133001_gitlab_backup.tar ........... done Waiting for /backup/gitlab/1447133732_gitlab_backup.tar ... done Waiting for /backup/gitlab/1447180217_gitlab_backup.tar ... done ......
|
可以看到HDFS对所有文件的备份系数进行了刷新。
再次检查刚才文件的备份系数,可以看到从2
变为3
。
1 2 3 4
| [root@VLNX107011 hue] Found 2 items drwxr-xr-x - fsdevops fsdevops 0 2015-11-18 11:09 /facishare-data/flume/test/2015 -rw-r--r-- 3 fsdevops fsdevops 33 2015-11-30 17:49 /facishare-data/flume/test/nohup.out
|
WARNING
将备份系数从低到高比较容易,但从高到低会特别慢,所以在集群搭建初始就要规划好Default replication factor
。
通常备份系数不需要太高,可以是服务器总量的1/3左右即可,Hadoop默认的数值是3。
增加DataNode
添加过程略过。
增加完机器后,如果需要可以对HDFS中文件进行负载均衡。
1 2 3
| [root@VLNX107011 hue] ..... 2015-12-4 19:38:46 Balancing took 18.637816666666666 minutes
|
删除DataNode
- 在配置中将此datanode添加到exclude中
注:cloudera中配置dfs_hosts_exclude.txt 的 NameNode 高级配置代码段(安全阀)
选项。
非cloudera时,手动进行配置。
1 2 3 4 5 6 7 8
| <property> <name>dfs.hosts.exclude</name> <value>/etc/hadoop/conf/exclude</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>
|
1 2 3 4 5 6 7 8
| <property> <name>dfs.hosts.exclude</name> <value>/etc/hadoop/conf/exclude</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>
|
- 创建/etc/hadoop/conf/exclude,在文件中增加需要删除的节点,一行一个
- 动态刷新配置
1 2 3
| [root@VLNX107011 hue] Refresh nodes successful for VLNX107010/172.31.107.10:8020 Refresh nodes successful for VLNX107011/172.31.107.11:8020
|
- 通过web页面查看datanode情况。
http://vlnx107010:50070/dfshealth.html#tab-datanode
开始处于Decommissioning(退役中)状态,最后处于Dead(已下线)状态。
注意
在删除节点时一定要停止所有Hadoop的Job,否则程序还会向要删除的节点同步数据,这样也会导致Decommission的过程一直无法完成。
我自己没有试过,但应该将yarn的nodemanager停掉就好。
- 检查datanode和tasktracker状态,理论上datanode已经停掉,然后手动停掉tasktracker。
增加datanode磁盘
集群磁盘进行扩容,可能会采用添加节点的方式,也可能会采用增加datanode磁盘挂载的方式,对于第二种方式,需要注意以下几点:
- 新挂载的磁盘需要有读写权限
- 修改
datanode数据副本存放磁盘选择策略
配置完成后,需要重启集群。
datanode数据副本存放磁盘选择策略
有两种方式:
第一种是沿用hadoop1.0的磁盘目录轮询方式,实现类:RoundRobinVolumeChoosingPolicy.java
第二种是选择可用空间足够多的磁盘方式存储,实现类:AvailableSpaceVolumeChoosingPolicy.java
具体配置在hdfs-site.xml中:
1 2 3 4 5
| <property> <name>dfs.datanode.fsdataset.volume.choosing.policy</name> <value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value> </property>
|
如果不配置,默认使用第一种方式,既轮询选择磁盘来存储数据副本,但是轮询的方式虽然能够保证所有磁盘都能够被使用,但是经常会出现各个磁盘直接数据存储不均衡问题,有的磁盘存储得很满了,而有的磁盘可能还有很多存储空间没有得到利用,所有在hadoop2.0集群中,最好将磁盘选择策略配置成第二种,根据磁盘空间剩余量来选择磁盘存储数据副本,这样一样能保证所有磁盘都能得到利用,还能保证所有磁盘都被利用均衡。
使用第二种方式时,同时需要配置另外两个参数:
dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold
, 默认值是10737418240,既10G,一般使用默认值就行。首先计算出两个值,一个是所有磁盘中最大可用空间,另外一个值是所有磁盘中最小可用空间,如果这两个值相差小于该配置项指定的阀值时,则就用轮询方式的磁盘选择策略选择磁盘存储数据副本。
dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction
, 默认值是0.75f,一般使用默认值就行。有多少比例的数据副本应该存储到剩余空间足够多的磁盘上。该配置项取值范围是0.0-1.0,一般取0.5-1.0,如果配置太小,会导致剩余空间足够的磁盘实际上没分配足够的数据副本,而剩余空间不足的磁盘取需要存储更多的数据副本,导致磁盘数据存储不均衡。