前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据入门:MapReduce基本原理

大数据入门:MapReduce基本原理

作者头像
成都加米谷大数据
修改2020-11-24 18:11:58
9340
修改2020-11-24 18:11:58
举报
文章被收录于专栏:大数据开发

在围绕Hadoop形成的大数据技术生态当中,MapReduce的地位,在早期是处于核心地位的,但是伴随着数据处理实时性需求的不断提升,更多新的计算框架出现,MapReduce的地位受到压制,但是作为Hadoop原始计算框架,还是需要相应程度的了解和掌握的。今天的大数据入门分享,我们来具体讲一讲MapReduce基本原理。

一、什么是MapReduce?

在Hadoop技术生态当中,MapReduce是作为计算引擎出现的,在处理超大规模的数据集上,MapReduce性能可观,通过分布式计算,将大规模数据计算任务分解,分布到不同的计算节点去并行计算,从而使得低成本下的大规模数据计算成为可能。

MapReduce的原型,公认的说法,是来自Google公司2004年发布的MapReduce论文,而后Doug Cutting根据谷歌的论文,实现了MapReduce,并将其作为Hadoop的一个组件开源。在Hadoop当中,MapReduce也是处于核心组件的地位。

二、MapReduce解决了什么问题?

互联网、移动互联网的高度发达,为数据存储和数据计算都带来了新的挑战。当数据的规模大到一定程度,单独的机器已经无法负荷。那么能够怎么办呢?首先能够想到的办法,就是增加机器。

而要想让一定数量的机器实现协同工作,并且工作效率要求还不低,应该怎么去实现呢?这就是MapReduce需要解决的问题。MapReduce作为一个分布式并行计算框架,就是一个把一群机器组织起来工作的编程模型。

三、MapReduce是怎么解决的?

MapReduce,其实从运行来说,就是分为大的两个阶段的,一个阶段是MapTask(将大任务拆分为小任务),第二个阶段是ReduceTask(小任务计算结果重组),两个阶段之间,有个Shuffle的过程。

MapTask

整个MapTask分为Read阶段,Map阶段,Collect阶段,溢写(spill)阶段和combine阶段。

Read阶段:MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value;

Map阶段:该节点主要是将解析出的key/value交给用户编写map()函数处理,并产生一系列新的key/value;

Collect收集阶段:在用户编写map()函数中,当数据处理完成后,一般会调用OutputCollector.collect()输出结果。在该函数内部,它会将生成的key/value分区(调用Partitioner),并写入一个环形内存缓冲区中;

Spill阶段:即“溢写”,当环形缓冲区满后,MapReduce会将数据写到本地磁盘上,生成一个临时文件。需要注意的是,将数据写入本地磁盘之前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作;

Shuffle

Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle。shuffle流程如下:

  • MapTask收集map()方法输出的kv对,放到环形缓冲区中;
  • 从环形缓冲区不断溢出到本地磁盘文件,可能会溢出多个文件;
  • 多个溢出文件会被合并成大的溢出文件;
  • 在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序;
  • ReduceTask根据自己的分区号,去各个MapTask机器上取相应的结果分区数据;
  • ReduceTask将取到的来自同一个分区不同MapTask的结果文件进行归并排序;
  • 合并成大文件后,shuffle过程也就结束了,进入reduce方法。

ReduceTask

整个ReduceTask分为Copy阶段,Merge阶段,Sort阶段(Merge和Sort可以合并为一个),Reduce阶段。

Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中;

Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多;

Sort阶段:按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可;

Reduce阶段:reduce()函数将计算结果写到HDFS上。

关于大数据入门,MapReduce基本原理,以上就为大家做了一个简单的介绍了。在Hadoop生态当中,MapReduce虽然地位日益尴尬,但是其MapReduce思想,在后来的框架(比如Spark)当中,继续得到了继承。

本文系转载,前往查看

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

本文系转载前往查看

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

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