hadoop重启太麻烦了,须要暂停当前全部的任务。因此动态的删除和新增节点就很重要了。java
先说动态删除节点:node
(配置为可动态删除节点,这个是要重启的,之后须要动态删除节点时,就不用重启了。)进入hadoop目录的etc/hadoop/目录web
1.增长excludes文件,每行写一个要删除的节点的主机名负载均衡
2.在hdfs-site.xml中增长
oop
<property> <name>dfs.hosts.exclude</name> <value>/data/hadoop/etc/hadoop/excludes</value> </property>
3.在mapred-site.xml中增长测试
<property> <name>mapred.hosts.exclude</name> <value>/data/hadoop/etc/hadoop/excludes</value> <final>true</final> </property>
这样,若是须要删除某一节点,只需把该节点的主机名写入excludes文件,而后执行(仅在namenode上修改文件,执行命令便可)spa
hadoop dfsadmin -refreshNodes
查看节点状态hadoop dfsadmin -report或者web管理端页面,能够看到该节点是decomissioning状态,等它变化为decomissioned,就能够把这个节点拿掉了。拿掉后,该节点上进程仍是都在的,直接kill便可。日志
动态新增节点:code
由于我是把删除的节点从新加上,因此环境之类的就不用配置了。直接使用原来的就行。xml
在节点上执行,/data/hadoop/etc/hadoop/是配置文件目录,这是启动datanode
hadoop-daemon.sh --config /data/hadoop/etc/hadoop/ --script hdfs start nodemanager
而后启动nodemanager
yarn-daemons.sh --config /data/hadoop/etc/hadoop/ start nodemanager
这条命令是启动了全部slave主机的nodemanager,因此执行中会报错,其余的主机已启动。
我看有的帖子经过如下命令启动:
hadoop-daemon.sh start datanode yarn-daemon.sh start nodemanager
个人启动了,这两个命令就不试了。朋友们测试后能够告诉我哦~(已测试过了,成功,第二种启动更合理)
而后,删除前文中的excludes文件中该节点的主机名,执行刷新操做便可。
hadoop dfsadmin -refreshNodes
至此,能够看到已经新增了该节点的datanode。
hadoop的数据的负载均衡:
执行如下命令,-threshold 5这个参数能够不写,默认是10
start-banlancer.sh -threshold 5
而后就能够查看日志了,在哪台机器上执行该命令,日志就在哪台机器上。
tail -f /data/hadoop/logs/hadoop-hadoop-balancer-hostname.log
静等均衡完毕!