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