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有关的

 

 

  • 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?

http://stackoverflow.com/questions/12171965/why-is-the-number-of-combiner-input-records-more-than-the-number-of-outputs-of-m

 

  • 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/

posted @ 2014-04-27 10:28  Man_华  阅读(4394)  评论(2编辑  收藏  举报