1
我的問題聽起來很愚蠢,但我是Hadoop map新手。所以我很難弄清楚。分佈式緩存文件檢索問題
我在地圖縮減和Cloudera CDH4(4.1.1)中實現了K均值聚類。
數據由帶有x和y座標的點組成。因此,我正在更新每個步驟的質心,直到所有質心的變化都小於0.1。
因此,對於第一次迭代,我把使用
if (iteration == 0) {
Path hdfsPath = new Path(input + "/centroid.txt");
DistributedCache.addCacheFile(hdfsPath.toUri(), conf);
} else {
Path hdfsPath = new Path(again_input + "/part-00000");
DistributedCache.addCacheFile(hdfsPath.toUri(), conf);
對於下一次迭代的分佈式緩存樣本重心文件,我取了again_input目錄是相同輸出的第一次迭代,我在其中存儲新計算的質心
然而,映射器再次獲取它爲第一次迭代獲取的質心文件。
下面是獲取在映射類重心文件的代碼:
Path[] cacheFiles = DistributedCache.getLocalCacheFiles(job);
BufferedReader cacheReader = new BufferedReader(new FileReader(cacheFiles[0].toString()));
疑點1:不分佈式緩存清除一次作業完成的所有文件或它讓他們?對於例如centroid.txt在迭代1後被清除。
疑問2:我正在訪問正確的文件嗎?
centroid.txt之後1次迭代,爲下一次迭代中的.txt文件將得到更新,清除 –