1

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

集群 1 : Hadoop 0.20.2-cdh3u4

集群 2 : 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版本的不同,有什么解决方法吗?我的旧 environment-cluster1 没有部署 mapred,这排除了所有 distcp、bhase 可复制选项。并且在 cluster1 上也没有 hbase 复制能力。我正在努力想一种将 hdfs 数据从cluster1迁移到cluster2的方法,因为每个人都在谈论将 cdh3 升级到 cdh4 而不是从 3 迁移到 4。

4

2 回答 2

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 是只读的,您需要对目标路径进行写访问)所以命令看起来像:

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

于 2012-12-07T16:45:11.927 回答
1

我的经验对胜杰的回答有几点说明:

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

  2. 运行distcpcommnad时,将hftp其用作源和hdfs目标(因为 hftp 是只读的!)所以命令如下所示:

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

于 2013-02-26T10:30:04.917 回答