为什么成功了得不到数据结果,怀疑输入文件数据有问题,唉····
今天又尝试了很多回,总结就是用.bz2数据文件时,虽然会运行成功,但是生成的输出文件没有内容,而我也发现map input records=0(不正常啊),而用.txt和.csv数据文件输入时,运行过程就会有如下错误,作业因为任务失败而失败。
后面终于在网上查找解决办法时,脑瓜子灵光了,去查看日志文件,果然,我马上懂了自己错的原因:我打包jar的时候不是打包的整个项目,而是只打包了一个类,而这个类调用了其他类中的方法,这里这个其他类指的就是AirlineDataUtils,所以运行就会有错。
020-07-05 19:03:08,080 FATAL [uber-SubtaskRunner] org.apache.hadoop.mapred.LocalContainerLauncher: Error running local (uberized) 'child' : java.lang.NoClassDefFoundError: org/apress/prohadoop/utils/AirlineDataUtils
at org.apress.prohadoop.c5.SelectClauseMRJob$SelectClauseMapper.map(SelectClauseMRJob.java:29)
at org.apress.prohadoop.c5.SelectClauseMRJob$SelectClauseMapper.map(SelectClauseMRJob.java:1)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:793)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.LocalContainerLauncher$EventHandler.runSubtask(LocalContainerLauncher.java:436)
at org.apache.hadoop.mapred.LocalContainerLauncher$EventHandler.runTask(LocalContainerLauncher.java:350)
at org.apache.hadoop.mapred.LocalContainerLauncher$EventHandler.access$200(LocalContainerLauncher.java:211)
at org.apache.hadoop.mapred.LocalContainerLauncher$EventHandler$1.run(LocalContainerLauncher.java:254)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.apress.prohadoop.utils.AirlineDataUtils
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 14 more
这是select运行成功后,Map input records终于不再是0了
查看生成的输出文件,下面是最后几行