MapReduce处理过程分析
来源:互联网 发布:软件售前工程师简历 编辑:程序博客网 时间:2024/05/29 17:20
注意:
1.在mr中,所有的key是需要被比较和排序的,并且是二次,先根据partitioner分区,再根据大小。所以我们可以利用分区对第一个字段排序,在利用分区内的Key比较,进行第二个字段的排序,这可以实现一个二次排序。
2.源代码中的sortAndSpill()方法内部流程:
第一步,使用用快速排序算法对kvbuffer[bufstart,bufend)中的数据排序,先对partition分区号排序,然后再按照key排序,经过这两轮排序后,数据就会以分区为单位聚集在一起,且同一分区内的数据按key有序;
第二步,按分区大小由小到大依次将每个分区中的数据写入任务的工作目录下的临时文件中,如果用户设置了Combiner,则写入文件之前,会对每个分区中的数据做一次聚集操作,比如
Map阶段: 1. 使用job.setInputFormatClass(TextInputFormat)做为输入格式。注意输出应该符合自定义Map中定义的输出。 2.调用job.setPartitionerClass(),对指定的key落在具体的分区 3.每个分区内又调用job.setSortComparatorClass()设置的key比较函数类排序(如果没有通过job.setSortComparatorClass()设置key比较函数类,则使用key的实现的compareTo方法)。可以看到,这是一个二次排序。 4.如果设置了Combiner(job.setCombinerClass)对output进行一次合并,从而减少对reduce的输出流量和预处理reduce的input数据。Reduce阶段: 1.shuffle阶段 reducer开始fetch所有映射到这个reducer的map输出。 2.sort阶段 再次调用job.setSortComparatorClass()设置的key比较函数类对所有数据对排序(因为一个reducer接受多个mappers,需要重新排序)。合并排序:接受来自不同map的相同key值和排序是同时进行的,形成一个序列,跟oracle类似,所以reduce方法的迭代器调用之前就已经排好序了 3. 使用jobjob.setGroupingComparatorClass()设置的分组函数类。然后开始构造一个key对应的value迭代器,这个迭代器的key使用属于同一个组的所有key的第一个key。 4. 调用Reduce方法进行处理
[http://flyingdutchman.iteye.com/blog/1878775]
0 0
- MapReduce处理过程分析
- MapReduce处理过程笔记
- MapReduce详细处理过程
- 分析MapReduce执行过程
- MapReduce Shuffle过程分析
- 分析MapReduce执行过程
- MapReduce Shuffle过程分析
- MapReduce 运行过程源代码分析
- 深入分析MapReduce shuffle过程
- hadoop mapreduce详细过程分析
- MapReduce之collect过程分析
- Hadoop中mapReduce处理过程详解
- Hadoop中mapReduce处理过程详解
- Hadoop中mapReduce处理过程详解
- Hadoop中mapReduce处理过程详解
- Hadoop中mapReduce处理过程详解
- mapreduce源码分析作业分配过程
- Mapreduce(二):MR的执行过程分析
- sql 查询字段不为null并且长度不为0
- iOS学习路线图
- C++实现MD5加密
- 发送UDP广播
- 2016.11.24:for word.02
- MapReduce处理过程分析
- caffe源码c++学习笔记Classifier.cpp
- 运维笔记19 (DNS服务器bind的相关配置,主从DNS服务器,动态域名解析的简单配置)
- Module not found: Error: Cannot resolve module 'react/lib/ReactMount' in ...
- java抽奖算法
- 一个版本Tomcat6多处使用,以及集成solr的配置
- 单一原则
- java实现二叉查找树
- zynq u-boot驱动串口打印乱码或者无打印