用Python实现基于Hadoop Stream的mapreduce任务
用Python实现基于Hadoop Stream的mapreduce任务
因为Hadoop Stream的存在,使得任何支持读写标准数据流的编程语言实现map和reduce操作成为了可能。
为了方便测试map代码和reduce代码,下面给出一个Linux环境下的shell 命令:
cat inputFileName | python map.py | sort | python map.py > outputFileName
可以轻松的在没有hadoop 环境的机器上进行测试。
下面介绍,在Hadoop环境中的,如何用Python完成Map和Reduce两个任务的代码编写。
任务示例
这里依然采用大部分讲述MapReduce文章中所采用的WordCount任务作为示例。改任务需要统计给的海量文档中,各种单词出现的次数,其实就是统计词频(tf)。
map.py
import sys
for line in sys.stdin:
words = line.strip().split()
for word in words:
print("{}\t{}".format(word, 1))
reduce.py
import sys
word, curWord, wordCount = None, None, 0
for line in sys.stdin:
word, count = line.strip().split('\t')
count = int(count)
if word == curWord: wordCount += count
else:
print("{}\t{}".format(word, wordCount))
curWord, wordCount = curWord, count
if word and word == curWord:
print("{}\t{}".format(word, wordCount))
可以在单机上执行前面所述的命令没有问题后,然后执行下面的shell命令
hadoop jar $HADOOP_STREAMING \
-D mapred.job.name="自定义的job名字" \
-D mapred.map.tasks=1024 \
-D mapred.reduce.tasks=1024
-files map.py \
-files reduce.py \
-mapper "python map.py" \
-reducer "python reduce.py" \
-input /user/rte/hdfs_in/* \
-output /user/rte/hdfs_out
夜空中最亮的星,照亮我前行
分类:
日常装逼系列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-03-17 Emacs 安装与体验
2015-03-17 CSUOJ 1525 Algebraic Teamwork
2015-03-17 CSUOJ 1531 Jewelry Exhibition
2015-03-17 CSUOJ 1532 JuQueen