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. 怎么破解Wifi密码

    破解无络网络Wifi密码,让手机上Wifi不再受限. 方法/步骤 1 上网搜索并下载“Wfi万能钥匙”APK程序,然后将其安装到手机内存中.可以借助手机类管理软件将APK应用安装到手机中. 步骤阅读 ...

  2. Mysql 本地计算机无法启动 mysql 服务 错误 1067:进程意外终

    1.重装后启动mysql服务,提示 本地计算机无法启动 mysql 服务 错误 1067:进程意外终止. 2.查看mysql根目录下有一 计算机名.err 打开一看全是英文的错误提示: 3.根据其中的 ...

  3. STM32F207 两路ADC连续转换及GPIO模拟I2C给MT9V024初始化参数

    1.为了更好的方便调试,串口必须要有的,主要打印一些信息,当前时钟.转换后的电压值和I2C读出的数据. 2.通过GPIO 模拟I2C对镁光的MT9V024进行参数初始化.之前用我以前公司SP0A19芯 ...

  4. JavaScript在智能手机上的应用-通过滑动修改网页字体大小

    ---------------------------------- <script type="text/javascript">            //变量x, ...

  5. Ansible2:主机清单【转】

    Ansible 通过读取默认的主机清单配置/etc/ansible/hosts,可以同时连接到多个远程主机上执行任务, 默认路径可以通过修改 ansible.cfg 的 hostfile 参数指定路径 ...

  6. three dot

    http://stackoverflow.com/questions/28031603/what-do-three-dots-mean-in-go-command-line-invocations

  7. E212:无法打开并写入文件

    用vi编辑文件是  老师出现这样的错误 有些文件   需要root权限才能修改   切换成root权限就行了

  8. UITextfield的一些属性

    //设置左视图 不用设置frame UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@&quo ...

  9. Object-C 自学笔记 - 1

    1.基本变量类型 类型 标示符 输出格式 整形 int %i 浮点 float %f 双精度 double %g 单字符 char %c 以上是基本类型,除此之外还有long, long long i ...

  10. Hibernate 系列教程15-一级缓存

    Product public class Product { private Long id; private String name; Product.hbm.xml <class name= ...