http://blog.csdn.net/chaoping315/article/details/6221440

在hadoop 中一个Job中可以按顺序运行多个mapper对数据进行前期的处理,再进行reduce,经reduce后的结果可经个经多个按顺序执行的mapper进行后期的处理,这样的Job是不会保存中间结果的,并大大减少了I/O操作。

例如:在一个Job中,按顺序执行 MAP1->MAP2->REDUCE->MAP3->MAP4 在这种链式结构中,要将MAP2与REDUCE看成这个MAPREDUCE的核心部分(就像是单个中的MAP与REDUCE),并且partitioning与shuffling在此处才会被应用到。所以MAP1作为前期处理,而MAP3与MAP4作为后期处理。

  1. Configuration conf = getConf();
  2. JobConf job = new JobConf(conf);
  3. job.setJobName(“ChainJob”);
  4. job.setInputFormat(TextInputFormat.class);
  5. job.setOutputFormat(TextOutputFormat.class);
  6. FileInputFormat.setInputPaths(job, in);
  7. FileOutputFormat.setOutputPath(job, out);
  8. JobConf map1Conf = new JobConf(false);
  9. ChainMapper.addMapp(job,
  10. Map1.class,
  11. LongWritable.class,
  12. Text.class,
  13. Text.class,
  14. Text.class,
  15. true,
  16. map1Conf);
  17. //将map1加入到Job中
  18. JobConf map2Conf = new JobConf(false);
  19. ChainMapper.addMapper(job,
  20. BMap.class,
  21. Text.class,
  22. Text.class,
  23. LongWritable.class,
  24. Text.class,
  25. true,
  26. map2Conf);
  27. /将map2加入到Job中
  28. JobConf reduceConf = new JobConf(false);
  29. ChainReducer.setReducer(job,
  30. Reduce.class,
  31. LongWritable.class,
  32. Text.class,
  33. Text.class,
  34. Text.class,
  35. true,
  36. reduceConf);
  37. /将reduce加入到Job中
  38. JobConf map3Conf = new JobConf(false);
  39. ChainReducer.addMapper(job,
  40. Map3.class,
  41. Text.class,
  42. Text.class,
  43. LongWritable.class,
  44. Text.class,
  45. true,
  46. map3Conf);
  47. /将map3加入到Job中
  48. JobConf map4Conf = new JobConf(false);
  49. ChainReducer.addMapper(job,
  50. Map4.class,
  51. LongWritable.class,
  52. Text.class,
  53. LongWritable.class,
  54. Text.class,
  55. true,
  56. map4Conf);
  57. //将map4加入到Job中
  58. JobClient.runJob(job);
  59. 注:上一个的输出是一下的输入,所以上一个的输出数据类型必须与下一个输入的数据类型一样

***************************************************

addMapper中的参数

public static <K1,V1,K2,V2> void
addMapper(JobConf job,
                    Class<? extends Mapper<K1,V1,K2,V2>> klass,
                    Class<? extends K1> inputKeyClass,
                    Class<? extends V1> inputValueClass,
                    Class<? extends K2> outputKeyClass,
                    Class<? extends V2> outputValueClass,
                    boolean byValue,
                    JobConf mapperConf)

