2014-11-04 68 views
1

我想知道在MapReduce應用程序中讀取Java屬性文件的標準做法以及在提交(開始)作業時如何將位置傳遞給它。 在常規Java應用程序中,您可以將該位置作爲JVM系統屬性(-D)或主方法的參數傳遞給屬性文件。 MapReduce作業的最佳選擇(標準實踐)是什麼?一些好的例子會很有幫助。讀取Hadoop MapReduce應用程序中的Java屬性文件

回答

2

最好的選擇是使用DistributedCache,但它可能不是標準的方法。可以有其他方法。但到目前爲止,我還沒有看到任何其他代碼。

這個想法是將文件添加到緩存中,並在setup map/reduce的方法內讀取並將其加載到PropertiesMap中。如果你需要片段,我可以添加。

哦,我記得,我的朋友JtheRocker使用了另一種方法。他將文件的全部內容與Configuration對象中的一個鍵相關聯,然後在setup上得到它的值,然後解析&加載Map中的對。在這種情況下,文件讀取是在驅動程序上完成的,而以前是在任務方面。雖然它適用於小文件,看起來更清潔,但正統人士可能根本不喜歡污染conf

我想看看,其他職位帶出。

+0

感謝您的回答!這似乎是一個好方法。如果我錯了,請糾正我的錯誤,但似乎仍然需要對文件的位置進行硬編碼,以便將其添加到DistributedCache。你知道這是否有任何解決方法嗎? – Frank 2014-11-05 19:26:58

+0

u'll將propFilePath添加到驅動程序緩存中,所以只需將它作爲命令行參數傳遞,不需要硬編碼。現在做一些類似'conf.set(「my.prop.file.name」,new Path(propFilePath).getName()。toString)'來獲取map/reduce中文件名爲my.prop.file的關鍵字。名字'你必須有硬編碼。 – blackSmith 2014-11-06 03:56:56

+0

謝謝!這是迄今爲止我看到的最好的方法。 – Frank 2014-11-06 18:26:53

相關問題