namenode 迁移,利用HA做到零数据丢失

背景

前一段时间公司的几台机器要“回收”,其中有一台namenode主机。所以要进行namenode迁移,开始定了两套方案:

  1. 停集群,拷贝namenode所在机器上的【hadoop文件夹、hdfs数据文件夹、元数据文件夹】
  2. 利用HA,启动三台namenode等待他们的竟像文件一致后,停止掉回收的那个namenode。

比较:

  1. 停止集群拷贝的方法可能在停止集群时丢临近的元数据很少量的量,没有深入研究,可能是因为停止集群时有最近的元数据没有写进去(概率几乎为零)或在你(拷贝scp),压缩解压的时候丢了几行末尾数据
  2. 利用ha自己同步元数据的方法是相对于1更有效的保护了数据的准确性。

一,复制迁移、 Hdfs (NameNode & DataNode) 迁移

1. 停止服务

迁移前请在原先的主机上停止hdfs和yarn的服务,如果有其他相关服务也需要都停止。

stop-dfs.sh
stop-yarn.sh

stop-all.sh

如果你没有将hadoop/sbin目录配置到PATH的话,需要切到该目录下执行sh,之后执行的一些shell脚本也同理。

2. 复制hadoop文件夹、hdfs数据文件夹、元数据文件夹
1)首先将hadoop文件夹进行远程复制,主机复制到主机,从机复制到从机

(根据自己的用户是root的就用root,我的是sj)

scp -r hadoop sj@接收方hostname:/data/service/

我的hadoop文件夹放在/data/service/下,所以需要指定对方的sj账户,这儿使用的是整个文件夹复制的方式,推荐还是使用tar打包后再用scp传输,然后解压。

2)复制hdfs数据文件夹和元数据文件夹

两个文件夹的路径都是在hdfs-site.xml中配置过的

  <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/data/service_data/jg/hadoop/dfs/name</value>
 </property>

dfs.namenode.name.dir配置了元数据的文件夹路径,元数据(fsimageedits)只在namenode中记录,datanode.name.dir则是保存了所有数据块的文件夹,这儿的复制方式和上述的一样,不要忘了chown。由于我都设置在了hadoop文件夹里,所以在上一步中就连带着复制过去了。


3)修改hdfs和yarn配置

更新slaves文件(在主机上),以及hdfs-site.xml 、core-site.xml、mapred-site.xml、yarn-site.xml等文件中所有的ip设置,如果之前都是用hostname设置的那就不用修改了(hosts里已经设置了对应关系了),建议都换成使用hostname设置。

注意:如果修改了JAVA_HOME,那么hadoop/etc/hadoop下的hadoop-env.sh里的JAVA_HOME也需要修改,这儿必须写完整路径,不知为什么这个脚本跑的时候获取不到系统环境变量。

3. 启动hdfs

到这儿NameNode和DataNode的迁移工作就都完成了,开启下hdfs和yarn服务看下效果

start-dfs.sh
stat-yarn.sh

start-all.sh

如果出现问题就去hadoop/logs目录下看对应的log信息。
二,利用Ha高可用迁移

2.1利用(一)中的方式把hadoop的数据都迁移,然后更改配置

vim hdfs-site.xml

 <property>
  <name>dfs.ha.namenodes.doumi-ana-online</name>
  <value>nn1,nn2,nn3</value>
 </property>


 <property>
  <name>dfs.namenode.rpc-address.doumi-ana-online.nn1</name>
  <value>g1-jg-hadoop-01:8020</value>
 </property>


 <property>
  <name>dfs.namenode.rpc-address.doumi-ana-online.nn2</name>
  <value>g1-jg-hadoop-02:8020</value>
 </property>

 <property>
  <name>dfs.namenode.rpc-address.doumi-ana-online.nn2</name>
  <value>g1-jg-hadoop-03:8020</value>
 </property>

 <property>
  <name>dfs.namenode.http-address.doumi-ana-online.nn1</name>
  <value>g1-jg-hadoop-01:50070</value>
 </property>


 <property>
  <name>dfs.namenode.http-address.doumi-ana-online.nn2</name>
  <value>g1-jg-hadoop-02:50070</value>
 </property>


 <property>
  <name>dfs.namenode.http-address.doumi-ana-online.nn2</name>
  <value>g1-jg-hadoop-03:50070</value>
 </property>

 vim yarn-site.xml

