在調試mr實例的時候,遇到如下的情況,如圖所示
說明:就是我的mr程序類名稱和我設置的setJarByclass()中設置的不一樣,但是程序竟然沒有報錯!!!!當時把我嚇尿了
疑惑:如果這樣設置的話,那豈不是找不到的main方法了啊?
最后查看setJarByClass()方法,驚奇的發現
在 JobConf中有個setJarByClass方法
/**
* Set the job's jar file by finding an example class location.
*
* @param cls the example class.
*/
public void setJarByClass(Class cls) {
String jar = ClassUtil.findContainingJar(cls);
if (jar != null) {
setJar(jar);
}
}
該方法的作用是 通過傳入的class 找到job的jar包,上圖我們設置的class 跟我們的job類位於同一個包中,通過public void setJarByClass(Class cls) 返回的是就是我們job包的jar,所以成功了
如果 我們設置的的class跟主類不在同一個工程中,程序會報錯:NotFoundClass