2013-04-16 76 views
2

我想捕獲一些關於 自定義分區程序(或甚至默認的HashPartitioner)中的鍵及其值的信息。Hadoop分區程序中的自定義計數器

我可以通過訪問「上下文」變量在映射器和縮減器中使用自定義計數器。 但是,在分區程序中,無法訪問「上下文」變量。

有什麼辦法可以: -1-獲得對分區程序中的「上下文」變量的訪問權嗎? 或 -2-如何向分區添加計數器?

謝謝。

回答

1

通過分區程序的每個鍵/值對(1)都由映射器寫入上下文或(2)將傳遞給reducer的reduce()方法。您可以將代碼放在這兩個位置中的任意一個位置,以將自定義計數器寫入並遞增到上下文。

如果您必須在分區器中編寫代碼,請嘗試使分區器實現JobConfigurable。當分區器第一次實例化時,應該讓hadoop用JobConf對象調用分區器。您可以將信息放入配置中(例如順序或文本文件的名稱以輸出信息),並以此方式將其傳遞到分區器。

+0

謝謝克里斯的答案。如您所說,可以在映射器或減速器上添加計數器。但是我真正需要的是這些值的攔截器,而無需訪問映射器或Reducer代碼。有什麼方法可以在Hadoop中編寫攔截器? – user2262938

+0

已更新的答案。 –

0

無法訪問分區程序中的上下文(並作爲計數器)。

不確定爲什麼你不能像Chris Gerken所建議的那樣在映射器中添加邏輯,但是類似/可選的方法是創建一個映射包裝類,其中創建一個Mapper.Context包裝類,然後委託給你想要的Mapper類的實際映射方法與這個包裝的上下文 - 然後你可以攔截context.write方法調用,並做你想做的事 - 與剛更新mapper代碼沒有什麼不同。

相關問題