图文简述MapReduce

Posted 信息化漫谈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图文简述MapReduce相关的知识,希望对你有一定的参考价值。

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

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

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

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

        

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

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

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

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

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

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

7 Map/Reduce任务的分配:Tasktracker作为MapReduce框架中的Slave节点,会通过一个简单的循环定时(可配置,缺省为10秒)通过RPCJobTracker发送心跳,以便使JobTracker知晓TaskTracker是否存活,同时充当JobTrackerTaskTracker之间的通信通道;TaskTracker在发送的心跳同时,会告知JobTracker自己是否准备好运行新的任务。对于MapReduce任务,每一个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、大容量计算。因分布式计算的优势,适合于数据量大、计算量大的计算过程。

以上是关于图文简述MapReduce的主要内容,如果未能解决你的问题,请参考以下文章

图文简述flume的巨大用途

MapReduceMapReduce中的分区方法Partitioner

大数据框架之Hadoop:MapReduceMapReduce框架原理——OutputFormat数据输出

大数据框架之Hadoop:MapReduceMapReduce框架原理——数据清洗(ETL)

大数据框架之Hadoop:MapReduceMapReduce框架原理——Join多种应用

微信小程序使用 npm 包,举例图文详解