1つの概要
DistCp(コピーを分散)は、大規模なクラスタまたはクラスタ間の内部コピーツール用の高性能です。これは、地図を使用しています/その分布、エラー処理と回復を達成削減だけでなく、レポートの生成。これは、入力されたタスクのマップなどのファイルやディレクトリのリストで、各タスクは、ファイルのソースリストのコピーを完了します
注:データセクター間の連携が仕事で遭遇した、異なるクラスタのバージョンを誇っていたり、同じデータの異なるバージョンでは、クラスタが異なるコピーします。
2ユーティリティ
全体的に、2つのカテゴリに分類:
1)データとクラスタ間のバージョンがコピー。
2)クラスタのバージョンデータのコピーを誇ります。
バージョンとクラスタ間のデータのコピー
たとえば、次のクラスタのコピー(IP192.168.7.120のNN1)B1ディレクトリにクラスタBのカタログ(NN2 IP192.168.8.120)の
1つのHadoop distcpのHDFS:// 192.168.7.120:8020/cluster/A/ HDFS:// 192.168.8.120:8020/cluster/B1/
要約:
A)HDFSプロトコルを使用してアドレス192.168.7.120クラスタは名前ノード8020クラスタである請求のRPCビューにおける(HDFS-site.xmlの)ポート。名前ノードのIPアドレスは192.168.8.120クラスタBであります
B)このコマンドは、/クラスタ文書は、次のクラスタB / B1ディレクトリにフォルダの下のファイルとフォルダをコピーしますA、Bのクラスタに/ B1 /ディレクトリ構造に表示されます。/ B1のディレクトリが存在しない場合、システムは新しいものを作成します。ソースパスは絶対パスでなければならないことに留意すべきです。大手HDFSを含む:// IP:ポート
複数のデータソースを追加して、ソースディレクトリの複数として指定します。
1つ のHadoop distcpのHDFS: 2 3 // 192.168.7.120:8020/cluster/A/a1 HDFS:// 192.168.7.120:8020/A/a2 HDFS:// 192.168.8.120:8020/cluster/B1/
またはファイルから複数のソースを取得するには、-fオプションを使用します。
HDFS -fのHadoop distcp:// 192.168.7.120:8020/src_A_list HDFS:// 192.168.8.120:8020/cluster/B1/
内容はsrc_A_listです
HDFS:// 192.168.7.120:8020/cluster/A/a1
HDFS:// 192.168.7.120:8020/cluster/A/a2
複数のソースからコピーする場合、コンフリクトの二つのソースは、distcp停止し、エラーメッセージでコピーした場合、衝突が先に発生した場合、それはオプションの設定に従って解決されるであろう。(;ソースファイルが操作を置き換えるものではありませんように記述C)デフォルトの宛先ファイルがすでに存在してスキップされました。たびに、操作の終了時にファイルの数がスキップされた報告されますが、コピー操作の一部が失敗した場合は、しかし、成功した試みの後、その後、報告された情報が正確でないかもしれません。
各JobTrackerができるようにする必要があり、送信元と宛先のアクセスに、ファイルシステムと対話します。
コピー後、コピー本当の成功することを確認するために、送信元と送信先のファイル、およびクロスチェックの推薦リストを生成します。地図を使ってdistcp / 3、またはコピーに影響を与える可能性のある問題の間でそうそこに、オペレーティングおよびファイルシステムAPIを減らしているため。
ことは注目に値する別のクライアントは、ソースファイルに書き込んでいるとき、コピーが失敗しそう。書き込まれているHDFS上のファイルを上書きしようとすると失敗します。ソースファイルのコピーが移動したりする前に削除された場合、コピーは例外にFileNotFoundExceptionで失敗します。
)デフォルトではC、distcpがすでにターゲット・パス上に存在するファイルが、上書きされ、これらのファイルを選択する-overwirteオプションではスキップされますが、また使用することができ、-updateオプションは、ファイルだけを再更新されます書きます。
実際のケース:
ケースには、必要と/クラスタ/ A1 /と/クラスタ/ A2 / /クラスタ/へのコピーB1であって、ソースパス: HDFS:// 192.168.7.120:8020/cluster/A1 HDFSを:// 192.168.7.120:8020/cluster / A1 / A1 HDFS:// 192.168.7.120:8020/cluster/A1/a2 HDFS:// 192.168.7.120:8020/cluster/A2 HDFS:// 192.168.7.120:8020/cluster/A2/a3 HDFS:/ / 192.168.7.120:8020/cluster/A2/a1
設定または-overwrite -updateオプションでない場合、2つのソースは、対象端末マッピングします/クラスタ/ BL / A1A2を。これら二つのオプション場合は、コンテンツやコンテンツは、各ソースディレクトリの比較のために先ディレクトリになります。distcp出会いの状況このような競合が操作して終了を終了します。 デフォルトでは、 /クラスター/ B1 / A1および/クラスタ/ B1 / A2のディレクトリが作成されますので、競合はありません。 今話 - 使用方法を更新します。 DistCpの呼び出しがある -update HDFS:// 192.168.7.120:8020/cluster/A1 \ HDFS:// 192.168.7.120:8020/cluster/A2 \ HDFS:// 192.168.8.120:8020/cluster/B1 前記ソースパス / サイズ: HDFS:// 192.168.7.120:8020/cluster/A1 HDFS:// 192.168.7.120:8020/cluster/A1/a1 32 HDFS。// 192.168.7.120:8020/cluster/A1/a2 64の HDFS:// 192.168.7.120:8020/cluster/A2 HDFS:// 192.168.7.120:8020/cluster/A2/a3 64 HDFS:// 192.168.7.120 :8020 /クラスター/ A2 / A4 32 および宛先パス / サイズ: HDFS:// 192.168.8.120:8020/cluster/B1 HDFS:// 192.168.8.120:8020/cluster/B1/a1 32 HDFS:// 192.168。 8.120:8020 /クラスタ/ BL / 32 A2 HDFS:// 192.168.8.120:8020/cluster/B1/a3 128が 生成: HDFS:// 192.168.8.120:8020/cluster/B1 HDFS://32の192.168.8.120:8020/cluster/B1/a1 HDFS:// 192.168.8.120:8020/cluster/B1/a2 32 HDFS:// 192.168.8.120:8020/cluster/B1/a3 64 HDFS:// 192.168。 8.120:8020 /クラスター/ A2 / A4 32 発見部192ファイルの168.8.120 A2(a3はカバレージを有する)上書きされません。-overwriteオプションを指定すると、すべてのファイルが上書きされます。
D)distcp操作あなたがそうで、このような失敗を無視して、設定したり、データの量を制限するためにファイルをコピーすることができ、多くのオプションがあります。直接入力指示や追加オプションなしでこの操作の説明を表示するために使用することができます。
オプションのアクセサリdistcpパラメータ:
クラスタ自慢バージョンのデータコピーを
Hadoop distcpの HFTP://192.168.7.120:50070 /クラスタ/ A / HDFS://192.168.8.120:8020 /クラスター/ B1
、URI名前ノードアクセス元のネットワークインタフェースを定義するために、このインターフェイスはdfs.namenode.httpアドレスを設定する属性値を介してなり、デフォルト値は50070であることに注意し、基準HDFS-site.xmlの:
実際の問題の3まとめ
A)ipc.StandbyException://s.apache.org/sbnn-error
ソリューション:
Dfs所链接的namenode的状态不是active的 处于standby状态不予链接,所以方法:换一个namenode, 保证新的namenode是active
b) java.io.IOException:Check-sum mismatch
分析:该问题很常见,能在网上查到,是因为不同版本hadoop 的checksum版本不同,老版本用crc32,新版本用crc32c;
解决:只要在distcp时增加两个参数(-skipcrccheck -update),忽略crc检查即可。注意-skipcrccheck参数要与-update同时使用才生效。
c) java.net.UnknowHostException
原因分析:图中可以看到,distcp job已经启动了,map 0%, 但是报了UnknowHostException:pslaves55,可能的原因是在从datanode取数据时,用的是host pslave55, 而这个host是数据源集群特有的,目标集群不识别,所以报UnknowHostException.
解决办法:在目标集群中配置hosts文件,将数据源集群中所有的host和ip的对应关系追加到目标集群中的hosts文件中,使得目标集群在访问host名时(如pslave55)能成功映射到ip
4 总结
要实现跨集群拷贝,如拷贝A集群的数据到B集群,需要确认以下事情:
(1)确认B集群机器都能ping通A集群所有ip。
(2) 用的port 响应在各自节点上放开 iptables 不要“拦住”
(3)如果部门间的端口防火墙已经开通,但还是telnet不同,请确认A集群的iptables已经加入了B集群ip。
(4)如果在B集群有UnknowHostException,则需要将A集群的host与ip映射关系追加到B集群的hosts文件中。
附上常用端口port 对照:
其他配置参考官方:
http://hadoop.apache.org/docs/r2.7.6/hadoop-distcp/DistCp.html