2014-05-18 39 views
0

我的MapReduce程序的輸入是一組二進制文件。我希望能夠通過mrjob閱讀它們。經過一番研究,似乎我必須編寫一個定製的hadoop流媒體jar。有一種更簡單的方法嗎?或者這樣的罐子容易得到?更多細節如下。如何讀取mrjob中的二進制輸入文件?

輸入文件只是一個8字節整數的序列。我希望我的mapper函數一次調用2個整數。

我首先想到的,我可以轉換成鹹菜二進制格式,然後指定:

INPUT_PROTOCOL = mrjob.protocol.PickleProtocol。

但是,這給出了一個錯誤:無法解碼輸入。我也覺得mrjob只能使用pickle ascii格式(而不是二進制)。因爲否則,hadoop流將如何處理看起來像換行符的字節。 mrjob源代碼似乎證實了這一點。

另一種選擇是編寫一個定製的hadoop流媒體jar。 mrjob可以選擇指定這樣一個jar。但作爲一個不熟悉hadoop/Java的人,我更喜歡基於python的解決方案。

回答