Hadoop Streaming例子(python)
以前总是用java写一些MapReduce程序现举一个例子使用Python通过Hadoop Streaming来实现Mapreduce。
任务描述:
HDFS上有两个目录/a和/b,里面数据均有3列,第一列都是id,第二列是各自的业务类型(这里假设/a对应a,/b对应b),第三列是一个json串。各举一例:
/a的一行:1234567 a {"name":"jiufeng","age":"27","sex":"male","school":"","status":["111","000","001"],...}
/b的一行:12345 b {"a":"abc","b":"adr","xxoo":"e",...}
要查找在/a中出现"status"且有"111"状态,而且要再/b中有这个id的所有id列表。
那么来吧,首先需要mapper来提取/a中满足"status"有"111"状态的id和第二列"a"、/b中所有行的前两列,python代码如下,mapper.py:
#!/usr/bin/env python
#coding = utf-8 import json
import sys
import traceback
import datetime,time def mapper():
for line in sys.stdin:
line = line.strip()
id,tag,content = line.split('\t')
if tag == 'a':
jstr = json.loads(content)
active = jstr.get('status',[])
if "" in active:
print '%s\t%s' %(id,tag)
if tag == 'b':
print '%s\t%s' % ( id,tag) if __name__ == '__main__':
mapper()
这个mapper是从表中输入中提取数据,然后将满足条件的数据通过标准输出。然后是reducer.py:
#!/usr/bin/env python
#coding = utf-8 import sys
import json def reducer():
tag_a = 0
tag_b = 0
pre_id = ''
for line in sys.stdin:
line = line.strip()
current_id,tag = line.split('\t')
if current_id != pre_id:
if tag_a==1 and tag_b==1:
tag_a = 0
tag_b = 0
print '%s' % pre_id
else :
tag_a = 0
tag_b = 0
pre_id = current_id
if tag == 'a':
if tag_a == 0:
tag_a = 1
if tag == 'b':
if tag_b == 0:
tag_b = 1
if tag_b==1 and tag_b==1:
print '%s' % pre_id if __name__ == '__main__':
reducer()
一个reducer可以接受N多行数据,不像java那样的一行对应一个key然后多个value,而是一个key对应一个value,但好在相同key的行都是连续的,只要在key变化的时候做一下处理就行。
然后安排让hadoop执行,schedule.py:
#!/usr/bin/env python
#coding = utf-8 import subprocess, os
import datetime def mr_job():
mypath = os.path.dirname(os.path.abspath(__file__))
inputpath1 = '/b/*'
inputpath2 = '/a/*'
outputpath = '/out/'
mapper = mypath + '/mapper.py'
reducer = mypath + '/reducer.py'
cmds = ['$HADOOP_HOME/bin/hadoop', 'jar', '$HADOOP_HOME/contrib/streaming/hadoop-streaming-1.2.1.jar',
'-numReduceTasks', '',
'-input', inputpath1,
'-input', inputpath2,
'-output', outputpath,
'-mapper', mapper,
'-reducer', reducer,
'-file', mapper,
'-file', reducer,]
for f in os.listdir(mypath):
cmds.append(mypath + '/' + f)
cmd = ['$HADOOP_HOME/bin/hadoop', 'fs', '-rmr', outputpath]
subprocess.call(cmd)
subprocess.call(cmds) def main():
mr_job() if __name__ == '__main__':
main()
schedule.py就是执行MapReduce的地方通过调用hadoop-streamingXXX.jar会通过调用shell命令来提交job,另外可以配置一下参数,shell命令会将制定的文件上传到hdfs然后分发到各个节点执行。。。$HADOOP_HOME就是hadoop的安装目录。。。mapper和reducer的python脚本的名字无所谓,方法名无所谓因为在配置shell执行命令时已经指定了
上述是一个很简单的python_hadoop-streamingXXX例子。。。。
Hadoop Streaming例子(python)的更多相关文章
- hadoop streaming anaconda python 计算平均值
原始Liunx 的python版本不带numpy ,安装了anaconda 之后,使用hadoop streaming 时无法调用anaconda python , 后来发现是参数没设置好... 进 ...
- 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试
相关随笔: Hadoop-1.0.4集群搭建笔记 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控 用python + hadoop streami ...
- 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控
写在前面 相关随笔: Hadoop-1.0.4集群搭建笔记 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 用python + hado ...
- hadoop streaming 编程
概况 Hadoop Streaming 是一个工具, 代替编写Java的实现类,而利用可执行程序来完成map-reduce过程.一个最简单的程序 $HADOOP_HOME/bin/hadoop jar ...
- hadoop streaming编程小demo(python版)
大数据团队搞数据质量评测.自动化质检和监控平台是用django,MR也是通过python实现的.(后来发现有orc压缩问题,python不知道怎么解决,正在改成java版本) 这里展示一个python ...
- 用python + hadoop streaming 编写分布式程序(三) -- 自定义功能
又是期末又是实训TA的事耽搁了好久……先把写好的放上博客吧 相关随笔: Hadoop-1.0.4集群搭建笔记 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍 ...
- Hadoop Streaming
原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/streaming.html Hadoop Streaming Streaming工作原理 将文件打包到提交的 ...
- Hadoop Streaming框架学习(一)
Hadoop Streaming框架学习(一) Hadoop Streaming框架学习(一) 2013-08-19 12:32 by ATP_, 473 阅读, 3 评论, 收藏, 编辑 1.Had ...
- Hadoop Streaming Command Details and Q&A
Hadoop Streaming Hadoopstreaming is a utility that comes with the Hadoop distribution. The utilityal ...
随机推荐
- 20135316王剑桥 linux第七周课实验笔记
第十章.程序间的交互和通信 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程.输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到I/O设备. 输入:从I/O拷贝到主存,输出:从 ...
- Linux c实现服务端与客户端聊天
主要利用socket通信实现,具体代码如下 客户端: #include <stdio.h> #include <stdlib.h> #include <string.h& ...
- 第一周Web类WriteUp
Forms 看到这题目第一反应就是先抓个包试试,抓包之后效果如图所示 看到一个showsource=0,那就想着把它改成1看看会出现什么效果,改成1之后forward,发现网页上变成了这个样子 根据这 ...
- PCA和LDA降维的比较
PCA 主成分分析方法,LDA 线性判别分析方法,可以认为是有监督的数据降维.下面的代码分别实现了两种降维方式: print(__doc__) import matplotlib.pyplot as ...
- Android空闲教室查询-资料
这是去年某课程的一个称作“研究型学习”的东西的报告的展示PPT,有点失败的是这个APP的名字起得不太好……PPT上的功能都实现了,其他功能都没有.一年了,程序都忘差不多了,也暂时没有时间分享.就先把P ...
- node.js乱码问题【WebStorm环境】
昨天看了一个晚上的jade视频, 感觉就是我想要的东西, 相见恨晚, 赶紧在WebStorm这个IDE中,写代码,测试 /** * Created by xa87 on 2016/1/22. */ v ...
- 删除 windows 下 node_modules 过深的目录
本文同步自我的个人博客:http://www.52cik.com/2015/11/13/node-modules-del.html 说到 node 的模块,确实既好用又蛋疼.相信无数人吐槽 node_ ...
- iOS 自定义控件开发(上)
工作需要,最近在进行iOS方面的图表工作.找了很多第三方库都无法实现效果,所以决定自己写一个控件. <iOS 自定义控件开发(上)> <iOS 自定义控件开发(中)> #0 目 ...
- Python数据可视化编程实战——导入数据
1.从csv文件导入数据 原理:with语句打开文件并绑定到对象f.不必担心在操作完资源后去关闭数据文件,with的上下文管理器会帮助处理.然后,csv.reader()方法返回reader对象,通过 ...
- grootJs的vm结构
按看这段代码生成的vm groot.view("myview", function (vm, ve) { vm.say = "hello word!"; }) ...