自己写MapReduce,遇到几个坑,其他地方查不到或者意见不统一,这里记录一下。
1.Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.xxx.xxx.mr.WordCount$wordmaper not found
WordCount中的map子类wordmaper没找到。
解决方案:
在主程序中添加job.setJarByClass(WordCount.class);
2.IDEA中打包jar
使用IDEA工程右键的编译,会在target/classes目录下形成编译好的类,带package路径的。
>cd target/classes
>java jar WordCount.jar com/xxx/xxx/mr/WordCount*.class
会在target/classes下拿到包WordCount.jar
3.Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1347093252 in class file com/xxx/xxx/mr/WordCount
这个是打包错误,只要使用2的方法打包,不会出现这个问题。
4.Error: java.lang.RuntimeException: java.lang.NoSuchMethodException: com.xxx.xxx.mr.WordCount$wordmaper.<init>()
同上,遵照2方法打包。
5.Error: java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable5
经检查map和reduce的参数无误,主类中设置的setOutputKeyClass和setOutputValueClass设置都没问题。
解决方案:分别注释掉自动map类和reducer程序中代码自动生成的super.map(key, value, context);和super.reduce(key, values, context);