使用Python實作Map Reduce程式
起因
想處理一些較大的檔案,單機運作效率太低,多線程也達不到要求,最終采用了叢集的處理方式。
詳細的讨論可以在v2ex上看一下。
步驟
- MapReduce程式要分為兩部分,即Map和Reduce部分,是以Python代碼也是要分為兩部分
- 程式運作
hadoop jar contrib/streaming/hadoop-streaming-1.1.2.jar
-mapper /usr/local/hadoop/mapper.py
-reducer /usr/local/hadoop/reducer.py
-input book/*
-output book-output
- jar檔案要在本機上找到,可以使用find指令搜尋
- input和output目錄要在hdfs上
- mapper和reducer代碼放在本機即可
- Map 和 Reduce間傳遞資料通過STDIN (标準輸入)和STDOUT (标準輸出)
程式執行個體
- 可以寫一個什麼都不做的程式,即獲得輸入,然後輸出
- mapper.py如下
import sys
for line in sys.stdin:
print line
- reducer.py如下
import sys
for line in sys.stdin:
print line
- 賦予代碼可運作權限 chmod即可
- 然後運作即可在output位置檢視輸出
參考
- CSDN