zoukankan      html  css  js  c++  java
  • Hadoop:使用Mrjob框架编写MapReduce

    Mrjob简介

    Mrjob是一个编写MapReduce任务的开源Python框架,它实际上对Hadoop Streaming的命令行进行了封装,因此接粗不到Hadoop的数据流命令行,使我们可以更轻松、快速的编写MapReduce任务。

    Mrjob具有如下特点:

    代码简洁,map及reduce函数通过一个Python文件就可以搞定;
    支持多步骤的MapReduce任务工作流;
    支持多种运行方式,包括内嵌方式、本地环境、Hadoop、远程亚马逊;
    支持亚马逊网络数据分析服务Elastic MapReduce(EMR);
    调试方便,无需任何支持环境。

    Mrjob编写MapReduce

    安装Mrjob

    easy_install mrjob

    功能:实现一个统计文本文件(/root/hadooptest/input.txt)中所有单词出现频率的功能。Mrjob通过mapper()和reducer()方法实现MR操作。

    【/root/hadooptest/input.txt】

    foo foo quux labs foo bar quux abc bar see you by test welcome test
    abc labs foo me python hadoop ab ac bc bec python

    MapReduce脚本

    Mrjob通过Python的yield机制将函数变成一个生成器,通过不断调用next()去实现key:value的初始化或运算操作。

    【/root/hadooptest/word_count.py】

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    from mrjob.job import MRJob
    
    class MRWordCounter(MRJob):
        def mapper(self,key,line): #接收每一行的输入数据,处理后返回一堆key:value,初始化value值为1
            for word in line.split():
                yield word,1
    
        def reducer(self,word,occurrences): #接收mapper输出的key:value对进行整合,把相同key的value做累加(sum)操作后输出
            yield word,sum(occurrences)
    
    if __name__ == '__main__':
    MRWordCounter.run()

     Mrjob运行方式

    Mrjob支持4种运行方式:内嵌(-r inline)、本地(-r local)、Hadoop(-r hadoop)、Amazon EMR(-r emr)

    内嵌

    特点是调试方便,启动单一进程模拟任务执行状态及结果,Mrjob默认以内嵌方式运行,选项可以不写。输出可以用‘>’或‘-o’。下面两条命令是等价的

    #python word_count.py -r inline > output.txt
    python word_count.py -r inline -o output.txt
    "ab" 1
    "abc" 2
    "ac" 1
    "bar" 2
    "bc" 1
    "bec" 1
    "by" 1
    "foo" 4
    "hadoop" 1
    "labs" 2
    "me" 1
    "python" 2
    "quux" 2
    "see" 1
    "test" 2
    "welcome" 1
    "you" 1
    结果

    本地

    用于本地模拟Hadoop调试,与内嵌方式的区别是启动了多进程执行每一个任务

    python word_count.py -r local -o output.txt
    "ab" 1
    "abc" 2
    "ac" 1
    "bar" 2
    "bc" 1
    "bec" 1
    "by" 1
    "foo" 4
    "hadoop" 1
    "labs" 2
    "me" 1
    "python" 2
    "quux" 2
    "see" 1
    "test" 2
    "welcome" 1
    "you" 1
    结果

    Hadoop

    用于Hadoop环境,支持Hadoop运行调度控制参数。

    python word_count.py -r hadoop --jobconf mapreduce.job.priority=VREY_HIGH --jobconf mapreduce.job.maps=2 --jobconf mapreduce.job.reduces=1 -o hdfs:///output/hadoop hdfs:///user/hadoop/input
    
    #--jobconf mapreduce.job.priority=VREY_HIGH 指定任务调度优先级(VREY_HIGH|HIGH)
    #--jobconf mapreduce.job.maps=2 Map任务个数限制
    #--jobconf mapreduce.job.reduces=1 Reduce任务个数限制
    hadoop fs -ls /output/hadoop #查看/output/hadoop下的文件
    Found 2 items
    -rw-r--r-- 1 root supergroup 0 2016-08-23 18:33 /ouput/hadoop/_SUCCESS
    -rw-r--r-- 1 root supergroup 144 2016-08-23 18:33 /ouput/hadoop/part-00000
    
    hadoop fs -cat /output/hadoop/part-00000 #查看分析结果
    "ab" 1
    "abc" 2
    "ac" 1
    "bar" 2
    "bc" 1
    "bec" 1
    "by" 1
    "foo" 4
    "hadoop" 1
    "labs" 2
    "me" 1
    "python" 2
    "quux" 2
    "see" 1
    "test" 2
    "welcome" 1
    "you" 1
    结果

    参考资料:

    根据刘天斯《Python自动化运维技术与最佳实践》整理

  • 相关阅读:
    上海电信 华为HG8240R 光猫 破解
    RedSn0w 0.9.10b5 越狱iphone 4 ios 5.0.1 Cydia闪退解决
    用IIS 7.5 Express代替IIS和开发工具vs自带的ASP.NET Development Server
    远程桌面连接问题
    Enterprise Library 5.0 Hands On Lab(1):数据访问程序块(一)
    [Havok] Havok Physics物理引擎的学习入门
    [设计模式] 深入浅出单实例Singleton设计模式(Java版)
    [C#] MD5 加密的具体流程
    [轻音乐] 理查德·克莱德曼专辑[8CD]
    [SEO] [DeDe]优化SEO
  • 原文地址:https://www.cnblogs.com/MacoLee/p/5805656.html
Copyright © 2011-2022 走看看