Hadoop distcp hftphdfsクロスクラスターコピーの一般的な問題が要約されています
Hadoop Distcp Hftp Hdfs Cross Cluster Copy Common Problems Are Summarized
部門間のデータ協力を行うプロセスでは、クラスターの異なるバージョン間でデータをコピーし、hadoop2.6.0-cdh5.7.0からhadoop2.7.1にデータをコピーし、発生した問題と解決策を記録する必要があります。 。
distcpの基本的な使用法
たとえば、Aクラスター(srcクラスター)のA1ディレクトリをBクラスター(宛先クラスター)のB1ディレクトリにコピーします。
1.同じバージョンのクラスターコピー(hdfsプロトコル) :
destクラスター(ターゲットクラスター)でコマンドを実行します。
hadoop distcp hdfs :/10.190.11.303:3333 / user / common / liming / A1 / hdfs://10.120.20.22/user/zhangsan/B1/
ここで、10.190.11.303はsrcクラスターのnamenodeアドレスであり、3333はsrcクラスターのrpcポート(hdfs-site.xmlで表示可能)です。10.120.20.22はdestクラスターのnamenodeIPアドレスです。
2.クロスクラスターバージョンコピー(hftpプロトコル) :
また、destクラスター(ターゲットクラスター)でコマンドを実行します。
hadoop distcp hftp ://10.190.11.303: 50070 / user / common / liming / A1 / hdfs://10.120.20.22/user/zhangsan/B1/
hdfsに似ていますが、ターゲットクラスターの先頭が使用されます hftp 、およびポートをhttpポートに変更する必要があります(hdfs-site.xmlで表示できます。構成されていない場合は、構成する必要があります)。
注:hadoop 2.6.0やhadoop2.7.0のように、クラスター間のバージョンスパンが大きくない場合は、hdfsプロトコルも使用できます。
質問1:Java.net.SocketTimeoutException:接続がタイムアウトしました
理由分析:ログは、接続がタイムアウトしたことを示しています。 hftpプロトコルコピーを使用し、srcクラスターの10.190.11.303の50070ポートに接続する必要があります。このとき、接続がタイムアウトし、関連する機関が開かれていないことを示しています。
解決策:O&Mに連絡して、destクラスター内のすべてのnamenodeのポート50070のファイアウォールをsrcクラスターに開きます。ファイアウォールがオンになっていてもこの問題が引き続き発生する場合は、srcクラスターのiptablesを変更し、destクラスターのすべてのマシンをiptablesに追加できます。
問題2:org.apache.hadoop.ipc.StandbyException://s.apache.org/sbnn-error
理由分析:「s.apache.org/sbnn-error」を検索して、それがWebサイトであることを確認します。ちなみに、「http://s.apache.org/sbnn-error」にアクセスすると、自動的ににジャンプします。 Apacheのwikiページ、表示:
3.17。 「操作カテゴリREAD / WRITEはステートスタンバイではサポートされていません」というメッセージはどういう意味ですか?
HA対応クラスターでは、DFSクライアントは、特定の時間にどのネームノードがアクティブであるかを事前に知ることができません。したがって、クライアントがネームノードに接続し、それがたまたまスタンバイである場合、READまたはWRITE操作は拒否され、このメッセージはログに記録されます。その後、クライアントは自動的に他のネームノードに接続し、操作を再試行します。クラスタ内にアクティブなネームノードとスタンバイのネームノードが1つある限り、このメッセージは無視しても問題ありません。
一般的な考え方では、DFSクライアントはアクティブなネームノードを認識しないため、クライアントがスタンバイネームノードに接続すると、読み取りまたは書き込み操作が拒否され、このログが出力されます。クライアントは自動的に別のネームノードに接続し、操作を再開します。
しかし実際には、別のネームノードを自動的に接続していないので、その理由はわかりません。
解決策:ネームノードを変更して、新しいネームノードがアクティブであることを確認します。 hadoop distcp hftpを使用する準備ができました:// 積極的な目的 :50070 /パス...。
質問3:java.net.UnknowHostException
理由分析:distcpジョブが開始され、マップ0%であることがわかりますが、UnknowHostException:pslaves55が報告されています。考えられる理由は、データノードからデータをフェッチするときにホストpslave55が使用され、このホストがsrcクラスターに固有であるためです。はい、destクラスターは認識されないため、UnknowHostExceptionが報告されます。
解決策:destクラスター内のhostsファイルを構成し、srcクラスター内のすべてのホストとIP間の対応をdestクラスター内のhostsファイルに追加して、ホスト名にアクセスするときにdestクラスターが自動的にipにマップできるようにします( pslave55として)。
質問4:マップ後に接続が100%タイムアウトします Java.net.SocketTimeoutException:接続がタイムアウトしました
エラー分析:マップが100%完了しました。これは、データの読み取りが完了したが、ターゲットクラスターに書き込まれていないことを示し、ターゲットクラスターに問題があることを示しています。
正しい分析:インターネット上で関連情報が見つからなかったため、hadoopソースコードをダウンロードし、RetriableFileCopyCommand.javaのソースコードを確認しました。以下に示すように、エラーの場所は行302です。
コードを引き続き見てください。getInputStreamメソッドの接続タイムアウトがfs.open(パス)の行であると報告することができます。関連するソースコードの調査を続け、デバッグ情報をソースコードに追加します。ファイルシステムfsが初期化されていることがわかります。これはHftpFileSystemであり、パスなどの他の変数は正しいです。したがって、これはファイルシステムのopen srcクラスターファイル接続のタイムアウトであり、関連するポートは開いていません。
distcpを実行するときは、tcpdumpを使用して、実際にマップを実行しているマシンとsrcクラスターホストの間のtcp接続を取得します。次の図に示すように、データ長= 0であり、実際のコピーデータがないこともわかります。
解決策:destクラスター内のすべてのデータノードのhttp関連のポートをsrcクラスターに開きます(デフォルトは50075です)。
(このプロジェクトでは、destクラスター内のすべてのデータノードの制御ポート50010を誤ってsrcクラスターに開いてから、hdfsプロトコルを実行してクラスターバージョン間でデータをコピーしたため、50075ポートを開くことはありません。)
質問5:java.io.IOException:チェックサムの不一致
分析:この問題は非常に一般的であり、Hadoopの異なるバージョンのチェックサムバージョンが異なるため、オンラインで見つけることができます。古いバージョンはcrc32を使用し、新しいバージョンはcrc32cを使用します。
異なるバージョンのソースクラスターと宛先クラスターの間でdistcpを実行すると、以下の例外が発生する場合があります。これは、古いバージョンから新しいバージョンへのMRV2(YARN)を使用するdistcpが、これらのチェックサムエラーメッセージで失敗する可能性があるためです。各Hadoopバージョンは、異なるチェックサムバージョンを使用します。古いバージョンはCRC32を使用し、新しいバージョンはCRC32Cを使用します。
差出人:http://www.catchdba.com/2014/03/18/distcp-between-two-different-versions-of-hadoop/
解決策:distcp中に2つのパラメーター(-skipcrccheck -update)を追加し、crcチェックを無視します。有効にするには、-skipcrccheckパラメーターを-updateと一緒に使用する必要があることに注意してください。
総括する
srcクラスターのデータをdestクラスターにコピーするなど、クラスター間のコピーを実行するには、次のことを確認する必要があります。
(1)destクラスターマシンがsrcクラスター内のすべてのIPにpingできることを確認します。
(2)必要に応じて、以下のポートのファイアウォールを開きます。 hdfsプロトコルを使用する場合は1、2アイテムを開く必要があり、hftpプロトコルを使用する場合は少なくとも1、3、4アイテムを開く必要があります。
(3)部門間のポートファイアウォールが開いているが、telnetが異なる場合は、srcクラスターのiptablesがdestクラスターipに追加されていることを確認してください。
(4)destクラスターにUnknowHostExceptionがある場合は、srcクラスターのホストとIP間のマッピング関係をdestクラスターのhostsファイルに追加する必要があります。
(5)org.apache.hadoop.ipc.StandbyExceptionが発生した場合は、別のアクティブなネームノードを試してください。
終了します。
添付: 一般的なHDFSポート構成
参照Webページ:
distcp公式ドキュメント:https://hadoop.apache.org/docs/r1.0.4/cn/distcp.html、https://hadoop.apache.org/docs/r1.2.1/distcp.html
hdfsポート構成:http://www.cnblogs.com/ggjucheng/archive/2012/04/17/2454590.html