用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)。

import sys

for line in sys.stdin:
    words = line.strip().split()
    for word in words:
        print("{}\t{}".format(word, 1))

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

Original: https://www.cnblogs.com/crackpotisback/p/10548693.html
Author: 狂徒归来
Title: 用Python实现基于Hadoop Stream的mapreduce任务

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/10710/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总