hadoop distcp

来源:互联网 发布:2016年8月非农数据信息 编辑:程序博客网 时间:2024/05/22 06:30

很久没有写了,感觉最近比较浮躁,现在实习了要静下心来 好好学点东西。

公司在做集群迁移的项目,在项目中遇到 一个问题,怎么把一个集群的数据拷贝到另个集群中

Hadoop数据迁移(集群内迁移,集群间迁移),主要通过拷贝数据来完成。对于小量数据,可以使用”hadoop fs -cp”来完成;对于大量数据,可以借助Distcp 来完成。

Distcp是Hadoop自带的分布式拷贝工具。它基于MapReduce实现,将需要拷贝的源数据尽量平均地split到多个map中,每个map将负责的split拷贝到目的集群上,最终利用了MapReduce的优势加速了拷贝(相对于”hadoop fs -cp”的单线程拷贝)。

hadoop distcp hdfs://hadoop-0001:29000/distcptest/abc  /distcptest/

第一个集群的子树/foo下的一个文件与第二个集群的改变进行同步。

 hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo 

如果想在两个运行着不同版本HDFS的集群上利用distcp,使用hdfs协议是会失败的,因为RPC系统是不兼容的。想要弥补这种情况,可以使用基于HTTP的HFTP文件系统从源中进行读取。这个作业必须运行在目标集群上,使得HDFS RPC版本是兼容的。使用HFTP重复前面的例子:

% hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar 

注意,需要在URI源中指定名称节点的Web端口。这是由dfs.http.address的属性决定的,默认值为50070。

推荐用hftp的替代协议webhdfs,源地址和目标地址都可以使用webhdfs,可以完全兼容

hadoop distcp webhdfs://namenode:50070/user/hadoop/input webhdfs://namenode:50070/user/hadoop/input1  
0 0
原创粉丝点击