Hadoop常见问题
- Mapper和Reducer作为内部类必须是静态static的。另外,他们可以作为同级的类。
java.lang.Exception: java.lang.RuntimeException:
java.lang.NoSuchMethodException: Hadoop_FPTree$SumMapper.<init>() at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:403) Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: Hadoop_FPTree$SumMapper.<init>() at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:131)
- Mapper默认的输入是 <位置 文本值> 位置时候LongWritable类型
java.lang.Exception: java.lang.ClassCastException:
org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.IntWritable at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:403)
- 所有的conf.setXXX都应该在Job.getInstance(conf, "PSSP")前执行,很明显,获得的job对象是和conf有关的
- reducer的输入只能遍历一次 http://my.oschina.net/leejun2005/blog/131744
- map运行的数量与split的数量相关。split的计算:
minSize=max{minSplitSize,mapred.min.split.size} (minSplitSize大小默认为1B)
maxSize=mapred.max.split.size(不在配置文件中指定时大小为Long.MAX_VALUE)
splitSize=max{minSize,min{maxSize,blockSize}}
文件大小/splitSize>1.1,创建一个split,文件剩余大小=文件大小-splitSize
...
剩余文件大小/splitSize<=1.1 将剩余的部分作为一个split
每一个分片对应一个map任务
- combiner必须输入输出一致,否则面对大的数据集(combiner运行次数不定,0次或多次都有可能,应该是数据小的时候不调用)会发生错误
- map output!=combine input?
- exited with exitCode: 1 due to: Exception from container-launch:
org.apache.hadoop.util.Shell$ExitCodeException:
at org.apache.hadoop.util.Shell.runCommand(Shell.java:464)
at org.apache.hadoop.util.Shell.run(Shell.java:379)
jar包classpath问题,直接放到系统已设置的路径可解决 /home/casper/hadoop/hadoop-2.2.0/share/hadoop/common/