首页 > 代码库 > Hadoop集群间数据拷贝

Hadoop集群间数据拷贝

    有时候,我们需要做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一致。