首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据开发:MapReduce任务流程

大数据开发:MapReduce任务流程

作者头像
成都加米谷大数据
修改2021-01-04 17:58:33
9790
修改2021-01-04 17:58:33
举报
文章被收录于专栏:大数据开发大数据开发

作为Hadoop生态核心组件的MapReduce,是实现大数据计算处理的主要引擎,其核心思想是“分而治之”,简单来说就是分为Map和Reduce两个阶段。今天的大数据开发分享,我们主要来讲讲MapReduce具体的任务流程。

大数据培训:MapReduce任务流程
大数据培训:MapReduce任务流程

MapReduce的任务流程,简单点来说,先进行数据拆分,一个大的MapReduce作业,会被分解为多个小的Map任务。中间环节,可能会有Combiner会处理Map生成的数据;之后数据到达Partitioner,将中间结果分配到对应的Reducer所在节点上;Reducer会处理中间数据,得到最终的结果。

一、Map阶段

MapReduce接收到数据后,需要对数据进行划分。MapReduce中有一个InputFormat类,它会完成如下三个任务:

大数据培训:MapReduce任务流程
大数据培训:MapReduce任务流程

验证作业数据的输入形式和格式。

将输入数据分割为若干个逻辑意义上的InputSplit,其中每一个InputSplit都将单独作为Map任务的输入。也就是说,InputSplit的个数,代表了Map任务的个数。需要注意,这里并没有做实际切分,仅仅是将数据进行逻辑上的切分。

提供一个RecordReader,用于将Map的输入转换为若干个记录。虽然MapReduce作业可以接受很多种格式的数据,但是Map任务接收的任务其实是键值对类型的数据,因此需要将初始的输入数据转化为键值对。RecordReader对象会从数据分片中读取出数据记录,然后转化为Key-Value键值对,逐个输入到Map中进行处理。

二、Combiner

Combiner组件在实际运行当中,并非必须存在的部分,通常可以按照实际的需求灵活的添加。Combiner组件的主要作用是减少网络传输负载,优化网络数据传输优化。

大数据培训:MapReduce任务流程
大数据培训:MapReduce任务流程

当我们Map任务处理完成之后,大文本会变成一个一个的Key-Value对。

在没有Combiner组件前提下,这些键值对会直接传输到Reducer端,进行最后的统计工作。但是这一步是可以优化的,因为Map端仅仅是将每行的词拆分了,但是其实可以再做一步统计的。

设计Combiner时,要保证Combiner的key-value和Map的key-value一致。这也意味着,若你设计的Combiner改变了原先Map的键值对设计,那么你的Combiner设计就是不合法的。

三、Partitioner

为了保证所有主键相同的键值对会传输到同一个Reducer节点,以便Reducer节点可以在不访问其他Reducer节点的情况下就可以计算出最终的结果,我们需要对来自Map(如果有Combiner,就是Combiner之后的结果)中间键值对进行分区处理,Partitioner主要就是进行分区处理的。

Partitioner默认的分发规则

根据key的hashcode%reduce task数来分发,所以:如果要按照我们自己的需求进行分组,则需要改写数据分发(分区)组件Partitioner。

Partition的key value,就是Mapper输出的key value

大数据培训:MapReduce任务流程
大数据培训:MapReduce任务流程

输入是Map的结果对<key,value>和Reducer的数目,输出则是分配的Reducer(整数编号)。就是指定Mappr输出的键值对到哪一个reducer上去。系统缺省的Partitioner是HashPartitioner,它以key的Hash值对Reducer的数目取模,得到对应的Reducer。这样保证如果有相同的key值,肯定被分配到同一个reducre上。如果有N个reducer,编号就为0,1,2,3……(N-1)。

MapReduce中会将map输出的kv对,按照相同key分组,然后分发给不同的reducetask默认的分发规则为:根据key的hashcode%reduce task数来分发,所以:如果要按照我们自己的需求进行分组,则需要改写数据分发(分组)组件Partitioner,自定义一个CustomPartitioner继承抽象类:Partitioner

Partitioner的执行时机,是在Map输出key-value对之后。

四、Reduce

Reduce处理上游(Map,也可能有Combiner)的中间结果。需要注意的是,Map到Reduce整个过程中,键值的变化是不一样的:

初始是文本内容,会被RecordReader处理为键值对<key-value>;

经过Map(也可能有Combiner)后,仍然是键值对形式<key-value>;

经过Partition,到达Reduce的结果是key-list(value)形式,所以在Reduce处理的value其实一个整体;

Reduce会把所有的结果处理完成,输出到对应的输出路径。

关于大数据开发,MapReduce任务流程,以上就为大家做了简单的介绍了。MapReduce在Hadoop生态当中,是重要的数据处理指导思想,理解了MapReduce,对于后续的Spark计算引擎的学习,也有指导意义。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Map阶段
  • 二、Combiner
  • 三、Partitioner
  • 四、Reduce
相关产品与服务
大数据处理套件 TBDS
腾讯大数据处理套件(Tencent Big Data Suite,TBDS)依托腾讯多年海量数据处理经验,基于云原生技术和泛 Hadoop 生态开源技术对外提供的可靠、安全、易用的大数据处理平台。 TBDS可在公有云、私有云、非云化环境,根据不同数据处理需求组合合适的存算分析组件,包括 Hive、Spark、HBase、Flink、presto、Iceberg、Alluxio 等,以快速构建企业级数据湖、数据仓库。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档