2012-06-19 69 views
2

我想編寫一個hadoop應用程序,它將輸入文件和包含多個文件的輸入文件夾作爲輸入。單個文件包含需要從文件夾中的其他文件中選擇和提取記錄的鍵。我怎樣才能做到這一點?Hadoop MapReduce:讀取文件並將其用作輸入來過濾其他文件

順便說,我有一個正在運行的hadoop MapReduce的應用程序,它需要輸入一個的文件夾路徑,不處理並寫出結果到不同的文件夾中。

我種的套牢如何使用一個文件來得到需要進行選擇,並在特定目錄中提取出來的其他文件的密鑰。包含密鑰的文件是一個大文件,因此它不能直接放入主內存。我該怎麼做?

Thx!

回答

1

在運行作業之前,我會先閱讀單個文件。將所有需要的密鑰存儲在作業配置中。然後,您可以編寫作業以從文件夾中讀取文件。在您的映射器/減速器setup(context)方法中,從配置中讀出密鑰並將它們全局存儲,以便您可以在mapreduce期間讀取它們。

+1

如果密鑰的數量很大,請考慮使用DistributedCache或-files通用選項,然後將密鑰加載到映射器設置階段的內存中 –

+0

@Christian:我怎樣才能使它們成爲全局的?將所有必需的密鑰存儲在作業配置中意味着什麼?我怎麼能做到這一點? – Bob

2

如果密鑰的數量太大而不適合內存,則考慮將密鑰集加載到布隆過濾器(適當的大小以產生低誤報率),然後處理這些文件,檢查每個密鑰的成員身份在bloom過濾器(Hadoop帶有BloomFilter類,檢查Javadocs)。

您還需要進行第二MR工作做最後的確認(最有可能在減少側連接),以消除來自第一作業輸出的誤報。

相關問題