Hadoop Streaming運行Python腳本程序


1.Streaming簡介
Streaming工具允許用戶使用非java的語言來編寫map和reduce函數。Hadoop的Streaming使用Unix標准作為Hadoop和應用程序之間的接口,所以我們可以使用任何編程語言通過標准輸入/輸出來寫MapReduce程序。詳細的用法可以參考這篇博文:  http://dongxicheng.org/mapreduce/hadoop-streaming-programming/。   接下舉一個Python腳本編寫的WordCount的例子:
2.腳本程序
Mapper:

Reducer:

 
注意腳本程序需要有足夠的權限,使用命令:chmod a+x Mapper.py;chmod a+x Reducer.py.
3.測試
在Hadoop集群上運行之前,先在本地測試一下,腳本程序是否可以運行
測試命令:cat test.txt | 'python Mapper.py' | 'python Reducer.py'
我的test.txt內容是:

我的測試結果是:

4.Hadoop集群上運行
首先將test.txt上傳到HDFS上,hadoop fs -put test.txt py_input
命令: hadoop jar /usr/local/hadoop/hadoop-1.0.2/contrib/streaming/hadoop-streaming-1.0.2.jar -input py_input -output py_output -mapper 'python Mapper.py' -reducer 'python Reducer.py' -file Mapper.py -file Reducer.py
作業完成之后,查看輸出結果:
hadoop fs -cat py_output/part-00000

大功告成!
5.結語
我之前用Hadoop Streaming工具運行了好多次MapReduce程序,Maper,Reducer或是python寫的或是shell腳本寫的,不過都失敗了,出現了各式各樣的問題。之前我的運行hadoop作業命令是這樣寫的: hadoop jar /usr/local/hadoop/hadoop-1.0.2/contrib/streaming/hadoop-streaming-1.0.2.jar -input py_input -output py_output -mapper Mapper.py -reducer Reducer.py -file Mapper.py -file Reducer.py,與上面的命令的區別在於 -mapper部分,如果不添加上python,hadoop streaming並不會執行Mapper.py,Reducer.py,報出IOException錯誤。所以運行hadoop streaming 作業時一定要確保map、reduce程序運行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM