外部プログラム並列実行機能を利用した際に出力されるログについて、ジョブ成功時とジョブ失敗時を例に説明します。
ジョブを実行したとき、入力データやプログラム、MapReduce設定ファイルに問題がない場合は、Reduceタスクが100%まで進捗したあと、ジョブの情報が出力され、外部プログラム並列実行コマンドが正常終了します。ジョブの情報はHadoopが出力する情報で、Map/Reduceタスクの入出力レコード件数や、タスクの復帰値が出力されます。
ジョブを実行したとき、入力データやプログラム、MapReduce設定ファイルに問題がある場合は、ジョブはエラーで終了します。ただし、タスクでエラーが発生した場合は、Hadoopによりリトライ(デフォルトは3回)され、エラーが繰り返されるとジョブはエラーで終了します。
以下は、Hadoopジョブの実行が成功した例です。Mapタスク、Reduceタスクが100%まで進捗し、エラーメッセージが出力されることなく、外部プログラム並列実行コマンドが終了しています。
[bdppuser1@develop sample2]$ /opt/FJSVbdpp/bin/bdpp_submitjob -conf ./conf/configuration.conf -files ./lib/sample2.jar 14/08/19 19:55:57 INFO util.NativeCodeLoader: Loaded the native-hadoop library 14/08/19 19:55:58 WARN snappy.LoadSnappy: Snappy native library not loaded 14/08/19 19:55:58 INFO mapred.FileInputFormat: Total input paths to process : 1 14/08/19 19:55:58 INFO mapred.JobClient: Running job: job_201408191146_0023 14/08/19 19:55:59 INFO mapred.JobClient: map 0% reduce 0% 14/08/19 19:56:16 INFO mapred.JobClient: map 100% reduce 0% 14/08/19 19:56:26 INFO mapred.JobClient: map 100% reduce 16% 14/08/19 19:56:29 INFO mapred.JobClient: map 100% reduce 50% 14/08/19 19:56:33 INFO mapred.JobClient: map 100% reduce 100% 14/08/19 19:56:33 INFO mapred.JobClient: Job complete: job_201408191146_0023 14/08/19 19:56:33 INFO mapred.JobClient: Counters: 36 14/08/19 19:56:33 INFO mapred.JobClient: Job Counters 14/08/19 19:56:33 INFO mapred.JobClient: Launched reduce tasks=4 14/08/19 19:56:33 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=20388 14/08/19 19:56:33 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0 14/08/19 19:56:33 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0 14/08/19 19:56:33 INFO mapred.JobClient: Launched map tasks=2 14/08/19 19:56:33 INFO mapred.JobClient: Data-local map tasks=2 14/08/19 19:56:33 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=52354 14/08/19 19:56:33 INFO mapred.JobClient: File Input Format Counters 14/08/19 19:56:33 INFO mapred.JobClient: Bytes Read=0 14/08/19 19:56:33 INFO mapred.JobClient: File Output Format Counters 14/08/19 19:56:33 INFO mapred.JobClient: Bytes Written=8894 14/08/19 19:56:33 INFO mapred.JobClient: FileSystemCounters 14/08/19 19:56:33 INFO mapred.JobClient: FILE_BYTES_READ=180602 14/08/19 19:56:33 INFO mapred.JobClient: PDFS_BYTES_READ=385698 14/08/19 19:56:33 INFO mapred.JobClient: FILE_BYTES_WRITTEN=711086 14/08/19 19:56:33 INFO mapred.JobClient: PDFS_BYTES_WRITTEN=9332 14/08/19 19:56:33 INFO mapred.JobClient: Extjoiner.ExitStatus 14/08/19 19:56:33 INFO mapred.JobClient: map.00=0 14/08/19 19:56:33 INFO mapred.JobClient: reduce.01=0 14/08/19 19:56:33 INFO mapred.JobClient: map.01=0 14/08/19 19:56:33 INFO mapred.JobClient: reduce.00=0 14/08/19 19:56:33 INFO mapred.JobClient: reduce.03=0 14/08/19 19:56:33 INFO mapred.JobClient: reduce.02=0 14/08/19 19:56:33 INFO mapred.JobClient: Map-Reduce Framework 14/08/19 19:56:33 INFO mapred.JobClient: Map output materialized bytes=185782 14/08/19 19:56:33 INFO mapred.JobClient: Map input records=10000 14/08/19 19:56:33 INFO mapred.JobClient: Reduce shuffle bytes=185782 14/08/19 19:56:33 INFO mapred.JobClient: Spilled Records=18078 14/08/19 19:56:33 INFO mapred.JobClient: Map output bytes=358578 14/08/19 19:56:33 INFO mapred.JobClient: Total committed heap usage (bytes)=688914432 14/08/19 19:56:33 INFO mapred.JobClient: CPU time spent (ms)=9650 14/08/19 19:56:33 INFO mapred.JobClient: Map input bytes=256625 14/08/19 19:56:33 INFO mapred.JobClient: SPLIT_RAW_BYTES=506 14/08/19 19:56:33 INFO mapred.JobClient: Combine input records=0 14/08/19 19:56:33 INFO mapred.JobClient: Reduce input records=9039 14/08/19 19:56:33 INFO mapred.JobClient: Reduce input groups=1000 14/08/19 19:56:33 INFO mapred.JobClient: Combine output records=0 14/08/19 19:56:33 INFO mapred.JobClient: Physical memory (bytes) snapshot=977354752 14/08/19 19:56:33 INFO mapred.JobClient: Reduce output records=1000 14/08/19 19:56:33 INFO mapred.JobClient: Virtual memory (bytes) snapshot=8344576000 14/08/19 19:56:33 INFO mapred.JobClient: Map output records=9039 [bdppuser1@develop sample2]$
以下は、存在しないプログラムをReduceアプリケーションしてMapReduce設定ファイルに指定したことにより、Hadoopジョブの実行が失敗した例です
途中までReduceタスクが進捗します(例では66%まで)が、その後タイムアウトが発生し、Reduceタスクが失敗しています。その後Hadoopによりリトライされますが、同じ結果が繰り返されジョブがエラーで終了しています。
[bdppuser1@bdpp-dev sample2]$ /opt/FJSVbdpp/bin/bdpp_submitjob -conf ./conf/configuration.conf -files ./lib/sample2.jar 14/08/19 19:00:58 INFO util.NativeCodeLoader: Loaded the native-hadoop library 14/08/19 19:00:59 WARN snappy.LoadSnappy: Snappy native library not loaded 14/08/19 19:00:59 INFO mapred.FileInputFormat: Total input paths to process : 1 14/08/19 19:00:59 INFO mapred.JobClient: Running job: job_201408191146_0017 14/08/19 19:01:00 INFO mapred.JobClient: map 0% reduce 0% 14/08/19 19:01:17 INFO mapred.JobClient: map 100% reduce 0% 14/08/19 19:01:24 INFO mapred.JobClient: map 100% reduce 33% 14/08/19 19:01:27 INFO mapred.JobClient: map 100% reduce 66% 14/08/19 19:01:41 INFO mapred.JobClient: map 100% reduce 0% 14/08/19 19:01:42 INFO mapred.JobClient: Task Id : attempt_201408191146_0017_r_000000_0, Status : FAILED Task attempt_201408191146_0017_r_000000_0 failed to report status for 10 seconds. Killing! 14/08/19 19:01:52 INFO mapred.JobClient: map 100% reduce 33% 14/08/19 19:01:56 INFO mapred.JobClient: map 100% reduce 66% 14/08/19 19:02:09 INFO mapred.JobClient: map 100% reduce 0% 14/08/19 19:02:10 INFO mapred.JobClient: Task Id : attempt_201408191146_0017_r_000000_1, Status : FAILED Task attempt_201408191146_0017_r_000000_1 failed to report status for 10 seconds. Killing! 14/08/19 19:02:19 INFO mapred.JobClient: map 100% reduce 33% 14/08/19 19:02:22 INFO mapred.JobClient: map 100% reduce 66% 14/08/19 19:02:35 INFO mapred.JobClient: map 100% reduce 0% 14/08/19 19:02:36 INFO mapred.JobClient: Task Id : attempt_201408191146_0017_r_000000_2, Status : FAILED Task attempt_201408191146_0017_r_000000_2 failed to report status for 10 seconds. Killing! 14/08/19 19:02:46 INFO mapred.JobClient: map 100% reduce 33% 14/08/19 19:02:49 INFO mapred.JobClient: map 100% reduce 66% 14/08/19 19:03:02 INFO mapred.JobClient: map 100% reduce 0% 14/08/19 19:03:05 INFO mapred.JobClient: Job complete: job_201408191146_0017 14/08/19 19:03:05 INFO mapred.JobClient: Counters: 28 14/08/19 19:03:05 INFO mapred.JobClient: Job Counters 14/08/19 19:03:05 INFO mapred.JobClient: Launched reduce tasks=4 14/08/19 19:03:05 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=20602 14/08/19 19:03:05 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0 14/08/19 19:03:05 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0 14/08/19 19:03:05 INFO mapred.JobClient: Launched map tasks=2 14/08/19 19:03:05 INFO mapred.JobClient: Data-local map tasks=2 14/08/19 19:03:05 INFO mapred.JobClient: Failed reduce tasks=1 14/08/19 19:03:05 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=7237 14/08/19 19:03:05 INFO mapred.JobClient: File Input Format Counters 14/08/19 19:03:05 INFO mapred.JobClient: Bytes Read=0 14/08/19 19:03:05 INFO mapred.JobClient: FileSystemCounters 14/08/19 19:03:05 INFO mapred.JobClient: FILE_BYTES_READ=138 14/08/19 19:03:05 INFO mapred.JobClient: PDFS_BYTES_READ=385698 14/08/19 19:03:05 INFO mapred.JobClient: FILE_BYTES_WRITTEN=296808 14/08/19 19:03:05 INFO mapred.JobClient: PDFS_BYTES_WRITTEN=138 14/08/19 19:03:05 INFO mapred.JobClient: Extjoiner.ExitStatus 14/08/19 19:03:05 INFO mapred.JobClient: map.00=0 14/08/19 19:03:05 INFO mapred.JobClient: map.01=0 14/08/19 19:03:05 INFO mapred.JobClient: Map-Reduce Framework 14/08/19 19:03:05 INFO mapred.JobClient: Map output materialized bytes=182942 14/08/19 19:03:05 INFO mapred.JobClient: Map input records=10000 14/08/19 19:03:05 INFO mapred.JobClient: Spilled Records=9039 14/08/19 19:03:05 INFO mapred.JobClient: Map output bytes=358578 14/08/19 19:03:05 INFO mapred.JobClient: Total committed heap usage (bytes)=635895808 14/08/19 19:03:05 INFO mapred.JobClient: CPU time spent (ms)=3330 14/08/19 19:03:05 INFO mapred.JobClient: Map input bytes=256625 14/08/19 19:03:05 INFO mapred.JobClient: SPLIT_RAW_BYTES=506 14/08/19 19:03:05 INFO mapred.JobClient: Combine input records=0 14/08/19 19:03:05 INFO mapred.JobClient: Combine output records=0 14/08/19 19:03:05 INFO mapred.JobClient: Physical memory (bytes) snapshot=628264960 14/08/19 19:03:05 INFO mapred.JobClient: Virtual memory (bytes) snapshot=2754908160 14/08/19 19:03:05 INFO mapred.JobClient: Map output records=9039 EX0003:ジョブの実行に失敗しました。 [bdppuser1@bdpp-dev sample2]$
この例では、「attempt_201408191146_0017_r_000000_2」のタスクでエラーが起きていることがわかります。
このため、エラー内容はタスクログを確認する必要があります。
スレーブサーバのタスクログを確認します。
$ more /var/log/hadoop/mapred/userlogs/job_201408191146_0017/attempt_201408191146_0017_r_000000_2/syslog
ログには、タスク実行に伴いHadoopが出力する情報が含まれるため、様々な情報が出力されています。この中から、エラー(ERROR)や例外(Exception)が出力されている箇所を探します。
2014-08-19 19:03:04,279 INFO com.fujitsu.labs.extjoiner.MidFileCommandBuilder: コマンドの起動に失敗しました java.io.IOException: Cannot run program "Aggregate": java.io.IOException: error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) at com.fujitsu.labs.extjoiner.MidFileCommandBuilder.startCommand(MidFileCommandBuilder.java:841) at com.fujitsu.labs.extjoiner.MidFileCommandBuilder.onConfigure(MidFileCommandBuilder.java:475) at com.fujitsu.labs.extjoiner.ExtJoinerReduce.configure(ExtJoinerReduce.java:122) 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.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88) at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64) at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117) at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:485) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:420) 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:1121) at org.apache.hadoop.mapred.Child.main(Child.java:249) Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.<init>(UNIXProcess.java:148) at java.lang.ProcessImpl.start(ProcessImpl.java:65) at java.lang.ProcessBuilder.start(ProcessBuilder.java:453) ... 17 more 2014-08-19 19:03:04,280 ERROR com.fujitsu.labs.extjoiner.MidFileCommandBuilder: コマンド実行の開始に失敗しました。詳細は例外情報を参照してください。 java.lang.RuntimeException: コマンドの起動に失敗しました
メッセージから、「Aggregate」という外部プログラムが見つからないためエラーになっていることがわかります。
以下は、ReduceタスクとしてJava言語で実装した外部プログラムを実行した際、実行時エラーが発生しHadoopジョブの実行が失敗した例です。
Reduceタスクは100%まで進捗しますが、ジョブはエラーで終了します。
[bdppuser1@develop sample2]$ /opt/FJSVbdpp/bin/bdpp_submitjob -conf ./conf/configuration.conf -files ./lib/sample2.jar 14/08/19 19:49:04 INFO util.NativeCodeLoader: Loaded the native-hadoop library 14/08/19 19:49:05 WARN snappy.LoadSnappy: Snappy native library not loaded 14/08/19 19:49:05 INFO mapred.FileInputFormat: Total input paths to process : 1 14/08/19 19:49:05 INFO mapred.JobClient: Running job: job_201408191146_0022 14/08/19 19:49:06 INFO mapred.JobClient: map 0% reduce 0% 14/08/19 19:49:21 INFO mapred.JobClient: map 100% reduce 0% 14/08/19 19:49:31 INFO mapred.JobClient: map 100% reduce 16% 14/08/19 19:49:33 INFO mapred.JobClient: map 100% reduce 50% 14/08/19 19:49:35 INFO mapred.JobClient: map 100% reduce 75% 14/08/19 19:49:36 INFO mapred.JobClient: map 100% reduce 100% 14/08/19 19:49:37 INFO mapred.JobClient: Job complete: job_201408191146_0022 14/08/19 19:49:37 INFO mapred.JobClient: Counters: 36 14/08/19 19:49:37 INFO mapred.JobClient: Job Counters 14/08/19 19:49:37 INFO mapred.JobClient: Launched reduce tasks=4 14/08/19 19:49:37 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=20661 14/08/19 19:49:37 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0 14/08/19 19:49:37 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0 14/08/19 19:49:37 INFO mapred.JobClient: Launched map tasks=2 14/08/19 19:49:37 INFO mapred.JobClient: Data-local map tasks=2 14/08/19 19:49:37 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=48704 14/08/19 19:49:37 INFO mapred.JobClient: File Input Format Counters 14/08/19 19:49:37 INFO mapred.JobClient: Bytes Read=0 14/08/19 19:49:37 INFO mapred.JobClient: File Output Format Counters 14/08/19 19:49:37 INFO mapred.JobClient: Bytes Written=0 14/08/19 19:49:37 INFO mapred.JobClient: FileSystemCounters 14/08/19 19:49:37 INFO mapred.JobClient: FILE_BYTES_READ=182454 14/08/19 19:49:37 INFO mapred.JobClient: PDFS_BYTES_READ=385698 14/08/19 19:49:37 INFO mapred.JobClient: FILE_BYTES_WRITTEN=711020 14/08/19 19:49:37 INFO mapred.JobClient: PDFS_BYTES_WRITTEN=2290 14/08/19 19:49:37 INFO mapred.JobClient: Extjoiner.ExitStatus 14/08/19 19:49:37 INFO mapred.JobClient: map.00=0 14/08/19 19:49:37 INFO mapred.JobClient: reduce.01=1 14/08/19 19:49:37 INFO mapred.JobClient: map.01=0 14/08/19 19:49:37 INFO mapred.JobClient: reduce.00=1 14/08/19 19:49:37 INFO mapred.JobClient: reduce.03=1 14/08/19 19:49:37 INFO mapred.JobClient: reduce.02=1 14/08/19 19:49:37 INFO mapred.JobClient: Map-Reduce Framework 14/08/19 19:49:37 INFO mapred.JobClient: Map output materialized bytes=185782 14/08/19 19:49:37 INFO mapred.JobClient: Map input records=10000 14/08/19 19:49:37 INFO mapred.JobClient: Reduce shuffle bytes=185782 14/08/19 19:49:37 INFO mapred.JobClient: Spilled Records=18078 14/08/19 19:49:37 INFO mapred.JobClient: Map output bytes=358578 14/08/19 19:49:37 INFO mapred.JobClient: Total committed heap usage (bytes)=689766400 14/08/19 19:49:37 INFO mapred.JobClient: CPU time spent (ms)=9480 14/08/19 19:49:37 INFO mapred.JobClient: Map input bytes=256625 14/08/19 19:49:37 INFO mapred.JobClient: SPLIT_RAW_BYTES=506 14/08/19 19:49:37 INFO mapred.JobClient: Combine input records=0 14/08/19 19:49:37 INFO mapred.JobClient: Reduce input records=9039 14/08/19 19:49:37 INFO mapred.JobClient: Reduce input groups=1000 14/08/19 19:49:37 INFO mapred.JobClient: Combine output records=0 14/08/19 19:49:37 INFO mapred.JobClient: Physical memory (bytes) snapshot=983425024 14/08/19 19:49:37 INFO mapred.JobClient: Reduce output records=0 14/08/19 19:49:37 INFO mapred.JobClient: Virtual memory (bytes) snapshot=8349315072 14/08/19 19:49:37 INFO mapred.JobClient: Map output records=9039 EX0003:ジョブの実行に失敗しました。 [bdppuser1@develop sample2]$
ログから、Reduceタスクが復帰値1を返していることがわかります。
発生したエラーを確認するために、外部プログラムが出力した情報を参照します。
[bdppuser1@develop sample2]$ hadoop dfs -copyToLocal sample2_output ./sample2_output 14/08/19 19:52:43 INFO util.NativeCodeLoader: Loaded the native-hadoop library [bdppuser1@develop sample2]$ tail sample2_output/currentdir/part-r-00000/stderr
ログ抜粋
Exception in thread "main" java.lang.NoClassDefFoundError: Join Caused by: java.lang.ClassNotFoundException: Join at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) Could not find the main class: Join. Program will exit.
上記から、実行しようとしたクラスが見つからなかったためにエラーとなっていることがわかります。