Hadoopで実行しようとすると、以下のJavaが機能しない理由を見つけようとしています。
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.Mapper.Context;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
public class PageStat implements Tool {
private Configuration conf;
@Override
public int run(String[] args) throws Exception {
Job job = new Job(getConf());
String jobName = "Page visit statistics MR";
job.setJobName(jobName);
job.setJarByClass(PageStat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setMapperClass(PageStat.PageStatMapper.class);
job.setReducerClass(PageStat.PageStatReducer.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setNumReduceTasks(job.getConfiguration().getInt("num.reducer", 1));
int status = job.waitForCompletion(true) ? 0 : 1;
return status;
}
public static void main(String[] args) throws Exception {
int exitCode = ToolRunner.run(new PageStat(), args);
System.exit(exitCode);
}
public void setConf(Configuration conf) {
this.conf = conf;
}
public Configuration getConf() {
return conf;
}
public static class PageStatMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private Text keyHolder = new Text();
private IntWritable valueHolder = new IntWritable();
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String[] items = value.toString().split(",");
if (items.length == 3) {
String url = items[1];
keyHolder.set(url);
Integer duration = Integer.parseInt(items[2]);
valueHolder.set(duration);
context.write(keyHolder, valueHolder);
} else {
context.getCounter("Error", "invalidData").increment(1);
}
}
}
public static class PageStatReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private Text keyHolder = new Text();
private IntWritable valueHolder = new IntWritable();
private String statType;
private int count;
private int totalTime;
private int avTime;
protected void setup(Context context) throws IOException, InterruptedException {
Configuration conf = context.getConfiguration();
statType = conf.get("page.stat");
}
protected void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
count = 0;
totalTime = 0;
for (IntWritable value : values){
++count;
totalTime += value.get();
}
avTime = totalTime / count;
keyHolder.set(key);
if (statType.equals("average")){
valueHolder.set(avTime);
} else {
valueHolder.set(totalTime);
}
context.write(keyHolder, valueHolder);
}
}
}
エラーは次のとおりです。
c:\hadoop-training\tutorial02-jobtracker>hadoop jar PageStat.jar PageStat jobtracker/input/visit_5000000.txt jobtracker/output 13/07/29 11:24:50 INFO input.FileInputFormat: プロセスへの合計入力パス: 1 log4j:ERROR [c:\Hadoop\hadoop-1.1.0-SNAPSHOT\logs/hadoop.log] の名前を [c:\Hadoop\hadoop-1.1.0-SNAPSHOT\logs/hadoop.log.2013-07] に変更できませんでした-26]。13/07/29 11:24:51 INFO util.NativeCodeLoader: ネイティブ Hadoop ライブラリをロードしました 13/07/29 11:24:51 警告 snappy.LoadSnappy: Snappy ネイティブ ライブラリがロードされていません 13/07/29 11:24: 54 情報 mapred.JobClient: 実行中のジョブ: job_201307261340_0001 13/07/29 11:24:55 情報 mapred.JobClient: マップ 0% 削減 0% 13/07/29 11:25:24 情報 mapred.JobClient: マップ 1% 削減0% 13/07/29 11:25:27 INFO mapred.JobClient: マップ 6% 削減 0% 13/07/29 11:25:30 INFO mapred.JobClient:
13/07/29 11:26:56 INFO mapred.JobClient: マップ 100% 削減 0% 13/07/29 11:27:05 INFO mapred.JobClient: マップ 100% 削減 8% 13/07/29 11:27 :08 情報 mapred.JobClient: マップ 100% 削減 33% 13/07/29 11:27:10 情報 mapred.JobClient: タスク ID: 試行_201307261340_0001_r_0 00000_1、ステータス: 失敗しました java.lang.NullPointerException at PageStat$PageStatReducer.reduce(PageStat) .java:120) で PageStat$PageStatReducer.reduce(PageStat.java:96) で org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:177) で org.apache.hadoop.mapred.ReduceTask.runNewReducer( ReduceTask.java:651 ) で org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:418) で org.apache.hadoop.mapred.Child$4.run(Child.java:271) で java.security. javax.security の AccessController.doPrivileged(Native Method)。auth.Subject.doAs(Subject.java:396) org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1135) org.apache.hadoop.mapred.Child.main(Child.java:265) )
13/07/29 11:27:11 INFO mapred.JobClient: マップ 100% 削減 0% 13/07/29 11:27:20 INFO mapred.JobClient: マップ 100% 削減 8% 13/07/29 11:27 :23 INFO mapred.JobClient: map 100% reduce 25% 13/07/29 11:27:25 INFO mapred.JobClient: Task Id: attempts_201307261340_0001_r_0 00000_2, Status: FAILED java.lang.NullPointerException at PageStat$PageStatReducer.reduce(PageStat) .java:120) で PageStat$PageStatReducer.reduce(PageStat.java:96) で org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:177) で org.apache.hadoop.mapred.ReduceTask.runNewReducer( ReduceTask.java:651 ) で org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:418) で org.apache.hadoop.mapred.Child$4.run(Child.java:271) で java.security. javax.security の AccessController.doPrivileged(Native Method)。auth.Subject.doAs(Subject.java:396) org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1135) org.apache.hadoop.mapred.Child.main(Child.java:265) )
13/07/29 11:27:26 INFO mapred.JobClient: マップ 100% 削減 0% 13/07/29 11:27:38 INFO mapred.JobClient: マップ 100% 削減 25% 13/07/29 11:27 :41 INFO mapred.JobClient: map 100% reduce 0% 13/07/29 11:27:43 INFO mapred.JobClient: Job complete: job_201307261340_0001 13/07/29 11:27:43 INFO mapred.JobClient: Counters: 24 13/07/29 11:27:43 INFO mapred.JobClient: ジョブ カウンター 13/07/29 11:27:43 INFO mapred.JobClient: 起動された reduce tasks=4 13/07/29 11:27:43 INFO mapred。 JobClient: SLOTS_MILLIS_MAPS=179086 13/07/29 11:27:43 INFO mapred.JobClient: スロットを予約した後の待機時間の短縮 (ms)=0 13/07/29 11:27:43 INFO mapred.JobClient :
スロットを予約した後にすべてのマップが待機していた合計時間 (ミリ秒)=0 13/07/29 11:27:43 INFO mapred.JobClient: Launched map tasks=4 13/07/29 11:27:43 INFO mapred.JobClient : データ ローカル マップ タスク = 4 13/07/29 11:27:43 INFO mapred.JobClient: タスクの削減に失敗しました = 1 13/07/29 11:27:43 INFO mapred.JobClient:
SLOTS_MILLIS_REDUCES=106513 13/07/ 29 11:27:43 INFO mapred.JobClient:
FileSystemCounters 13/07/29 11:27:43 INFO mapred.JobClient:
FILE_BYTES_READ=179504086 13/07/29 11:27:43 INFO mapred.JobClient:
HDFS_BYTES_READ=254931072 13/ 07/29 11:27:43 INFO mapred.JobClient:
FILE_BYTES_WRITTEN=359099432 13/07/29 11:27:43 INFO mapred.JobClient: ファイル入力形式カウンター 13/07/29 11:27:43 INFO mapred.JobClient:
読み取ったバイト数 = 254930544 13/07/29 11:27:43 INFO mapred.JobClient:
Map-Reduce Framework 13/07/29 11:27:43 INFO mapred.JobClient: マップ出力のマテリアライズド バイト = 17949 9502 13/07/29 11:27:43 INFO mapred.JobClient: 出力レコードの結合 = 0 13/07/ 29 11:27:43 情報 mapred.JobClient: マップ入力レコード=5000000 13/07/29 11:27:43 情報 mapred.JobClient: 物理メモリ (バイト) スナップショット=85 1607552 13/07/29 11:27:43情報 mapred.JobClient: こぼれたレコード = 10000000 13/07/29 11:27:43 情報 mapred.JobClient: マップ出力バイト = 169499478 13/07/29 11:27:43 情報 mapred.JobClient: CPU 時間 (ミリ秒) =81308 13/07/29 11:27:43 INFO mapred.JobClient: コミットされた合計ヒープ使用量 (バイト)= 746323968 13/07/29 11:27:43 INFO mapred.JobClient: 仮想メモリ (バイト) スナップショット=988 401664 13/07/29 11:27:43 INFO mapred.JobClient: 入力レコードを結合 = 0 13/07/29 11:27:43 INFO mapred。JobClient: マップ出力レコード = 5000000 13/07/29 11:27:43 INFO mapred.JobClient:
SPLIT_RAW_BYTES=528
ありがとう!!!