2012-12-07 66 views
1

我有两个Hadoop集群,我的目标是使用Hadoop的-cp所有HDFS文件从cluster1中复制到Cluster2中Hadoop的HDFS迁移CDH4

Cluster1中: Hadoop的0.20。 2 cdh3u4

Cluster2中: 的Hadoop 2.0.0 cdh4.1.1

现在,即使只是运行DFS -ls

hadoop fs -ls hdfs://cluster1-namenode:8020/hbase 

我得到异常:

LS:无法在本地异常:java.io.IOException异常:对如下cluster1中远程对Cluster2中命令响应为null;主机详细信息:本地主机是:“cluster2-namenode/10.21.xxx.xxx”;目标主机是:“cluster1-namenode”:8020;

我认为这是由于Hadoop的版本比较,有什么解决办法对此有何看法?我的老环境cluster1中不具有mapred部署这就排除了所有的DistCp使用,bhase copytable选项。而且hbase复制功能在cluster1上也不可用。我很努力,因为每个人都在谈论升级CDH3到CDH4而不是从3迁移到4

回答

1

在Cloudera的CDH用户邮件讨论过这个更想办法从cluster1中Cluster2中迁移HDFS数据螺纹:

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

综上所述,

  1. 定期DFS命令,如CDH3和CDH4之间将无法​​正常工作,都有不同的协议版本(并与通过普通的RPC调用另一个不兼容)。

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

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

    Hadoop的DistCp使用HFTP://hadoop-namenode.cluster1/hbase HFTP://hadoop-namenode.cluster2/hbase

1

从我的经验,几个音符,为圣洁的答案:

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

  2. 运行distcp当commnad使用hftp源和hdfs作为目标(因为HFTP是只读!)因此命令看起来像:

Hadoop的DistCp使用HFTP://source.cluster1/路径hdfs://destination.cluster1/path