分片輸出(標題應該是分片,以反映Hadoops 碎片其在多個文件輸出)閱讀從Hadoop的工作從DistributedCache
我鏈接多個Hadoop作業在一起。其中一個早期的作業會產生比其他作品小几個數量級的輸出,因此我想將它放到DistributedCache中。這是一個很難的部分。這是我寫的代碼這樣做:
FileSystem fs = FileSystem.get(conf);
Path pathPattern = new Path(distCache, "part-r-[0-9]*");
FileStatus [] list = fs.globStatus(pathPattern);
for (FileStatus status : list) {
DistributedCache.addCacheFile(status.getPath().toUri(), conf);
}
這適用於我的本地機器和我設置的虛擬羣集。 但是,與this question不同,它在AWS上失敗,理由是DistributedCache.getCacheFiles()
的返回值是空列表。
本質上,我需要以編程方式從一個MR作業讀取分片輸出並將其放入DistributedCache。我無法指定硬文件名,因爲每次運行程序時減速器的數量都可能會發生變化。我並不完全瞭解S3和HDFS如何協同工作,因此我們很難與文件系統進行交互來讀取分片輸出。我如何以適用於AWS的方式來實現這一點?
僅供參考,我使用的是Hadoop 1.0.x:1.0.4(四個Ubuntu 12.10虛擬機)和1.0.3(AWS)的組合。
有點;它不同於我以編程方式寫入和從緩存中讀取數據,而我無法確定這兩者之間的問題在哪裏。當只有「part-r-00000」擔心時,手動添加文件就可以工作得很好;隨着*分佈式模式下的任意分片,我正在設計一個可以在分佈式和獨立模式下工作的解決方案。 – Magsol 2013-02-22 20:13:51