2012-09-23 48 views
0

我見過一種技術(在stackoverflow上),用於使用zip文件執行hadoop streaming作業來存儲引用的python模塊。hadoop streaming with python modules

我在作業執行的映射階段出現了一些錯誤。我相當確定它與拉鍊模塊加載有關。

要調試腳本,我已經運行我的數據通過sys.stdin設置/ sys.stdout的使用命令行管到我的映射器和減速機等等這樣的事情:

頭inputdatafile.txt | ./mapper.py | sort -k1,1 | ./reducer.py

結果看起來不錯。

當我通過hadoop運行時,我開始遇到一些問題。即:映射器和簡化器失敗,整個hadoop作業完全失敗。

我的zip'd模塊文件包含* .pyc文件 - 是否會影響這件事?

另外我可以在哪裏找到在使用hadoop流式傳輸的地圖/縮減過程中產生的錯誤?

我已經使用-file命令行參數告訴hadoop zip'd模塊的位置以及映射器和reducer腳本的位置。

我沒有做任何瘋狂的配置選項來增加工作中使用的mappers和reducer的數量。

任何幫助將不勝感激!謝謝!

+0

...爲什麼你確定它是拉鍊模塊? –

+0

這是我第一次嘗試用zip'd模塊做這件事 - 作爲一個測試,我寫了一個非常簡單的映射器和簡化器,它除了讀取sys.stdin並寫入sys.stdout之外什麼都不做,而且工作得很好。在我使用zip'd模塊的腳本中添加的那一分鐘,映射器失敗了。我想通過命令行測試是否正在工作,並且hadoop正在使用我的簡約測試進行流式處理,然後它必須是我如何使用zip'd模塊。 –

+0

證明問題在於nltk.tokenize模塊。在hadoop-streaming上下文中使用該組件的任何幫助將不勝感激! –

回答

0

查看sent_tokenize的源代碼後,它看起來像nltk.sent_tokenize AND nltk.tokenize.sent_tokenize方法/函數依賴pickle文件(一個用於執行punkt標記化)來操作。

由於這是Hadoop流,您必須弄清楚將pickle文件放入添加到hadoop作業的jar中的zip'd代碼模塊的位置/如何放置。

底線?我建議使用RegexpTokenizer類來進行句子和詞級標記。