有幾個相關的問題,但我花了整整一天的時間來試圖找出這個問題,答案並沒有真正在任何地方,所以我正在爲後代進行記錄。Hadoop Map減少分佈式緩存類路徑問題
我有一個Hadoop安裝(CDH 3u6 - Hadoop 0.20.2),我想在其中發送一個具有多個Jar依賴關係的map reduce作業。像大多數地方推薦的那樣,我想使用分佈式緩存來將依賴關係發送到數據節點。
Path someHdfsPlace = new Path("my/mr/libs");
FileStatus[] jarFiles = hdfs.listStatus(classpathFilesDir);
for (FileStatus fs : jarFiles) {
DistributedCache.addFileToClassPath(fs.getPath(), job.getConfiguration());
}
我在不同的Hadoop集羣上看到了這個工作,現在突然間沒有了。該文件存在於hdfs中,似乎對文件及其上的目錄具有正確的權限,但是一旦嘗試從lib中加載依賴關係,任何MR代碼都會失敗,出現ClassNotFound
錯誤(因此不是腐敗問題,只是這些東西沒有出現在課程路徑中)
一篇文章建議您必須設置$HADOOP_CLASSPATH
變量 - 這在某些情況下可能會有所幫助,但是我不清楚您將設置爲什麼,在我以前的工作例子中,我不必那樣做,所以看起來不太可能。
完全神祕!