Federation+HA集群运维
hadoop管理客户端
copy一个hadoop部署目录作为客户端,用于集群的管理和监控,我的客户端如下:
客户端目录:
/home/deploy/hadoop/ hadoop-2.0.6-cilent-lin
- 修改客户端hadoop的core-site.xml
<property> <name>fs.defaultFS</name> <!-- <value>viewfs:///</value>--> <value>hdfs://server-solr-001.m6.server.com:9000</value> </property> |
否则无法使用./bin/hdfs dfsadmin –report 等,fs.defaultFS 应该为active的namenode的地址。
- 测试客户端:
不停机加datanode
- slaves文件
将要加入的datanode加入到slaves中,避免以后集群重启忘记了。
- dfs.hosts文件
在$HADOOP_HOME/etc/hadoop/ 创建dfs-hosts文件: dfs-hosts
Host1 Host2 Host3 newhost |
注意:newhost不能出现在dfs.hosts.exclude文件中。并且dfs-hosts文件需要在两个NN都有。
- 刷新节点
./bin/hdfs dfsadmin -refreshNodes |
查看web监控如下:
发现已经有一个Decommissioned节点。
- 启动新加的datanode
./sbin/hadoop-daemon.sh start datanode |
- 再次查看web监控
发现该Decommissioned节点已经是live node。
- 查看standby的namenode
关键是要看看standby的namenode,是否感知到这个过程。
发现stanby的namenode并没有感知到上线的datanode。
经过实际验证,只有active的namenode才能感知到上线和下线操作。
- 初步实现策略
初步处理策略,执行一次
./bin/hdfs dfsadmin -refreshNodes |
后,手动kill掉active的namenode,使得standby的namenode变为active,再次执行
./bin/hdfs dfsadmin -refreshNodes |
后,将刚才kill的namenode启动起来。
注意:要将刚才kill的namenode启动起来。
然后在新加的datanode上面,启动此datanode
./sbin/hadoop-daemon.sh start datanode |
- 两外不用执行刷新,即refreshNodes,直接启动datanode,两个NN都可以感知到,而且运行也良好...后来我就直接启动了。
下线某个datanode
在$HADOOP_HOME/etc/hadoop/ 创建dfs.hosts.exclude文件:dfs-hosts-exclude
host |
执行过程与添加一个新的datanode类似,下线过程最好不要直接停掉。
Namenode不停机替换
将standby的NN手动kill掉,然后将这个NN的元数据同步到新的NN下,然后启动新的NN,这是后应该可以启动,但是新的NN感知不到livenodes,显示livenodes为0,此时可以顺次重启下DN,之后新的NN即可感知到了。