成都网站建设设计

将想法与焦点和您一起共享

MapTask和ReduceTask流程是怎样的

本篇内容主要讲解“MapTask和ReduceTask流程是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MapTask和ReduceTask流程是怎样的”吧!

创新互联是一家专业提供济宁企业网站建设,专注与成都网站建设、做网站、H5页面制作、小程序制作等业务。10年已为济宁众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

map->reduce

map和reduce之间的过程,成为shuffling,官方图是这样介绍的.(这样描述不是很准确)

MapTask和ReduceTask流程是怎样的

MapTask

每个map任务都有一个环形内存缓冲区用于存储任务的输出.默认100MB(MRJobConfig.IO_SORT_MB修改)
一旦缓冲达到阈值(MRJobConfig.MAP_SORT_SPILL_PERCENT)0.8,后台线程将内容spill到硬盘,将缓缓冲区写到MRJobConfig.JOB_LOCAL_DIR指定目录.
查看MRJobConfig.JOB_LOCAL_DIR值为mapreduce.job.local.dir,查看org.apache.hadoop.mapreduce包下的mapred-default.xml(hadoop-mapreduce-client-core.2.7.1.jar中)文件搜索local.dir,得到配置


  mapreduce.cluster.local.dir
  ${hadoop.tmp.dir}/mapred/local
  The local directory where MapReduce stores intermediate
  data files.  May be a comma-separated list of
  directories on different devices in order to spread disk i/o.
  Directories that do not exist are ignored.
  

ok,现在从hadoop-common-2.7.1.jar中的core-default.xml中搜索hadoop.tmp.dir


  hadoop.tmp.dir
  /tmp/hadoop-${user.name}
  A base for other temporary directories.

现在我们得到了spill的临时路径/tmp/hadoop-${user.name}/mapred/local.

在spill之前,首先进行partition,每个分区进行sort,如果有combiner,它就在排序后,执行combiner。

如果溢出文件超过三个(JobContext.MAP_COMBINE_MIN_SPILLS),将会再次执行combiner

MapTask.MapOutputBuffer中源码

if (combinerRunner == null || numSpills < minSpillsForCombine) {
    Merger.writeFile(kvIter, writer, reporter, job);
} else {
    combineCollector.setWriter(writer);
    combinerRunner.combine(kvIter, combineCollector);
}

注:map spill到磁盘时,可以设置压缩来节省磁盘和网络IO
设置 MAP_OUTPUT_COMPRESS 为true ,MRJobConfig.MAP_OUTPUT_COMPRESS_CODEC值为codec
例如:
conf.set(MRJobConfig.MAP_OUTPUT_COMPRESS, "true");
conf.set(MRJobConfig.MAP_OUTPUT_COMPRESS_CODEC, "org.apache.hadoop.io.compress.DefaultCodec");

ReduceTask

ReduceTask要从各个MapTask上读取数据,ReduceTask大体流程分为5个阶段。
  1. Shuffle
    ReduceTask从MapTask上远程拷贝数据。超过阈值写道磁盘。

  2. Merge
    ReduceTask启动两个线程,对内存和硬盘数据进行合并。

  3. Sort
    将MapTask的结果归并排序。

  4. Reduce
    用户自定义Reduce

  5. Write
    reduce结果写到HDFS

到此,相信大家对“MapTask和ReduceTask流程是怎样的”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


分享名称:MapTask和ReduceTask流程是怎样的
文章源于:http://chengdu.cdxwcx.cn/article/ipdocs.html