引子:
这段时间折腾的都是hadoop和lucene,总结了hadoop在运营过程中出现问题时的解决方案,请大家指教!
如果Namenode挂掉,如果能立即起来通过,start-dfs.sh 能够重新起来则可以正常使用。否则按照以下操作。下面所有操作前提是有完整的secondarynamenode。
1) 在非secondarynamenode服务器中选择datanode作为namenode。(目前在正式文档中没有发现,建议采用第二种,但在测试中没发现问题)
a) Kill掉所有服务。
b) 修改新namenode服务器 配置文件:core-site.xml,masters,slaves等相关文件。
c) 修改hosts文件
d) 重新配置各节点 ssh ,使新namenode到其他datanode 正常无密码ssh登陆
e) 将运行secondarynamedode机器上的hadoop.tmp.dir/dfs/namesecondary 拷贝到新namenode服务器hadoop.tmp.dir/dfs目录。
f) 将namesecondary改名为name
g) bin/start-dfs.sh启动hdfs。
2) 在非secondarynamenode服务器中选择datanode作为namenode。通过导入以前的检查点来恢复namenode。
a) Kill掉所有服务。
b) 修改新namenode服务器 配置文件:core-site.xml,masters,slaves等相关文件。
c) 修改hosts文件
d) 重新配置各节点 ssh ,使新namenode到其他datanode 正常无密码ssh登陆
e) 在namenode服务器core-site.xml中配置fs.checkpoint.dir(默认是在$hadoop.tmp.dir/dfs/ namesecondary).
<property>
<name>fs.checkpoint.dir</name>
<value>/home/hadoop/hadoop-data/dfs/namesecondary</value>
</property>
f) 将运行secondarynamedode机器上的hadoop.tmp.dir/dfs/namesecondary 拷贝到namenode服务器fs.checkpoint.dir目录.
g) 执行bin/hadoop namenode –importCheckpoint 导入检查点。
h) 执行bin/start-dfs.sh 启动dfs.
1) 原服务器完全坏掉,起不来,只能引入新的datanode。
i. 从其他datanode拷贝hadoop所有配置到新服务器
ii. 设置hosts,将所有datanodes 和namenode 设置hosts
iii. 设置ssh无密码登陆,并测试
iv. 在namenode conf 的slaves中配置新加datanode
v. 在新加datanode上通过bin/hadoop-daemon.sh start datanode 启动该新datanode。
2) 原服务器可以立即起来
i. 因为namenode slaves有该datanode,可以直接在namenode中执行bin/start-dfs.sh 启动
ii. 也可以在该服务器 通过bin/hadoop-daemon.sh start datanode启动
1) Namenode正常运行情况下,如果该datanode可以立即投入使用,则直接在namenode中执行bin/start-dfs.sh 启动
2) Namenode正常运行情况下,如果该datanode无法使用,则考虑新增datanode,并配置secondarynamenode。
在新节点 配置文件hdfs-site.xml中 配置:
<property>
<name>dfs.http.address</name>
<value>netease-namenode-test:50070</value>
</property>
该配置在namenode使用默认即可。如果添加上通过外网访问netease-namenode-test:50070可能会由于网段不同导致访问不到。
使secondarynamenode能够post请求到namenode。
然后在namenode masters中增加 新的secondarynamenode 并配置hosts
使用bin/start-dfs.sh 启动。