Python开发MapReduce系列(二)Python实现MapReduce分桶
-jobconf mapred.reduce.tasks=2【此属性针对下面的例子都有效】
map.output.key.field.separator:指定map输出<key,value>对之后,其中key内部的分割符。
num.key.fields.for.partition:指定分桶时,按照分隔符切割后,用于分桶key所占的列数。
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner:前两个参数,要配合这个partitioner,没有的话会报错
例如:map.output.key.field.separator=,
num.key.fields.for.partition=2
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
一行数据:1 , 2 , 3 , 4 , 5(在这里1 2 之间的逗号是key内部的分隔符,并且1,2格式key的数据分为到同一桶)
stream.map.output.field.separator: map中的key与value的分隔符
stream.num.map.output.key.fields:指定map输出按照分隔符切割后,key所占有的列数,之前的是key,之后的是value
例如:map.output.key.field.separator=,
num.key.fields.for.partition=2
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
stream.map.output.field.separator=:
stream.num.map.output.key.fields=3
输入:1 , 2 , 3 , 4 , 5
1 , 2 , 2 , 4 , 5
1 , 3 , 4 , 4 , 5
1 , 3 , 3 , 4 , 5
输出part-00000:1 , 2 , 2 : 4 , 5
1 , 2 , 3 : 4 , 5
输出part-00000:1 , 3 , 3 : 4 , 5
1 , 3 , 4 : 4 , 5
1 , 2 是分桶值,1 , 2 , 3是key, 4 , 5是value。在这里1 2 之间的逗号是key内部的分隔符,1 , 2格式key的数据分为到同一桶
3.2 reduce阶段
stream.reduce.output.field.separator:reduce中key与value的分隔符
stream.num.reduce.output.key.fields:reduce中分隔符的位置
HADOOP_CMD="/home/hadoop/hadoop/bin/hadoop"
STREAM_JAR_PATH="/home/hadoop/hadoop/contrib/streaming/hadoop-streaming-1.2.1.jar"
INPUT_PATH_A="/a.txt"
INPUT_PATH_B="/b.txt"
OUTPUT_PATH="/output"
$HADOOP_CMD fs -rmr $OUTPUT_PATH #mapreduce在运行时,文件系统不能存在output目录(目录名字随意) $HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FILE_PATH_A,$INPUT_FILE_PATH_B\
-output $OUTPUT_SORT_PATH \
-mapper "python map.py" \
-reducer "python red.py" \
-file ./map.py \
-file ./red.py \
-jobconf mapred.reduce.tasks=2 \
-jobconf map.output.key.field.separator=, \
-jobconf num.key.fields.for.partition=2 \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-jobconf stream.map.output.field.separator=: \
-jobconf stream.num.map.output.key.fields=3
a.txt内容
1,2,3:hadoop
1,2,1:hadoop
1,2,5:hadoop
1,3,4:hadoop
1,2,9:hadoop
1,2,11:hadoop
1,2,7:hadoop
1,3,15:hadoop
1,3,14:hadoop
1,2,19:hadoop
1,2,0:java
1,2,2:java
1,2,8:java
1,3,4:java
1,2,2:java
1,2,14:java
1,2,12:java
1,3,1:java
1,3,5:java
1,2,3:java
4、结果输出
1,2,0:java
1,2,1:hadoop
1,2,2:java
1,2,2:java
1,2,3:hadoop
1,2,3:java
1,2,5:hadoop
1,2,7:hadoop
1,2,8:java
1,2,9:hadoop
1,2,11:hadoop
1,2,14:java
1,2,19:hadoop
1,3,1:java
1,3,4:hadoop
1,3,4:java
1,3,5:java
1,3,14:hadoop
1,3,15:hadoop
5、结果分析
Python开发MapReduce系列(二)Python实现MapReduce分桶的更多相关文章
- WCF开发实战系列二:使用IIS发布WCF服务
WCF开发实战系列二:使用IIS发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇中,我们创建了一个简单的WCF服务,在测试的时候,我们使用VS200 ...
- 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程
[神经网络与深度学习][python开发]caffe-windows使能python接口使用draw_net.py绘制网络结构图过程 标签:[神经网络与深度学习] [python开发] 主要是想用py ...
- python开发初期及二次开发C api
1,python2 or python 区别, https://wiki.python.org/moin/Python2orPython3 python software foundation 2,p ...
- python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheetahcherrypy:一个WEB frameworkctype ...
- Python开发 第01课 Python 简介
一.Python 介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...
- 【开发者portal在线开发插件系列二】多条上下行消息(messageId的使用)【华为云技术分享】
前言和基本操作请参考[开发者portal在线开发插件系列一]profile和基本上下行消息,此处不再复述,没操作过的小伙伴一定要先去看看哦~ 话不多说,开始今天的演(表)示(演) 场景说明: 假设一: ...
- Python学习笔记之二——Python的运行机制,一般人肯定不会
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:XX Python解释器简介 解释器是一种让其他程序运行起来的程 ...
- 【Python开发】C和Python之间的接口实现
作者:Jerry Jho 链接:https://www.zhihu.com/question/23003213/answer/56121859 ## 更新:关于ctypes,见拙作 聊聊Python ...
- python开发第二篇 :python基础
python基础a.Python基础 -基础1. 第一句python -python后缀名可以任意? -导入模块时如果不是.py文件,以后的文件后缀名是.py.2.两种 ...
- Python开发篇——构建虚拟Python开发环境(Conda+Poetry)
前言 之前虽略有提及Python,但是没有实际地写点料.惭愧,惭愧,所以这次先起个头,讲讲如何构建虚拟Python开发环境.相信之前看过我博客的人可能会想:博主不会又要聊聊Docker吧?放心,不会. ...
随机推荐
- BurpSuite—-Sequencer模块(定序器)
一.简介 Burp Sequencer是一种用于分析数据项的一个样本中的随机性质量的工具.你可以用它来测试应用程序的session tokens(会话tokens)或其他重要数据项的本意是不可预测的, ...
- SQL和NoSQL
SQL和NoSQL 目前的数据库系统非常多,有传统的关系型的数据库系统(又被称为SQL数据库系统),有最近几年流行起来的NoSQL数据库系统.其中NoSQL数据库系统又分为很多种不同的类型,根据各个系 ...
- Eclipse oxygen安装中文包
help->install new software Eclipse software repository http://download.eclipse.org/technology/ba ...
- 用户“*****”不具有所需的权限。请验证授予了足够的权限并且解决了 Windows 用户帐户控制(UAC)限制问题。
错误: 用户“ts\***”不具有所需的权限.请验证授予了足够的权限并且解决了 Windows 用户帐户控制(UAC)限制问题. 解决: 当从客户端用IE连接http://xxx.xxx.xxx.xx ...
- SpringMVC总结三:请求Controller返回视图类型以及请求方式、参数介绍
视图解析,请求Controller返回的视图类型: @Controller @RequestMapping("/test") public class TestController ...
- Unity shader saturate
当你想将颜色值规范到0~1之间时,你可能会想到使用saturate函数(saturate(x)的作用是如果x取值小于0,则返回值为0.如果x取值大于1,则返回值为1.若x在0到1之间,则直接返回x的值 ...
- windows7 Sql server 2012 尝试读取或写入受保护的内存。这通常指示其他内存已损坏的修复
项目中,使用了sql server2012数据库,服务端是2012,客户端如果是2008的话,就会报错: 索引错误. 没办法,就安装了sql server2012客户端.但是还是报错,无法连上数据库服 ...
- Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/images/json: dial unix /var/run/docker.sock: conne
使用docker报如下错误信息: Got permission denied while trying to connect to the Docker daemon socket at unix:/ ...
- 【Docker官方文档】理解Docker
本文来自Docker的官方文档,详细介绍了Docker的体系结构.重要概念.内部工作机理等内容,推荐不了解Docker内部原理的同学阅读. 什么是Docker? Docker是一个用于开发.交付和运行 ...
- c语言实践 统计输入的一串正整数里面奇数和偶数的个数
怎么考虑这个问题. 首先先确定肯定是需要一个变量保存输入的数据的,我们叫它input,最后结果要的是个数,所以需要另外两个变量来保存奇数的个数和偶数的个数. int input int countJ ...