在运行 mapreduce出现如下错误:
7/08/28 01:25:28 INFO mapreduce.Job: Task Id : attempt_1503851034154_0010_r_000000_0, Status : FAILED
at org.apache.hadoop.io.WritableComparator.compare(WritableComparator.java:157)
at org.apache.hadoop.mapreduce.task.ReduceContextImpl.nextKeyValue(ReduceContextImpl.java:158)
at org.apache.hadoop.mapreduce.task.ReduceContextImpl.nextKey(ReduceContextImpl.java:121)
at org.apache.hadoop.mapreduce.lib.reduce.WrappedReducer$Context.nextKey(WrappedReducer.java:302)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:170)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:627)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1692)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Container killed by the ApplicationMaster.
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
原因是自定义比较器下没有写构造方法如下图:
TgroupComparator() {
super(TianQi.class, true);
}
@Override
public int compare(WritableComparable a, WritableComparable b) {
TianQi t1 = (TianQi)a;
TianQi t2 = (TianQi)b;
int c1 = Integer.compare(t1.getYear(), t2.getYear());
if(c1 == 0){
int c2 = Integer.compare(t1.getMonth(), t2.getMonth());
return c2;
}
return c1;
}