1

2 つの 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: 応答が null です。; ホストの詳細: ローカル ホストは次のとおりです: "cluster2-namenode/10.21.xxx.xxx"; 宛先ホスト: "cluster1-namenode":8020;

Hadoop のバージョンの違いによるものだと思いますが、これに対する回避策はありますか? 私の古い environment-cluster1 には、すべての distcp、bhase copytable オプションを除外する mapred がデプロイされていません。また、hbase レプリケーション機能は cluster1 でも利用できません。hdfs データをcluster1からcluster2に移行する方法を考えるのに苦労しています。3 から 4 に移行する代わりに、cdh3 を cdh4 にアップグレードすることについて誰もが話しているからです。

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 を使用して、cdh3 から cdh4 にクラスター間で hdfs データをコピーすることもできますが、ここでいくつかの前提条件があります。cdh4 クラスターで distcp コマンドを実行する必要があります。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

Shengjieの答えに対する私の経験からのいくつかのメモ:

  1. CDH4 と CDH3 の両方から実行できます。重要なのは、コマンドが宛先クラスターで実行されることです。

  2. commnadをソースおよび宛先としてdistcp使用する場合(hftp は読み取り専用であるため)、コマンドは次のようになります。hftphdfs

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

于 2013-02-26T10:30:04.917 に答える