老版mapreduce跑streaming作业多路输出的方法

时间:2022-10-25 16:15:04

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作业多路输出的方法的更多相关文章

  1. mapreduce 多路输出

    Streaming支持多路输出(SuffixMultipleTextOutputFormat) 如下示例: hadoop streaming \ -input /home/mr/data/test_t ...

  2. hadoop streaming 多路输出 &lbrack;转载&rsqb;

    转载 http://www.cnblogs.com/shapherd/archive/2012/12/21/2827860.html hadoop 支持reduce多路输出的功能,一个reduce可以 ...

  3. ffmpeg转码多路输出&lpar;二&rpar;

    ffmpeg转码多路输出(二)本程序支持一路输入多路输出,可根据map配置自行添加,第1路为纯拷贝,其他2路经过编解码,格式转换缩放和重采样,纯拷贝方面不同格式适应方面还没做全,以后补充.本程序适合多 ...

  4. &lpar;36&rpar;老版和新版API调用

    ---------更新时间18:06 2016-09-18 星期日------- *前言   我用的是odoo8,但里面有相当多的api是以前版本,这时若我们自己开发的   插件采用新版本api,里面 ...

  5. 使用Qpython3制作老版天翼飞TP路由器拨号脚本

    #幻境拨号python版 #by 1414641776 account='xxxxxx@96301' password='xxxxx' # 路由器脚本 def sendToRoute(account, ...

  6. CSS3弹性盒模型新版和老版写法差异

    1.在使用弹性盒模型的时候父元素必须要加display:box 或 display:inline-box: 新版弹性盒模型:flex:display : flex 老版弹性盒模型:box : disp ...

  7. MidoNet 安装(Kilo RDO)(最老版)

    一.初始化(Kilo RDO)版(最老版) 环境介绍 系统 CentOS 7.3 主机ip 10.211.55.5 主机名 midonet 1.配置yum源 ###OpenStack源 yum ins ...

  8. &lt&semi;Spark&gt&semi;&lt&semi;Spark Streaming&gt&semi;&lt&semi;作业分析&gt&semi;&lt&semi;JobHistory&gt&semi;

    Intro 这篇是对一个Spark (Streaming)作业的log进行分析.用来加深对Spark application运行过程,优化空间的各种理解. Here to Start 从我这个初学者写 ...

  9. EF封装类 增加版,增加从缓存中查找数据方法,供参考!

    EF封装类 增加版,增加从缓存中查找数据方法,供参考! 这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都 ...

随机推荐

  1. 【UOJ &num;17】【NOIP 2014】飞扬的小鸟

    http://uoj.ac/problem/17 dp,注意细节. #include<cstdio> #include<cstring> #include<algorit ...

  2. select动态增加option

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  3. Jersey框架三:Jersey对HTTPS的支持

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  4. spring &commat;Autowired或&commat;Resource 的区别

    1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配(这个注解是属于spring的),默认情况下必 ...

  5. 在Lua中提示UnityEngine&period;dll的方法

    我的环境 安装最新的 EmmyLua-1.2.1及以上版本 IDEA 2017.1.2 及以上版本 关于EmmlyLua的介绍可查看我之前的文章:Lua代码提示和方法跳转 说明:本文方法摘自 Emmy ...

  6. springboot知识点补充(一)

    测试配置 @RunWith(SpringRunner.class) @SpringBootTest @Configuration @ActiveProfiles("test") p ...

  7. jconsole使用

    先看一张图 根据JConsole和任务管理器对比,堆内存大小在250M左右,差不多空跑一个程序用idea启动springboot就是这个大小 项目启动初始类在一万个左右,活动线程50个上下,cpu利用 ...

  8. 《A Structured Self-Attentive Sentence Embedding》(注意力机制)

    Background and Motivation: 现有的处理文本的常规流程第一步就是:Word embedding.也有一些 embedding 的方法是考虑了 phrase 和 sentence ...

  9. &lpar;五&rpar;ROS节点

    一. 理解ROS 节点: ROS的节点: 可以说是一个可运行的程序.当然这个程序可不简单.因为它可以接受来自ROS网络上其他可运行程序的输出信息,也可以发送信息给ROS网络,被其他 ROS 可运行程序 ...

  10. Qgis里的查询过滤

    查询过虑实现方式 通过给getFeatures()传递 QgsFeatureRequest对象,实现数据的过虑,下边是一个查询的例子: request = QgsFeatureRequest() re ...