Hadoop实战2:MapReduce编程-WordCount实例-streaming-python环境
这是搭建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环境的更多相关文章
- Hadoop实战3:MapReduce编程-WordCount统计单词个数-eclipse-java-ubuntu环境
之前习惯用hadoop streaming环境编写python程序,下面总结编辑java的eclipse环境配置总结,及一个WordCount例子运行. 一 下载eclipse安装包及hadoop插件 ...
- Hadoop实战5:MapReduce编程-WordCount统计单词个数-eclipse-java-windows环境
Hadoop研发在java环境的拓展 一 背景 由于一直使用hadoop streaming形式编写mapreduce程序,所以目前的hadoop程序局限于python语言.下面为了拓展java语言研 ...
- MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行
上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...
- 【Big Data - Hadoop - MapReduce】初学Hadoop之图解MapReduce与WordCount示例分析
Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS) ...
- 初学Hadoop之图解MapReduce与WordCount示例分析
Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS) ...
- Hadoop实战训练————MapReduce实现PageRank算法
经过一段时间的学习,对于Hadoop有了一些了解,于是决定用MapReduce实现PageRank算法,以下简称PR 先简单介绍一下PR算法(摘自百度百科:https://baike.baidu.co ...
- Python实现MapReduce,wordcount实例,MapReduce实现两表的Join
Python实现MapReduce 下面使用mapreduce模式实现了一个简单的统计日志中单词出现次数的程序: from functools import reduce from multiproc ...
- hadoop之mapreduce编程实例(系统日志初步清洗过滤处理)
刚刚开始接触hadoop的时候,总觉得必须要先安装hadoop集群才能开始学习MR编程,其实并不用这样,当然如果你有条件有机器那最好是自己安装配置一个hadoop集群,这样你会更容易理解其工作原理.我 ...
- Hadoop MapReduce编程 API入门系列之wordcount版本1(五)
这个很简单哈,编程的版本很多种. 代码版本1 package zhouls.bigdata.myMapReduce.wordcount5; import java.io.IOException; im ...
随机推荐
- Selenium2学习-028-WebUI自动化实战实例-026-获取页面元素值或者元素属性值
在自动化脚本编写过程中,经常需要获取页面元素的文本进行判断,以便对于不同的文本进行不同的处理.比如:很多的购物网站,加入购物车的按钮是有多个状态的(加入购物车.到货通知.暂不销售等),那么在实际的操作 ...
- windows10 环境下theano安装
前言:我用的是 Anaconda2 安装python 1. 在Anaconda prompt中输入 conda install mingw libpython 2. 添加环境变量 C:\Anacond ...
- 删除SSMS中保存的帐户信息
通常我们在对象资源管理器中连接服务器时,会发现在服务器名称下保存有之前的实例信息.随着连接增多,要找某个连接还得费劲.sql2012:此时可以删除C:\Users\Administrator\AppD ...
- RFS_点击button按钮之后,RFS出现卡死的问题
[html代码] <html> <head> <title> 主窗口 </title> </head> <body> <d ...
- 三层交换配置VLAN+DHCP+ACL
使用思科模拟软件Cisco Packet Tracer Student,软件功能有限,只能架设简单的网络架构,适合初学者使用.
- .NET反射(Reflection)机制
C#编译后的文件主要由IL代码和元数据组成,元数据为.NET组件提供了丰富的自描述特性,它使得我们可以在代码运行时获知组件中的类型等重要的信息.C#中这是通过一种称作映射(Reflection)的机制 ...
- mysql centeros 安装
http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html linux mysql允许远程连接 1.登录数据库:my ...
- 将hadoop源代码导入eclipse
1. 安装JDK,eclipse,下载hadoop源代码并解压到某一个目录. 2. 安装maven,将bin目录添加到PATH环境变量中. 3. 安装protobuf2.5.0,将protoc-2.5 ...
- MFC对话框Dialog控件处理程序handler因为public修饰符导致无法访问
比如说你的Dialog有一个Button名为Confirm,对应IDC_CONFIRM,处理程序handler为OnConfirm 那么OnConfirm必须是protected属性,如果是publi ...
- 导出iPhone中安装的APP的iPA文件
1.让iPhone连接电脑,打开iTunes,选择本电脑,然后点立即备份. 2.完成上一步的操作之后,选择应用,在iTunes中就会列出你从App Store中下载的应用,自己连接真机调试的应用是没有 ...