首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图文简述MapReduce(一)

图文简述MapReduce(一)

作者头像
希望的田野
发布2019-09-24 13:51:54
5790
发布2019-09-24 13:51:54
举报
文章被收录于专栏:信息化漫谈信息化漫谈

提到大数据,其实最核心的在于计算,像双11实时统计交易量、智慧交通实时统计拥堵指数,这些离不开高并发计算。经常我们在听到mapreduce、以及spark、hive、pig、spark streaming、Storm,很多词语让我们迷茫,但实际万变不离其中,计算最核心的还是在于mapreduce。因此了解mapreduce的运行原理是必须的。

一、首先我们来作一个简单的理解

像下图,在HDFS上有一个超过PB级的数据,我们想统计该数据中China的出现次数,如果按照常规的单机数据检索方法预计需要几天的时间。而通过MapReduce将数据切块(map)至不同的服务器,服务器经过检索运算后,将结果传送至某几台服务器进行合并计算(reduce),最终将计算结果放回HDFS中。如果服务器调度的资源能力够强、服务器数量够多,运算时间能从几天下降到几分钟时间。

二、下面我们来看看详细的工作流程

1 用户JAVA程序代码调用MapReduce的SDK提交计算任务;

2 用户的SDK包向JobTracker获取作业Id;

3 用户的SDK将运行作业所需资源(包括JAR包,作业配置,计算所得的分片信息),发送到HDFS上的公共目录中;

4 用户SDK告知JobTracker作业准备就绪,向JobTracker提交作业;

5 JobTracker初始化作业,将作业加入作业调度队列;

6 JobTracker从HDFS中获取作业的分片信息,根据分片的个数创建对应的对象监控和调度Map任务;

7 Map/Reduce任务的分配:Tasktracker作为MapReduce框架中的Slave节点,会通过一个简单的循环定时(可配置,缺省为10秒)通过RPC向JobTracker发送心跳,以便使JobTracker知晓TaskTracker是否存活,同时充当JobTracker与TaskTracker之间的通信通道;TaskTracker在发送的心跳同时,会告知JobTracker自己是否准备好运行新的任务。对于Map和Reduce任务,每一个TaskTracker都有一定数量的限制,被称为任务槽位,例如,一个TaskTracker只能同时运行两个Map作业和两个Reduce作业,这个个数受到TaskTracker所在的机器的Cpu和内存的限制。另外,JobTracker对于Map任务的分配采取数据本地化和机架本地化原则,尽量使Map任务所在的机器与该Map任务输入的分片数据所在的物理存储处于最近的网络位置;而对于Reduce任务则没有必要做这种考虑;

8 TaskTracker通过心跳通信,获得了一个任务,将作业的JAR包和配置,从HDFS共享目录中复制到本地文件系统,在本地创建临时工作目录,将JAR包解压到临时工作目录中;

9 TaskTracker创建TaskInProgress对象监控和调度Map/Reduce任务。

10 Child子进程会加载JAR包执行Map/Reduce任务,开始任务的执行。

11 最后TaskTracker将结果回写至HDFS中。

三、最后,MapReduce适用哪些场景呢?

1、离线批量计算。因MapReduce调度机制复杂,计算时间长,不适于用流式的实时计算。实时计算建议采用Storm或Spark Streaming

2、大容量计算。因分布式计算的优势,适合于数据量大、计算量大的计算过程。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信息化漫谈 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档