老版mapreduce跑streaming作业多路输出的方法
1. 继承MultipleTextOutputFormat实现自己的输出类。
2. 重写generateFileNameForKeyValue方法,返回输出的名字,可通过"/"分割表示目录路径。
3. 重写generateActualValue方法,返回真实的value。
4. 将类编译打包成jar,在运行streaming作业时设置-libjars YourJar.jar -outputformat YourPackage.YourOutputClass选项
示例:
package joco;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.lib.MultipleTextOutputFormat; public class multiout extends MultipleTextOutputFormat<Text, Text> { @Override
protected String generateFileNameForKeyValue(Text key, Text value, String name) {
String v_f = value.toString();
int pos = v_f.lastIndexOf('\t');
return v_f.substring(pos+1, v_f.length())+"/"+name; } @Override
protected Text generateActualValue(Text key, Text value) {
String v_f = value.toString(); int pos = v_f.lastIndexOf('\t');
return new Text(v_f.substring(0, pos)); }
}
mapreduce运行脚本:
#!/usr/bash
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming.jar \
-libjars multiout.jar \
-outputformat joco.multiout \
-mapper map.py \
-reducer reduce.py \
-file map.py reduce.py \
-input /data/input \
-output /data/output
说明:将"\t"分割的reduce输出的最后一列作为输出文件名,其余部分作为key,value。
例如在reduce.py脚本中:
print "key1" + "\t" + "value1" + "\t" + "dir1" print "key2" + "\t" + "value2" + "\t" + "dir2"
则输出路径为:
/data/output/dir1/part-00000,内容为key1 \t value1
/data/output/dir2/part-00000,内容为key2 \t value2
老版mapreduce跑streaming作业多路输出的方法的更多相关文章
- mapreduce 多路输出
		Streaming支持多路输出(SuffixMultipleTextOutputFormat) 如下示例: hadoop streaming \ -input /home/mr/data/test_t ... 
- hadoop streaming 多路输出 [转载]
		转载 http://www.cnblogs.com/shapherd/archive/2012/12/21/2827860.html hadoop 支持reduce多路输出的功能,一个reduce可以 ... 
- ffmpeg转码多路输出(二)
		ffmpeg转码多路输出(二)本程序支持一路输入多路输出,可根据map配置自行添加,第1路为纯拷贝,其他2路经过编解码,格式转换缩放和重采样,纯拷贝方面不同格式适应方面还没做全,以后补充.本程序适合多 ... 
- (36)老版和新版API调用
		---------更新时间18:06 2016-09-18 星期日------- *前言 我用的是odoo8,但里面有相当多的api是以前版本,这时若我们自己开发的 插件采用新版本api,里面 ... 
- 使用Qpython3制作老版天翼飞TP路由器拨号脚本
		#幻境拨号python版 #by 1414641776 account='xxxxxx@96301' password='xxxxx' # 路由器脚本 def sendToRoute(account, ... 
- CSS3弹性盒模型新版和老版写法差异
		1.在使用弹性盒模型的时候父元素必须要加display:box 或 display:inline-box: 新版弹性盒模型:flex:display : flex 老版弹性盒模型:box : disp ... 
- MidoNet 安装(Kilo RDO)(最老版)
		一.初始化(Kilo RDO)版(最老版) 环境介绍 系统 CentOS 7.3 主机ip 10.211.55.5 主机名 midonet 1.配置yum源 ###OpenStack源 yum ins ... 
- <Spark><Spark Streaming><作业分析><JobHistory>
		Intro 这篇是对一个Spark (Streaming)作业的log进行分析.用来加深对Spark application运行过程,优化空间的各种理解. Here to Start 从我这个初学者写 ... 
- EF封装类 增加版,增加从缓存中查找数据方法,供参考!
		EF封装类 增加版,增加从缓存中查找数据方法,供参考! 这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都 ... 
随机推荐
- 26 Time Management(转)
			01. There is alway time. Time is priorities. 时间常有.时间优先. 02. Days always fill up. 时间总会有的. Only plan f ... 
- oracle日期函数转换真麻烦。。。
			--Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2011 ... 
- IT蓝豹--RecyclerView加载不同view实现效果
			本项目由开发者:黄洞洞精心为初学者编辑RecyclerView的使用方法. RecyclerView加载不同view实现效果,支持加载多个view,并且支持用volley获取数据, 项目主要介绍: 初 ... 
- Session和Cookie的作用以及实现
			http://www.cnblogs.com/xiaoshitoutest/p/6103790.html 
- hdu1540 Tunnel Warfare
			Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ... 
- oracle job的写法
			DECLAREX NUMBER;begin sys.dbms_job.submit(job => x, what => 'begindd_income_risk_control;end;' ... 
- 基于 Ubuntu 编译 windows 版 adb
			. . . . . adb 的源码在 Android 源码树中,所以只能在 Linux 下编译,而在 Linux 下编译 windows 版本的应用就需要使用交叉编译器 MinGW 了. 环境: Ub ... 
- Android WIFI 分析(二)
			本文介绍Wifi 分析线路二:在Setting中打开WiFi功能.扫描网络以及连接网络的流程. WifiSettings 无线网络设置界面 WifiEnabler 相当于无线网络设置开关 WifiDi ... 
- js- this
			this对象是基于函数在执行的环境绑定的. (一) this 在闭包环境中指向的对象. <Js高级程序设计>中提到: 每个函数在被调用时,其活动对象都会自动取得两个特殊变量:this和 ... 
- SQLSERVER进程CPU使用率100%
			解决SQLSERVER2008 CPU使用率99%: 1.dbcc checkdb 重建索引 2.檢查有沒有死鎖 -- sp_lock SELECT request_session_id spid , ... 
