我正在尝试从Eclipse提交mapreduce作业,该作业已提交,但失败,并显示ClassNotFoundException
。经过一番研究后,我找到了原因(请阅读以下说明),我想知道是否可以通过配置月食来解决这个问题。
为什么作业失败并出现ClassNotFoundException
在mapreduce驱动程序代码中,我们通常按类名设置Jar,即使用JobConf.setJarByClass
函数。此函数接受java.lang.Class
并找出包含它的jar(通过调用ClassUtil.findContainingJar)。此jar稍后以job.jar
的形式上传到HDFS。
但是这里的问题是Eclipse运行Java程序的方式,它编译类并将.class
文件放置在bin
目录中,将bin
目录添加到{{1 }},并运行CLASSPATH
类。因此,ClassUtil.findContainingJar
找不到包含自变量类的任何文件(它仅搜索Main
文件)并返回.jar
。因此,没有任何上载到HDFS的操作,并且Mapreduce作业因null
异常而失败。
好吧,我可以编写一个简单的方法,该方法可以存档所需的类,然后将此jar名称提供给JobConf
,但是如果有一种简便的方法来修改Eclipse的行为,那将非常有帮助
PS: 该项目是一个简单的Java项目,我正在使用默认的“运行配置”运行它