3

Amazon EMR を使用しており、CLI ツールを使用してジョブフローを作成および実行できます。ジョブは正常に実行されます。ただし、S3 と名前ノードのローカル ファイル システムの両方から EMR クラスターの HDFS にデータをロードしようとすると、問題が発生します。

S3 から HDFS を作成したいと思います。これを行うには S3DistCp ツールを使用しようとしています。私はこのコマンドを実行しています:

elastic-mapreduce --jobflow $JOBFLOWID --jar s3://us-east-1.elasticmapreduce/libs/s3distcp/1.0.1/s3distcp.jar --arg --src --arg 's3n://my-bucket/src' --arg --dest --arg 'hdfs:///my-emr-hdfs/dest/'

ログに、おそらく関連する 2 つのエラーが記録されています。mapreduce ジョブの出力では、ジョブは 100% まで完了しますが、最後に失敗します。

INFO org.apache.hadoop.mapred.JobClient (main):     Map output records=184
ERROR com.amazon.elasticmapreduce.s3distcp.S3DistCp (main): 21 files failed to copy

名前ノードデーモンログで、次の例外が発生しています:

INFO org.apache.hadoop.ipc.Server (IPC Server handler 13 on 9000): IPC Server handler 13 on 9000, call addBlock(/mnt/var/lib/hadoop/tmp/mapred/system/jobtracker.info, DFSClient_-1580223521, null) from xx.xx.xx.xx:xxxxx: error: java.io.IOException: File /mnt/var/lib/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
java.io.IOException: File /mnt/var/lib/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1531)
at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:685)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382)

ジョブフローの作成時に dfs.replication=1 を設定しました。私のノードは c1.mediums で、HDFS にプッシュしようとしているデータは 3GB 未満です。したがって、ディスク不足の問題ではないはずです。しかし、多分私は何かを見逃しています。

2 つの質問: 1) S3DistCp が失敗する理由についての洞察はありますか? 2) 2 番目の質問は、多少無関係です。最初のジョブが S3DistCp ジョブであるジョブフローを作成して、クラスターをデータで初期化することは可能ですか?

任意の洞察をいただければ幸いです。ありがとう。

更新:コメントの下の私のテストは機能していないようです。ログからの詳細情報を次に示します。

WARN org.apache.hadoop.hdfs.DFSClient (Thread-15): Error Recovery for block null bad datanode[0] nodes == null
WARN org.apache.hadoop.hdfs.DFSClient (Thread-15): Could not get block locations. Source file "/mnt/tmp/mapred/system/jobtracker.info" - Aborting...
WARN org.apache.hadoop.mapred.JobTracker (main): Writing to file hdfs://xx.xx.xx.xx:xxxx/mnt/tmp/mapred/system/jobtracker.info failed!
WARN org.apache.hadoop.mapred.JobTracker (main): FileSystem is not ready yet!
WARN org.apache.hadoop.mapred.JobTracker (main): Failed to initialize recovery manager. 
4

1 に答える 1

3

最初のクエリ「Jobtracker.info は 1 ではなく 0 ノードにしか複製できませんでした」については、これが役立つことを願ってい ます上記のリンク:

3.13. 「ファイルは 1 ではなく 0 ノードにしか複製できませんでした」とはどういう意味ですか?

NameNode には使用可能な DataNode がありません。これは、さまざまな理由で発生する可能性があります。DataNode ログ、NameNode ログ、ネットワーク接続などを確認してください。次のページを参照してください: CouldOnlyBeReplicatedTo

データノードデーモンの起動に遅延があったときに、単一ノードクラスターを展開しようとしているときに同様の問題に直面していました

于 2012-06-15T23:57:28.947 に答える