使用
python
写
MapReduce
的
“
诀窍
”
是利用
Hadoop
流的
API
,通过
STDIN(
标准输入
)
、
STDOUT(
标准输出
)
在
Map
函数和
Reduce
函数之间传递
数据。
我们唯一需要做的是
利用
Python
的
sys.stdin
读取输入数据,并把我
们的输出传送给
sys.stdout
。
Hadoop
流将会帮助我们处理别的任何事情。
1.1 Map
阶段:
mapper.py
在这里,我们假设把文件保存到
hadoop-0.20.2/test/code/mapper.py
#!/usr/bin/env python
import sys
for line in sys.stdin:
line = line.strip()
words = line.split()
for word in words:
print "%s\t%s" % (word, 1)
文件从
STDIN
读取文件。把单词切开,并把单词和词频输出
STDOUT
。
Map
脚本不会计算单词的总数,
而是输出
1
。
在我们的例子中,
我们让随后
的
Reduce
阶段做统计工作。
为了是脚本可执行,增加
mapper.py
的可执行权限
chmod +x hadoop-0.20.2/test/code/mapper.py
1.2 Reduce
阶段:
reducer.py
在这里,我们假设把文件保存到
hadoop-0.20.2/test/code/reducer.py
#!/usr/bin/env python