2017-03-21 57 views
0

我試圖在應用程序級別可見性下將*.tar.gz文件分發到紗線節點。如何將非jar文件分發到紗線節點?

在以下目錄中的hadoop我的節點由節點管理器生成

/tmp/hadoop-vikram/nm-local-dir/usercache/vikram/appcache/application_1490062699498_0005/container_1490062699498_0005_01_000003/ 

我看到下

/tmp/hadoop-vikram/nm-local-dir/usercache/vikram/appcache/application_1490062699498_0005/filecache/10/test.tar.gz 

預期的文件,但我想檢索路徑test.tar.gz在應用程序代碼。

我可以找到以下

URL input = getClass().getClassLoader().getResource("jar-file-name"); 
+0

¿爲什麼不把這個tar保存在nfs中? – jedijs

+0

@jedijs我想利用紗線執行的文件分發 – user3401493

回答

0

我不認爲你正在做依託容器的位置是正確的路徑罐子使用的文件。對於次要集合,我建議您使用distributed cache使資源在所有任務節點上可用。它會自動將文件上傳到所有容器節點,並使其適用於所有映射器 - 縮減器。

但是,如果您的文件足夠大,這應該是一個偉大的空間命中,因爲數據將被複制到實際任務將執行的每個節點。爲了改善這一點,您可以將文件直接放入文件系統,並使用更大的複製因子(例如10(取決於羣集中節點的數量)),以提高其可用性。然後在您的任務中,您將能夠直接下載它,與分佈式緩存方法相比,這將顯着節省您的空間,但成本將是非本地讀取的帶寬。你可以玩這個來找到最佳的複製次數。

+0

感謝Alex的回覆。我的文件大小不大,但只有幾百克。我們已經使用LocalResource實現將文件分發到容器節點。但不知何故在一些容器上這個文件丟失了。 – user3401493

+0

@ user3401493可能你錯過了那裏的東西。這是正確的方法,我建議您嘗試使用LocalResource找出問題的原因,而不是直接訪問容器 – Alex

相關問題