你好,游客 登录
背景:
阅读新闻

Hadoop:统计文本中单词熟练MapReduce程序

[日期:2016-06-28] 来源:博客园精华区  作者: [字体: ]

这是搭建hadoop环境后的第一个MapReduce程序;

基于python的脚本;

Hadoop

1 map.py文件,把文本的内容划分成单词:

#!/bin/python
import sys

for line in sys.stdin:
    data_list = line.strip().split()
    for i in range(0, len(data_list)):
        print data_list[i]
        


2 reduce文件,把统计单词出现的次数;

#!/bin/python
import sys
word_dict = {}
for line in sys.stdin:
    v = line.strip()
    if word_dict.has_key(v):
        word_dict[v] += 1
    else:
        word_dict[v] = 1

for key in word_dict:
    print key + "\t" + str(word_dict[key])
        

3 调用脚本:指定输出目录 OUTPUT ;

调用支持多语言的streaming的编程环境,参数-input是输入的log文件,为了用mapreduce模式统计这个文件每个单词出现的次数;-output是输出路径;-mapper是mapper编译 此处是python语言;-reducer是reduce编译语法;-file是mapper文件路径和reduce文件路径;-numReduceTaskers 是使用的子tasker数目,这里是3,代表分成了3了tasker分布式的处理计数任务;

#!/bin/bash

OUTPUT=/home/apm3/outdir
hadoop fs -rmr $OUTPUT
hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.7.2.jar \
-input /opt/mapr/logs/warden.log \
-output $OUTPUT \
-mapper "python map.py" \
-reducer "python reduce.py" \
-file map.py \
-file reduce.py \
-numReduceTasks 3  
 

bash -x start.sh 会在输出路径中生成三个输出文件,及三分ReduceTasks 输出的结果;(MapReduce 模式主要做了shuffle和sort任务,shuffle是按照hashkey分配单词到子tasker中,而sort是排序的功能。)

代码下载: https://github.com/rongyux/Hadoop_WordCount





收藏 推荐 打印 | 录入: | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款