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

  基于hadoop streaming的python的脚本;

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

#!/usr/bin/pythonimport sys

for line in sys.stdin:    line = line.strip()    words = line.split()    for word in words:        print('%s\t%s' % (word, 1))

  

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

#!/usr/bin/pythonimport sys

last_key = Nonerunning_total = 0

for input_line in sys.stdin:    input_line = input_line.strip()    this_key, value = input_line.split("\t", 1)    value = int(value)

    if last_key == this_key:        running_total += value    else:        if last_key:            print ("%s\t%d" % (last_key, running_total))        running_total = value        last_key = this_keyif last_key == this_key:    print( "%s\t%d" % (last_key, running_total) )
        

  

  3 本地测试下python脚本,结果是否正确:

cat in.txt | python map.py | python reduce.py

  4 Hadoop调用脚本:指定输出目录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-.jar \
-input /opt/mapr/logs/warden.log \
-output $OUTPUT \
-mapper "python map.py" \
-reducer "python reduce.py" \
-file map.py \
-file reduce.py \
-numReduceTasks
 

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

  5 MapR里执行程序,run.sh:

hadoop fs -rm -r /user/rongyu/output

hadoop jar hadoop-streaming-2.7.0-mapr-1602.jar \-input "/user/input/*" \-output "/user/rongyu/output" \-file "/home/mapr/Develop/rongyu/mapreduce/map.py"-mapper "python map.py" \-file "/home/mapr/Develop/rongyu/mapreduce/reduce.py"-reducer "python reduce.py" \-numReduceTasks 3

  6 查看结果

  查看输出目录: 命令 $ hadoop fs -ls /user/rongyu/output/

Found  items
-rwxr-xr-x    mapr mapr           -- : /user/rongyu/output/_SUCCESS
-rwxr-xr-x    mapr mapr     -- : /user/rongyu/output/part-
-rwxr-xr-x    mapr mapr     -- : /user/rongyu/output/part-
-rwxr-xr-x    mapr mapr     -- : /user/rongyu/output/part-

  输出三个输出文件之一part-00000:命令 $ hadoop fs -cat /user/rongyu/output/part-00000 | less

/nodes/apm1/services/nfs        17/opt/mapr/conf/cldb.conf        12/opt/mapr/hostid        6/services/cldb/master.  4/services/fileserver.   2/services/fileserver/master     1/services/hbmaster/apm2.        1/services/hbregionserver/apm4.  207/services/hbregionserver/master 1/services/historyserver/master  1/services/hoststats/apm2.       2/services/kvstore/apm3. 2/services/nfs.  22/services/nfs/master.   53/services_config/kvstore.       2/services_config/nodemanager.   3/services_config/nodemanager/apm4.      2600:00:00,3402   100:00:00,4710   100:00:01,6710   100:00:01,7916   100:00:01,9725   1

  7异常:

// :: INFO mapreduce.Job: Task Id : attempt_1469682745105_0016_m_000001_2, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code
    at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:)
    at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:)
    at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:)
    at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:)
    at org.apache.hadoop.mapred.YarnChild$.run(YarnChild.java:)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:)

  解决方案:在python脚本头部增加 #!/usr/bin/python  并且注意run.sh的-reducer -mapper等参数设置

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

Hadoop实战2:MapReduce编程-WordCount实例-streaming-python环境的更多相关文章

  1. Hadoop实战3:MapReduce编程-WordCount统计单词个数-eclipse-java-ubuntu环境

    之前习惯用hadoop streaming环境编写python程序,下面总结编辑java的eclipse环境配置总结,及一个WordCount例子运行. 一 下载eclipse安装包及hadoop插件 ...

  2. Hadoop实战5:MapReduce编程-WordCount统计单词个数-eclipse-java-windows环境

    Hadoop研发在java环境的拓展 一 背景 由于一直使用hadoop streaming形式编写mapreduce程序,所以目前的hadoop程序局限于python语言.下面为了拓展java语言研 ...

  3. MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行

    上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...

  4. 【Big Data - Hadoop - MapReduce】初学Hadoop之图解MapReduce与WordCount示例分析

    Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS) ...

  5. 初学Hadoop之图解MapReduce与WordCount示例分析

    Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS) ...

  6. Hadoop实战训练————MapReduce实现PageRank算法

    经过一段时间的学习,对于Hadoop有了一些了解,于是决定用MapReduce实现PageRank算法,以下简称PR 先简单介绍一下PR算法(摘自百度百科:https://baike.baidu.co ...

  7. Python实现MapReduce,wordcount实例,MapReduce实现两表的Join

    Python实现MapReduce 下面使用mapreduce模式实现了一个简单的统计日志中单词出现次数的程序: from functools import reduce from multiproc ...

  8. hadoop之mapreduce编程实例(系统日志初步清洗过滤处理)

    刚刚开始接触hadoop的时候,总觉得必须要先安装hadoop集群才能开始学习MR编程,其实并不用这样,当然如果你有条件有机器那最好是自己安装配置一个hadoop集群,这样你会更容易理解其工作原理.我 ...

  9. Hadoop MapReduce编程 API入门系列之wordcount版本1(五)

    这个很简单哈,编程的版本很多种. 代码版本1 package zhouls.bigdata.myMapReduce.wordcount5; import java.io.IOException; im ...

随机推荐

  1. 批量处理_cmd_matlab

    cd \ cd D:\Projects_Face_Detection\Datasets\afw d: dir /b/s/p/w *jpg > Path_Images.txt 1.ground_t ...

  2. jq 的连续动画

    var direction='right'; (function(){ var css={ 'left':'398px' }; if(direction==='right'){ direction=' ...

  3. install 命令用法详解

    install 命令用法详解 http://man.linuxde.net/install install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户.install命令和cp命令类似 ...

  4. 采用EaglePHP框架解决分布式集群服务器利用MEMCACHE方式共享SESSION数据的问题

    一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网 站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录 ...

  5. MVC项目实践,在三层架构下实现SportsStore-10,连接字符串的加密和解密

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  6. T4教程2 T4模版引擎之生成数据库实体类

    T4模版引擎之生成数据库实体类   在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中 ...

  7. Cache封装类

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...

  8. iOS - (调用系统本机发送短信功能)

    今天处理一个订单详情的界面,在订单详情页面上有联系方式(电话号码),在电话号码的右边有两图片,一个是电话样式的,一个是短信样式的,做为一名程序员(号称攻城师)一眼看下去就应该是一个 button,而不 ...

  9. 数据库报ORA-00600: 内部错误代码, 参数: [17059],并产生大量trace日志文件

    用户反馈数据库服务器磁盘空间使用耗尽. 登录服务器后查看,发现数据库产生大量的trace日志,并在alert日志中发现ora-600错误 alert日志信息: Fri Jul :: Errors ): ...

  10. Java基础之创建窗口——颜色和光标(TryWindow4)

    控制台程序. java.awt包中把SystemColor类定义为Color类的子类.SystemColor类封装了本机操作系统用于显示各种组件的标准颜色.如果要比较SystemColor值和Colo ...