8

WebサイトをクロールしてHDFSにキャッシュする単純なHadoopジョブがあります。マッパーは、URLがHDFSにすでに存在するかどうかを確認し、存在する場合はそれを使用します。存在しない場合は、ページをダウンロードしてHDFSに保存します。

ページのダウンロード中にネットワークエラー(404など)が発生した場合、URLは完全にスキップされます(HDFSに書き込まれません)。小さなリスト〜1000のWebサイトを実行するときはいつでも、このエラーが発生し、疑似分散インストールでジョブが繰り返しクラッシュするようです。何が問題なのですか?

Hadoop0.20.2-cdh3u3を実行しています。

org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/raj/cache/9b4edc6adab6f81d5bbb84fdabb82ac0 could only be replicated to 0 nodes, instead of 1
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1520)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:665)
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:557)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1434)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1430)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:416)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1157)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1428)
4

3 に答える 3

2

問題は、ファイル システムへの入力をキャッシュするために使用されたマッパー内の閉じられていない FileSystem InputStream インスタンスでした。

于 2012-04-13T10:12:43.890 に答える
1

ソースを見ると、ローカル マシン (または VM) のスペースが足りなくなる可能性があります。この例外は、システムがレプリケーションに十分なノードを見つけられない場合に発生します。ノードの選択を担当するクラスは ReplicationTargetChooser です。

http://javasourcecode.org/html/open-source/hadoop/hadoop-0.20.203.0/org/apache/hadoop/hdfs/server/namenode/ReplicationTargetChooser.java.html

主なメソッドは chooseTarget (67 行目) です。
コードに飛び込んだ後、ノードに十分なスペースがあるかどうかもチェックする isGoodTarget メソッドに入ります: 行 404.
デバッグ ログを有効にすると、おそらく関連するメッセージが表示されます。

于 2012-04-03T06:12:17.333 に答える
1

タイムスタンプと一致する namenode ログを確認してください。IPC に問題があるという兆候がある場合は、「xciever」が不足している可能性があります。私の場合、hdfs -site.xmlでdfs.datanode.max.xcieversをより大きな値、つまり 4096 または 8192 に設定すると、その特定の問題が解決されました。

于 2012-06-18T17:34:08.160 に答える