6

小さなデータセットに対して正常に実行されるハイブクエリを実行しています。しかし、私は 2 億 5000 万のレコードを実行していますが、ログで以下のエラーが発生しています

 FATAL org.apache.hadoop.mapred.Child: Error running child : java.lang.OutOfMemoryError:   unable to create new native thread
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Thread.java:640)
    at org.apache.hadoop.mapred.Task$TaskReporter.startCommunicationThread(Task.java:725)
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:362)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
    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:1136)
    at org.apache.hadoop.mapred.Child.main(Child.java:249)



 2013-03-18 14:12:58,907 WARN org.apache.hadoop.mapred.Child: Error running child
 java.io.IOException: Cannot run program "ln": java.io.IOException: error=11, Resource temporarily unavailable
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
    at java.lang.Runtime.exec(Runtime.java:593)
    at java.lang.Runtime.exec(Runtime.java:431)
    at java.lang.Runtime.exec(Runtime.java:369)
    at org.apache.hadoop.fs.FileUtil.symLink(FileUtil.java:567)
    at org.apache.hadoop.mapred.TaskRunner.symlink(TaskRunner.java:787)
    at org.apache.hadoop.mapred.TaskRunner.setupWorkDir(TaskRunner.java:752)
    at org.apache.hadoop.mapred.Child.main(Child.java:225)
 Caused by: java.io.IOException: java.io.IOException: error=11, Resource temporarily unavailable
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
    at java.lang.ProcessImpl.start(ProcessImpl.java:65)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
    ... 7 more
2013-03-18 14:12:58,911 INFO org.apache.hadoop.mapred.Task: Runnning cleanup for the task
2013-03-18 14:12:58,911 INFO org.apache.hadoop.mapred.Child: Error cleaning up
  java.lang.NullPointerException
    at org.apache.hadoop.mapred.Task.taskCleanup(Task.java:1048)
    at org.apache.hadoop.mapred.Child.main(Child.java:281)

これについて助けが必要です。

4

3 に答える 3

1

ノードの OutOfMemmory が原因でジョブが失敗している場合は、最大マップとレデューサーの数を微調整し、JVM がそれぞれを選択できます。mapred.child.java.opts (デフォルトは 200Xmx) は通常、データ ノード固有のハードウェアに基づいて増やす必要があります。

于 2013-03-21T08:20:15.903 に答える
-1

皆さんありがとう..あなたは正しいです。私のプログラムがターゲットテーブルに大量のファイルを生成していたため、ファイル記述子が原因です。マルチレベルのパーティション構造によるものです。

ulimit と xceivers プロパティを増やしました。それは役に立ちました。しかし、それでも私たちの状況では、これらの制限も超えていました

次に、パーティションごとにデータを分散することを決定し、パーティションごとに 1 つのファイルのみを取得しています。

それは私たちのために働いた。システムを 500 億以上のレコードにスケーリングしたところ、うまくいきました

于 2013-10-12T04:00:02.430 に答える