2012-11-08 59 views
0

我有許多排序的Hadoop作業,其中需要分佈式緩存文件。Hadoop在作業中更改了分佈式緩存對象

驅動程序類(Controller)從前一個作業接收輸入,修改一個文件,將其放入DistributedCache並開始一個新作業。

第一份工作後(即在第二個工作),我得到這個錯誤:

java.io.IOException: 
The distributed cache object hdfs://xxxx/xx/x/modelfile2#modelfile2 
changed during the job from 11/8/12 11:55 PM to 11/8/12 11:55 PM 

有誰知道這個問題可能是什麼?

+0

這項工作似乎仍然成功完成! 這是一個Hadoop錯誤?它與HDFS上的可用空間有什麼關係? 你們有沒有遇到同樣的問題? – Razvan

回答

0

根據TrackerDistributedCacheManager.java方法downloadCacheObject中的資源發生此異常時,不會被忽略,並且不會發生文件從HDFS到本地文件系統的實際下載。所以任務不會在分佈式緩存中找到它的文件。 我懷疑你可能會註冊兩次相同的對象,或者,當多個作業將同一個郵件放入同一控制器的分佈式緩存中時,hadoop中可能存在一些錯誤。

+0

我反覆這樣做:我在本地修改文件,我將新版本複製到HDFS,我再次註冊相同的文件(但新作業)。你說我不應該再註冊一次? 我想我應該說,因爲據我所知,在註冊作業結束後,您不能保證該文件仍在DistributedCache中。 – Razvan

+0

當然,你應該註冊它。但這聽起來像是hadoop中的一個bug。我會建議以下方式來測試它。每次設置不同的文件名(例如File1,File2 ...並通過某個配置參數將該文件的名稱傳遞給作業,如果此時它可以工作 - 這顯然是Hadoop中的錯誤。 –