使用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位置查看输出