老版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,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都 ...
随机推荐
- 强强联合之jquery操作angularjs对象
jquery是一个非常强大的js框架,angularjs是一个非常牛的前端mvc框架.虽然用其中的任何一个框架在项目中够用了,但是有时候这两个框架需要混合着用,虽然不推荐.但有时候混合用时,却非常方便 ...
- 何为babel / gulp
Babel主要用来将新版本的javascript(ES6,ES7)编译为ES5,目前它对于新标准的支持程度甚至高于Chrome浏览器.通过引入预设babel-preset-react,babel还能解 ...
- eclipse中outline中图标的含义
outline: 实心的代表方法 空心的代表属性 绿色的圆表示公有public 黄色的菱形表示保护protect 红色的方形表示私有private 蓝色的三角表示default 图形后加字母S代表该属 ...
- @ViewDebug.ExportedProperty的使用
原文链接:http://daemon369.github.io/android/2014/06/12/android-viewdebug-exportedproperty/ http://www.eo ...
- Python—变量
1.在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量 2.访问限制: class内部属性可以被外部 ...
- C++设计模式——简单工厂模式
简单工厂模式(Simple Factory Pattern) 介绍:简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用 ...
- I/O流——File类及使用
I/O框架介绍 I/O是计算机输入/输出的接口.Java的核心库java.io提供了全方面的I/O接口,包括:文件系统的操作,文件读写,标准设备的输出等. File类及使用 ① 一个File类的对 ...
- TimeQuest学习
1.物理时钟特性:clock skew(时钟差),jitter(拉动),clock latency(时钟潜伏),这些物理时钟特性又称为uncertainl--非定性,或非理想性. clock skew ...
- servlet的session为null?
servlet的session(会话)显示为null,一般是web.xml中配置不对或者在浏览器输入的url不正确造成的. web.xml配置如下: <servlet> <servl ...
- ios xib或storyBoard的那些小方法
今天看了一下xib里的一些小技巧,但是百度一搜的话,网上已经有人写过教程了,在这里我也就懒一下,不写那么详细了,就写一些如何百度的方法! 1."通过KVC修改占位文字的颜色" [t ...