請幫忙,我卡住了。 這是我的代碼來運行作業。hadoop -libjars和ClassNotFoundException
hadoop jar mrjob.jar ru.package.Main -files hdfs://0.0.0.0:8020/MyCatalog/jars/metadata.csv -libjars hdfs://0.0.0.0:8020/MyCatalog/jars/opencsv.jar,hdfs://0.0.0.0:8020/MyCatalog/jars/gson.jar,hdfs://0.0.0.0:8020/MyCatalog/jars/my-utils.jar /MyCatalog/http_requests.seq-r-00000 /MyCatalog/output/result_file
我得到這些警告說:
12/10/26 18:35:50 WARN util.GenericOptionsParser: The libjars file hdfs://0.0.0.0:8020/MyCatalog/jars/opencsv.jar is not on the local filesystem. Ignoring.
12/10/26 18:35:50 WARN util.GenericOptionsParser: The libjars file hdfs://0.0.0.0:8020/MyCatalog/jars/gson.jar is not on the local filesystem. Ignoring.
12/10/26 18:35:50 WARN util.GenericOptionsParser: The libjars file hdfs://0.0.0.0:8020/MyCatalog/jars/my-utils.jar is not on the local filesystem. Ignoring.
然後:異常在線程「主要」 java.lang.NoClassDefFoundError: 在主階級路線,我嘗試從罐子類實例化名爲my-utils.jar
- 所有這些罐子都是hfds(我看見他們通過文件瀏覽器)
- 我-utils.jar確實含有類是的NoClassDefFoundError
我該怎麼辦錯的理由嗎?
UPD: 我檢查的源代碼GenericOptionsParser:
/**
* If libjars are set in the conf, parse the libjars.
* @param conf
* @return libjar urls
* @throws IOException
*/
public static URL[] getLibJars(Configuration conf) throws IOException {
String jars = conf.get("tmpjars");
if(jars==null) {
return null;
}
String[] files = jars.split(",");
List<URL> cp = new ArrayList<URL>();
for (String file : files) {
Path tmp = new Path(file);
if (tmp.getFileSystem(conf).equals(FileSystem.getLocal(conf))) {
cp.add(FileSystem.getLocal(conf).pathToFile(tmp).toURI().toURL());
} else {
LOG.warn("The libjars file " + tmp + " is not on the local " +
"filesystem. Ignoring.");
}
}
return cp.toArray(new URL[0]);
}
所以: 1.逗號 2之間沒有空格還是不明白這一點......我試圖指向:本地文件系統,hdfs文件系統,結果是一樣的。似乎沒有添加類...
還有這裏發佈的詳細答案:http://stackoverflow.com/questions/6890087/problem-with-libjars-in-hadoop –