(转) hadoop 一个Job多个MAP与REDUCE的执行的更多相关文章

  1. hadoop 2.2.0 关于map和reduce的个数的设置

    关于hadoop中的map过程,我的理解是每一个map系统会开启一个JVM进程来处理,map之间相互并行,map函数内串行.这样的想法是否正确? 由于想在hadoop集群上算一个初始输入数据不多,但是 ...

  2. hadoop中map和reduce的数量设置问题

    转载http://my.oschina.net/Chanthon/blog/150500 map和reduce是hadoop的核心功能,hadoop正是通过多个map和reduce的并行运行来实现任务 ...

  3. Hadoop 中关于 map,reduce 数量设置

    map和reduce是hadoop的核心功能,hadoop正是通过多个map和reduce的并行运行来实现任务的分布式并行计算,从这个观点来看,如果将map和reduce的数量设置为1,那么用户的任务 ...

  4. 如何确定 Hadoop map和reduce的个数--map和reduce数量之间的关系是什么?

    1.map和reduce的数量过多会导致什么情况?2.Reduce可以通过什么设置来增加任务个数?3.一个task的map数量由谁来决定?4.一个task的reduce数量由谁来决定? 一般情况下,在 ...

  5. 如何确定Hadoop中map和reduce的个数--map和reduce数量之间的关系是什么?

    一般情况下,在输入源是文件的时候,一个task的map数量由splitSize来决定的,那么splitSize是由以下几个来决定的 goalSize = totalSize / mapred.map. ...

  6. Hadoop map和reduce数量估算

    Hadoop在运行一个mapreduce job之前,需要估算这个job的maptask数和reducetask数.首先分析一下job的maptask数,当一个job提交时,jobclient首先分析 ...

  7. Hadoop :map+shuffle+reduce和YARN笔记分享

    今天做了一个hadoop分享,总结下来,包括mapreduce,及shuffle深度讲解,还有YARN框架的详细说明等. v\:* {behavior:url(#default#VML);} o\:* ...

  8. Hadoop 少量map/reduce任务执行慢问题

    最近在做报表统计,跑hadoop任务. 之前也跑过map/reduce但是数据量不大,遇到某些map/reduce执行时间特别长的问题. 执行时间长有几种可能性: 1. 单个map/reduce任务处 ...

  9. hadoop入门级总结二:Map/Reduce

    在上一篇博客:hadoop入门级总结一:HDFS中,简单的介绍了hadoop分布式文件系统HDFS的整体框架及文件写入读出机制.接下来,简要的总结一下hadoop的另外一大关键技术之一分布式计算框架: ...

随机推荐

  1. Python logging模块使用记录

    1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info messa ...

  2. JavaScript高级程序设计:第二十章

    第二十章 一.语法 JSON的语法可以表示以下三种类型的值: (1)简单值 (2)对象 JSON的对象与javascript字面量有一些不同.例如,在javascript中,前面的对象字面量可以写成下 ...

  3. ios控件 UIImageView

    UIImageView的作用是显示图片和多张动态的图片   - (id)initWithImage:(UIImage *)image;//初始化图片视图 - (id)initWithImage:(UI ...

  4. Mysql:输出到文件

    mysql>tee /home/a.txt mysql>show processlist; mysql>exit tee命令能重定向输出,同时屏幕会同步显示.

  5. 使用TcpTrace小工具截获Web Service的SOAP报文

    Web Service客户端对服务端进行调用时,请求和响应都使用SOAP报文进行通讯.在开发和测试时,常常查看SOAP报文的内容,以便进行分析和调试.TcpTrace是一款比较小巧的工具,可以让我们截 ...

  6. ClickOnce发布注意的一些细节

    细节1.应用程序启动前检查更新: 步骤:主工程-右键属性-发布(页面)-按“更新”按钮-勾选“应用程序应该检查更新(T)”-选择“应用程序启动前(F)”,如下图: 细节二:ClickOnce发布时&q ...

  7. Java中获取路径的方法_自我分析

    就目前的我来说最常用的两种获取路径的方法是  class.getRecource(filename) 和 class.getclassloader.getRecource(filename) 这两者的 ...

  8. iOS NSMutableArray添加NSInteger元素

    NSMutableArray *array = [[NSMutableArray alloc] init]; NSInteger num = 7; NSNumber *number = [NSNumb ...

  9. 【转】使用ThinkPHP必须掌握的调试方法

    经常看到有人问到findAll的返回数据类型是什么之类的问题,以及出错了不知道什么原因的情况,其实还是没有熟悉ThinkPHP内置的调试手段和方法,抛开IDE本身自带的调试方式不说,如果你正在用或者打 ...

  10. 求n!末尾0的个数

    题目连接 /* £:离散数学. £:n!中2的个数>5的个数. £:2*5=10: */ #include<cstdio> #include<cstring> #incl ...