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. VNC VIEWER的使用集锦

    关于颜色深度的问题, 今天用VNC Viewser ,连上去之后,发现色彩可能只有8或者16位 然后修改了 sever的depth,也不好使, 于是,就修改了 client的 colourlevel ...

  2. Linux下的两个聊天命令的使用方法

    一. write用法:write 用户名:敲回车后,自己和对方将会同时处于聊天的状态,但是被发起连接的人只能收到发起聊天请求的人的聊天内容,但是不能回复,如果想要回复的话必须先向对方发起连接,这样以来 ...

  3. 我的定时关机程序(MFC实现) .

    原理: 利用定时器去检查,如输入的是多少分钟后关机,就根据输入的分钟数产生一个COUNT计数器,计数器一直递减,直到1,然后执行关机.如输入的是几时几分关机,那么定时器会每次都检查系统的时间和你输入的 ...

  4. Android数据库--Sqlcipher的使用(二)

    1.使用Sqlcipher对数据库加密,并结合ORM框架LitePal进行使用. 2.对LitePal的使用我就不在讲解了,大家可以参考下面七篇博客: http://blog.csdn.net/guo ...

  5. insertRule()与addRule()创建规则

    要向现有的样式表中添加新规则,需要使用insertRule()方法.这个方法接受两个参数:规则文本和表示在那里插入规则的索引.下面是一个例子: sheet.insertRule("body ...

  6. 【超级干货】手机移动端WEB资源整合:转载

    转载于:http://www.w3cfuns.com/notes/24611/fbba9cbd616e795360ea45515494aa53.html meta基础知识 H5页面窗口自动调整到设备宽 ...

  7. table新增空白行到首行

    var str=""; str+="<tr bordercolor='#DEDEDE' bgcolor='#ffffff'>"; str+=&quo ...

  8. textarea内容太多, 鼠标点击全部显示

    strRight+="<td bordercolor='#DEDEDE' width='500px' height='50'><div title='"+data ...

  9. server服务器信息页面添加步骤

    1. 在数据库更新链接 /portal/server/getServerList 2. 写实体类 Server.java 3. 写Server.hbm.xml <?xml version=&qu ...

  10. 微信支付WxpayAPI_php_v3(一)sdk简介与错误修改

    经过断断续续将近一周的时间终于把微信支付调通了. 这里总结一下,算是给后来者有个指引.少踩坑!!!! 开发语言:php5.5 语言框架:laravel5.2 微信sdk:WxpayAPI_php_v3 ...