<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>nn1,nn2,nn3</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.nn1</name>
  <value>g1-jg-hadoop-01</value>
</property>        
<property>
   <name>yarn.resourcemanager.hostname.nn2</name>
   <value>g1-jg-hadoop-02</value>
</property>

<property>
   <name>yarn.resourcemanager.hostname.nn2</name>
   <value>g1-jg-hadoop-03</value>
</property>


<property>
  <name>yarn.resourcemanager.ha.id</name>
  <value>nn2</value>

<property>
  <name>yarn.resourcemanager.address.nn1</name>
  <value>g1-jg-hadoop-01:8032</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address.nn1</name>
  <value>g1-jg-hadoop-01:8130</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.nn1</name>
  <value>g1-jg-hadoop-01:8088</value>
</property>
<property>
   <name>yarn.resourcemanager.resource-tracker.address.nn1</name>
   <value>g1-jg-hadoop-01:8131</value>
</property>
<property>
  <name>yarn.resourcemanager.admin.address.nn1</name>
  <value>g1-jg-hadoop-01:8033</value>
</property>
<property>
  <name>yarn.resourcemanager.ha.admin.address.nn1</name>
  <value>g1-jg-hadoop-01:23142</value>
</property>
<property>
  <name>yarn.resourcemanager.address.nn2</name>
  <value>g1-jg-hadoop-02:8132</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address.nn2</name>
  <value>g1-jg-hadoop-02:8130</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.nn2</name>
  <value>g1-jg-hadoop-02:8088</value>
</property>
<property>
  <name>yarn.resourcemanager.resource-tracker.address.nn2</name>
  <value>g1-jg-hadoop-02:8131</value>
</property>
<property>
  <name>yarn.resourcemanager.admin.address.nn2</name>
  <value>g1-jg-hadoop-02:8033</value>
</property>
<property>
  <name>yarn.resourcemanager.ha.admin.address.nn2</name>
  <value>g1-jg-hadoop-02:23142</value>
</property>
<property>
  <name>yarn.resourcemanager.address.nn3</name>
  <value>g1-jg-hadoop-03:8132</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address.nn3</name>
  <value>g1-jg-hadoop-03:8130</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.nn3</name>
  <value>g1-jg-hadoop-03:8088</value>
</property>
<property>
  <name>yarn.resourcemanager.resource-tracker.address.nn3</name>
  <value>g1-jg-hadoop-03:8131</value>
</property>
<property>
  <name>yarn.resourcemanager.admin.address.nn3</name>
  <value>g1-jg-hadoop-03:8033</value>
</property>
<property>
  <name>yarn.resourcemanager.ha.admin.address.nn3</name>
  <value>g1-jg-hadoop-03:23142</value>
</property>

PS:yarn.resourcemanager.ha.id 这里要注意下这个没台机器都是对应hostname.nn2

journalnode 三台一致就可以了 这个可以不改

<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://g1-jg-hadoop-22:8485;g1-jg-hadoop-21:8485;g1-jg-hadoop-17:8485;g1-jg-hadoop-18:8485;g1-jg-hadoop-19:8485;g1-jg-hadoop-20:8485;g1-jg-hadoop-08:8485/
doumi-ana-online</value>
 </property>

start-dfs.sh
stat-yarn.sh

start-all.sh

还有datanode的配置每台都要改

我把一些配置文件上传供参考等审核过了放地址。

这个方法中间可能出现一些小问题,能做线上namenode迁移应该都能解决,如果不是生产环境那就不需要那么谨慎丢点元数据也是可以接受的。

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值