高阶MapReduce(1)-链接多个MapReduce作业

原创 2012年03月29日 16:04:01

许多复杂的任务需要分解成简单任务,每个任务通过MapReduce作业来完成。Hadoop支持将多个MapReduce链接成更大得作业。

1.顺序链接MapReduce作业

类似于Unix中的管道:

mapreduce-1 | mapreduce-2 | mapreduce-3 ......

每一个阶段创建一个job,并将当前输入路径设为前一个的输出。在最后阶段删除链上生成的中间数据

2.具有复杂依赖的MapReduce链接

若mapreduce-1处理一个数据集,MapReduce-2处理另一个数据集,而MapReduce-3对前两个做内部连结。

这种情况通过Job和JobControl类管理非线性作业间的依赖。如x.addDependingJob(y)意味着x在y完成前不会启动

3.预处理和后处理的链接

一般将预处理和后处理写为Mapper任务。可以自己进行链接或使用ChainMapper和ChainReducer类,生成得作业表达式类似于:

MAP+ | REDUCE | MAP*

如以下作业: Map1 | Map2 | Reduce | Map3 | Map4

把Map2和Reduce视为MapReducez作业核心。Map1作为前处理,Map3, Map4作为后处理。:

ChainMapper使用模式:(预处理作业)

ChainReducer使用模式:(设置Reducer并添加后处理Mapper)

...
 conf.setJobName("chain");
 conf.setInputFormat(TextInputFormat.class);
 conf.setOutputFormat(TextOutputFormat.class);
 

JobConf mapAConf = new JobConf(false); ... ChainMapper.addMapper(conf, AMap.class, LongWritable.class, Text.class, Text.class, Text.class, true, mapAConf);

JobConf mapBConf = new JobConf(false); ... ChainMapper.addMapper(conf, BMap.class, Text.class, Text.class, LongWritable.class, Text.class, false, mapBConf);

JobConf reduceConf = new JobConf(false); ... ChainReducer.setReducer(conf, XReduce.class, LongWritable.class, Text.class, Text.class, Text.class, true, reduceConf);

ChainReducer.addMapper(conf, CMap.class, Text.class, Text.class, LongWritable.class, Text.class, false, null);

ChainReducer.addMapper(conf, DMap.class, LongWritable.class, Text.class, LongWritable.class, LongWritable.class, true, null);

FileInputFormat.setInputPaths(conf, inDir); FileOutputFormat.setOutputPath(conf, outDir); ...

JobClient jc = new JobClient(conf); RunningJob job = jc.submitJob(conf); ... 
以public static <k1,v1,k2,v2> void

addMapper(JobConf job,

                       Class<? extends Mapper<k1,v1,k2,v2> kclass,

                        Class<? extends k1> inputKeyClass,

                        Class<? extends v2> inputValueClass,

                        Class<? extends k2> outputKeyClass,

                        Class<? extends v2> outputValueClass,

                        boolean byValue,

                        JobConf mapperConf)

8个参数中,第一个和最后一个是全局和本地jobconf对象,第二个是mapper类,接下来四个mapper使用的类。

byValue参数:true表示值传递,false表示引用传递。

在标准Mapper中,<k2,v2>是采用值传递被洗牌到不同节点上(传递副本),但是目前我们可以将mapper与另一个链接,就在统一个JVM线程执行,就可以采取引用传递。但是一般来说,map1在调用context.write()写出数据后,这些数据是按约定不会更改的。如果引用传递就会破坏约定。但是使用引用传递会提高效率。如果确定数据不会被破坏,可以设置为false

一般安全起见,设置为true即可。。

                                    




hadoop 一个Job多个MAP与REDUCE的执行

在hadoop 中一个Job中可以按顺序运行多个mapper对数据进行前期的处理,再进行reduce,经reduce后的结果可经个经多个按顺序执行的mapper进行后期的处理,这样的Job是不会保存中...
  • chaoping315
  • chaoping315
  • 2011年03月03日 18:05
  • 22597

MapReduce之多MapReduce执行

转自:【Apache Hadoop】MapReuce 编程总结-多MapReduce执行,保存在此以学习。 学习hadoop,必不可少的就是写MapReduce程序,当然,对于简单的分析程序,我...
  • SHENNONGZHAIZHU
  • SHENNONGZHAIZHU
  • 2016年07月15日 16:25
  • 2399

Hadoop中map与reduce的个数问题

在hadoop中当一个任务没有设置的时候,该任务的执行的map的个数是由任务本身的数据量决定的,具体计算方法会在下文说明;而reduce的个数hadoop是默认设置为1的。为何设置为1那,因为一个任务...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2015年10月22日 16:42
  • 1510

Map和Reduce个数设置问题

看了Hadoop的API和官方文档,加上自己y
  • qingmu0803
  • qingmu0803
  • 2014年09月26日 17:14
  • 2155

高阶MapReduce_2_链接多个MapReduce作业实例

这篇博客是一个链接多个MapReduce作业的小案例,接下来就来看看具体是怎么是怎么实现的: 首先,本次的小案例操作了两个数据文件,分别是: input1: 2012-3-1 a 2012-3-2 b...
  • Wild_Elegance_k
  • Wild_Elegance_k
  • 2015年08月26日 20:22
  • 934

Hadoop 里MapReduce里 实现多个job任务 包含(迭代式、依赖式、链式)

一、迭代式,所谓的迭代式,下一个执行的Job任务以上一个Job的输出作为输入,最终得到想要的结果。 这里我只写关键的代码了 Job job = new Job(new Configurati...
  • yulinlin_fei
  • yulinlin_fei
  • 2016年10月22日 16:41
  • 1900

hadoop 多个mapreduce在java中串起来执行

注意:不建议这样做,用shell脚本把多个mr按顺序执行
  • china_demon
  • china_demon
  • 2016年04月14日 05:00
  • 824

MapReduce的两个简单例子

  • 2013年08月12日 01:03
  • 6KB
  • 下载

MapReduce基础开发之六Map多输入

在实际MapReduce开发中,会遇到需要数据多输入路径并有对应的Map函数来处理,这需要MultipleInputs.addInputPath(job, path, inputFormatClass...
  • fjssharpsword
  • fjssharpsword
  • 2016年07月05日 10:37
  • 2467

[Hadoop]MapReduce多路径输入与多个输入

1. 多路径输入FileInputFormat是所有使用文件作为其数据源的 InputFormat 实现的基类,它的主要作用是指出作业的输入文件位置。因为作业的输入被设定为一组路径, 这对指定作业输入...
  • SunnyYoona
  • SunnyYoona
  • 2017年01月11日 14:33
  • 1928
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:高阶MapReduce(1)-链接多个MapReduce作业
举报原因:
原因补充:

(最多只允许输入30个字)