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. [bzoj3196][Tyvj 1730][二逼平衡树] (线段树套treap)

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在 ...

  2. 样式的操作-访问外部定义的css样式

    JS对css的控制力非常强,甚至可以控制外部定义的css样式 ———————————————————————— <style>            .myclass{           ...

  3. openwrt ramips随记

    ar71xx / brcm47xx / brcm63xx / ramips是指cpu的系列,ramips是指ralink系列的

  4. servlet第2讲(下集)----通过HttpServlet实现一个用户登录网站(继承HttpServlet)

    1.计划框架 2.先建立Login的servlet (1)建立Login,编写代码,进行编译     (2)配置web.xml (3)重新加载,并且验证 (4)解决乱码问题 (5)再次加载,然后验证 ...

  5. Nmap的使用【转载】

    1.NMap工具 主要功能:探测主机是否在线.扫描主机开放端口和嗅探网络服务,用于网络探测和安全扫描. NMap支持很多扫描技术,例如:UDP.TCPconnect().TCPSYN(半开扫描).ft ...

  6. asp.net 基础

    前台HTML,javascript,后台C# 代码能不在后台写,就不在后台写 WebSite和WebApplication的区别 1)当改变后台代码时,WebApplication需重启浏览器或者重新 ...

  7. docker installation on ubuntu

    Ubuntu Docker is supported on these Ubuntu operating systems: Ubuntu Xenial 16.04 (LTS) Ubuntu Trust ...

  8. List<string[]> 如何去重

    List<string[]> 如何去重,代码如下: static void Main(string[] args) { List<string[]> list = new Li ...

  9. meta标签使360浏览器默认极速模式

    在head标签中添加一行代码: <html> <head> <meta name=”renderer” content=”webkit|ie-comp|ie-stand” ...

  10. Android OpenGL ES .介绍

    引自:http://blog.csdn.net/hgl868/article/details/6971624 1.    OpenGL ES 简介 Android 3D引擎采用的是OpenGL ES. ...