hadoop hdfs从cdh3迁移到cdh4

hadoop hdfs从cdh3迁移到cdh4,hadoop,hbase,hdfs,microsoft-distributed-file-system,Hadoop,Hbase,Hdfs,Microsoft Distributed File System,我有两个hadoop集群,我的目标是使用hadoop-cp将所有hdfs文件从cluster1复制到cluster2 Cluster1: Hadoop 0.20.2-cdh3u4 Cluster2: Hadoop 2.0.0-cdh4.1.1 现在,即使只是在cluster2上远程运行针对cluster1的dfs-ls命令,如下所示: hadoop fs -ls hdfs://cluster1-namenode:8020/hbase 我得到一个例外: ls:在本地异常上失败:java.io.I

我有两个hadoop集群,我的目标是使用hadoop-cp将所有hdfs文件从cluster1复制到cluster2

Cluster1: Hadoop 0.20.2-cdh3u4

Cluster2: Hadoop 2.0.0-cdh4.1.1

现在,即使只是在cluster2上远程运行针对cluster1的dfs-ls命令,如下所示:

hadoop fs -ls hdfs://cluster1-namenode:8020/hbase
我得到一个例外:

ls:在本地异常上失败:java.io.IOException:响应为空。;主机详细信息:本地主机为:“cluster2 namenode/10.21.xxx.xxx”;目的主机为:“cluster1 namenode”:8020


我认为这是由于hadoop版本的不同,在这方面有什么解决办法吗?我的旧环境cluster1没有部署mapred,这排除了所有distcp、bhase copytable选项。而且在cluster1上也没有hbase复制功能。我正在努力想办法将hdfs数据从cluster1迁移到cluster2,因为每个人都在谈论将cdh3升级到cdh4,而不是从3迁移到4。

在cloudera cdh用户邮件线程中详细讨论了这一点:

总之

  • CDH3和CDH4之间的常规DFS命令(如
    DFS-cp
    )将不起作用,因为两者具有不同的协议版本(并且在常规RPC调用中彼此不兼容)

  • Distcp可以用于跨集群复制hdfs数据,甚至可以从cdh3复制到cdh4,但这里有几个先决条件:您需要在cdh4集群上运行Distcp命令,而且cdh4集群需要部署/提供mapred。cdh3集群不一定需要mapred

  • 运行distcp命令时,不要对源路径使用hdfs,对源路径使用hftp,而对目标路径使用hftp(因为hftp是只读的,您需要对目标路径进行写访问),因此该命令如下所示:

    hadoop distcphftp://hadoop-namenode.cluster1/hbase hftp://hadoop-namenode.cluster2/hbase


  • 对于盛杰的回答,我的经验中有几点值得注意:

  • 它可以从CDH4和CDH3运行,重要的是命令在目标集群上运行

  • 当运行
    distcp
    commnad时,使用
    hftp
    作为源,使用
    hdfs
    作为目标(因为hftp是只读的!),因此命令如下所示:

  • hadoop distcphftp://source.cluster1/path hdfs://destination.cluster1/path