有时候,我们需要做Hadoop集群迁移时,要把大量存储在Hadoop集群上的数据也一并迁移过去。有2种方法可以使用:
1. old hadoop cluster--->old local disks---->transmission---->new local disks----->new hadoop cluster
2. old hadoop cluster---->mapreduce--->new hadoop cluster
很显然第一种方法很不靠谱,我们采用第二种方式来做。我们使用的Hadoop提供的distcp来完成集群间的数据拷贝。
1. 配置
说明:只需要在目标(Destination)集群上做如下配置就好了
NameNode:
hdfs-site.xml,加入
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
<property>
<name>dfs.datanode.address</name>
<value>0.0.0.0:50010</value>
</property>
mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>0.0.0.0:9001</value>
</property>
其它的配置与老的配置一样。
/etc/hosts,在NN内网配置的上方加入外网的配置。如:
外网IP NN主机名
内网IP NN主机名
内网IP DN主机名
…
…
内网IP DN主机名
DataNode:
/etc/hosts,在NN内网配置的上方加入外网的配置。如:
外网IP NN主机名
内网IP NN主机名
内网IP DN主机名
…
…
内网IP DN主机名
2. 重启
NameNode、JobTracker、NadaNode
3. 关闭防火墙
命令:server iptables stop
说明:这里只是为了测试方便,所以将防火墙停止了,实际中应该是要加iptables规则的。
4. 执行集群间拷贝命令
Hadoop distcp /tmp/lalalala.txt hdfs:// Destination 外网IP:9000/tmp/test/lalalala.txt
命令解释:将老的Hadoop上的lalalala.txt(在/tmp目录下)文件拷贝到新的集群上,/tmp/test/lalalala.txt。这里只是拿一个文件做了测试,还可以是目录,更多使用可参看distcp
说明:这里的Destination外网IP:9000中的Port一定要与core-site.xml中的fs.default.name配置的Port一致。
Hadoop集群间数据拷贝