hadoop hdfs从cdh3迁移到cdh4

时间:2012-12-07 13:18:38

标签: hadoop hbase hdfs dfs

我有两个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版本的差异,有没有解决方法呢?我的旧环境-集群1没有部署mapred,它排除了所有distcp,bhase copytable选项。并且cluster1上也没有hbase复制功能。我正在努力想办法将hdfs数据从 cluster1 迁移到 cluster2 ,因为每个人都在讨论将cdh3升级到cdh4而不是从3迁移到4。

2 个答案:

答案 0 :(得分:1)

在cloudera cdh用户邮件主题中讨论了这个:

https://groups.google.com/a/cloudera.org/forum/?fromgroups=#!topic/cdh-user/GeT1RTbRVcw

总之,

  1. CDH3和CDH4之间的常规DFS命令(如dfs -cp)将不起作用,因为它们具有不同的协议版本(并且通过常规RPC调用彼此不兼容)。

  2. Distcp可以用来复制hdfs数据交叉集群,甚至可以从cdh3复制到cdh4,但这里有一些先决条件:你需要在cdh4集群上运行distcp命令,cdh4集群需要有mapred部署/可用。 cdh3集群不一定需要mapred。

  3. 运行distcp命令时,不要使用hdfs作为源路径,使用hftp作为源路径,使用hftp作为目标路径(因为hftp是READ-ONLY,所以需要对目标路径进行写访问)所以命令看起来像:

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

答案 1 :(得分:1)

我对盛杰答案的经历中的一些注释:

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

  2. 运行distcp commnad时使用hftp作为源,hdfs作为目标(因为hftp只读!)所以命令如下:

  3.   

    hadoop distcp hftp://source.cluster1/path hdfs://destination.cluster1/path