2012-06-05 42 views
0

我正在Hadoop中編寫一個Java MapReduce程序,並且每個Reducer都需要訪問一個靜態XML文件(包含將規則應用於值列表的一些業務邏輯)。我決定將這個文件存儲在分佈式緩存中,然後利用分佈式緩存API在每個縮減器中訪問它(序列化它)。我還沒有實現,但是在HDFS /分佈式模式下使用這個功能時,API看起來很簡單。但是,爲了測試目的,是否可以將其用於僞分佈式獨立模式?它將如何工作?我可以在獨立模式下使用Hadoop的分佈式緩存嗎?

另外,在每個reducer中序列化文件是一個壞主意嗎?對於向其他分發「全局靜態數據」的方法,我願意提供建議。

謝謝!

+0

看到這個 - http://stackoverflow.com/questions/3210222/distributed-cache。是分佈式緩存旨在爲所有任務提供一些數據 –

回答

1

是的,你可以 - 它的工作方式與真實羣集中的方式相同。

如果分佈式緩存不固定,這是一個好主意。另一種選擇是將數據打包到包含作業代碼的jar文件中,在這種情況下,當您必須更改XML時,它不會很靈活(您仍然可以更改jar,但這不是一個乾淨的方法來解決它)

+0

謝謝Arnon。用什麼文件數據大小你會說使用分佈式緩存成爲一個壞主意?我將存儲包含約140K行(20 MB)的文件,這些文件將由映射器和縮減器進行搜索。我將在Mapper或Reducer的configure()方法中將它加載(通過BufferedReader)到HashMap中,以便每個map()調用都可以在其中查找元素。這仍然是分佈式緩存(或濫用)的正常使用嗎? – wsb3383

+0

你可以衡量你的表現 - 但在我看來,它看起來像一個合理的使用。如果你將信息存儲在其他地方(像memcached,hbase等真正的分佈式緩存),你的IO成本會更高 - 就像hadoop的分佈式緩存一樣,每臺機器只需複製一次文件,其他選項中的每個地圖都會讀取文件網絡。 –

+0

我想在獨立環境中使用DistributedCache。我可以添加這些文件,並且不會拋出任何異常。當我試圖獲取這些文件時,它會拋出null。你能幫忙嗎? –