| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 大数据入门(四)MapReduce简介以及工作流程详解 -> 正文阅读 |
|
[大数据]大数据入门(四)MapReduce简介以及工作流程详解 |
?一、MapReduce工作流程总览MapReduce Job(作业)是客户端需要执行的一个工作单元:它包括输入数据、MapReduce程序和配置信息。Hadoop将job分成若干个task(任务)来执行。每个task又包括两类任务:map任务和reduce任务。这些任务运行在集群的节点上,并通过YARN进行调度。如果一个task失败,它将在另一个节点上自动重新调度执行。 整个MapReduce的处理流程如上图所示。 其中Map是映射,负责数据的过滤分发,将原始数据转化成键值对;Reduce是合并,将具有相同key值的value进行处理后再输出新的键值对作为最终结果。为了让reduce可以并行处理map的结果,必须对map的输出进行一定的排序与分割,然后再交给对应的reduce,这个将map输出进行进一步整理并交给reduce的过程就是Shuffle。 一个统计单词个数的MapReduce大致流程如下: 二、MapReduce工作流程之Map阶段假设有一个待处理的文本文件:ss.txt,大小为200MB。 1. 切片(splitting):Hadoop将MapReduce的输入数据拆分成一些小数据块,称为输入分片(InputSplit)。Hadoop会为每个分片创建一个MapTask,并由该任务来运行用户自定义的map函数从而处理分片中的每条记录。这里需要特别注意block和split的区别:block(块)是物理划分,存储文件的具体内容。而split是逻辑划分,只存储文件的元信息(HDFS文件地址、该split的起始位置、该split的文件长度),用于MapTask获取实际文件内容。 将输入数据拆分成输入分片(InputSplit)的类是InputFormat,它的主要作用如下:
如上图所示,InputFormat是一个抽象类。Hadoop默认使用的是TextInputFormat,并且默认切片大小等同于block大小(128MB),因此ss.txt输入文件在切片时会被分成两个InputSplit:0-128MB和128-200MB。最后,Hadoop会将切片信息写到一个切片规划文件中。 关于InputFormat的扩展阅读:MapReduce InputFormat介绍? ??InputFormat子类介绍 2. 提交(Submit):客户端向Yarn集群提出请求创建Mr appmaster并提交切片等相关信息:job.split、wc.jar(集群模式才需要)、job.xml。Yarn调用ResourceManager来创建Mr appmaster,而Mr appmaster则会根据切片的个数来创建MapTask(等同于InputSplit个数)。 3. Map阶段:到这里,Map阶段才正式开始。
到此,其实map阶段的逻辑处理已经结束了,我们可以直接将此中间结果传给reduce进行处理。但是为了减少数据通信开销,中间结果数据进入Reduce节点前会进行一定的合并处理。一个Reduce节点所处理的数据一般来着于许多个Map节点,为了避免Reduce计算阶段发生数据相关性,Map节点输出的中间结果需使用一定的策略进行适当的划分处理,以保证相关性数据发送到同一个Reduce节点。此外,系统还进行一些计算性能优化处理,如对最慢的计算任务采用多备份执行,选最快完成者作为结果等。 因此,在将Map阶段产生的中间结果传给Reduce前,我们需要进行Map端的shuffle操作:数据分区、排序和缓存。
三、MapReduce工作流程之Reduce阶段?在所有MapTask任务都完成之后,会根据分区的数量来启动相应数量的ReduceTask,并告知ReduceTask处理的数据范围(即数据分区,有几个数据分区partition就启动几个ReduceTask,每个ReduceTask专门处理同一个分区的数据,比如ReduceTask1专门处理MapTask1中partition0和MapTask2中partition0的数据)
1. Copy阶段:ReduceTask根据自己的分区号,去各个MapTask机器上拷贝相应分区内的数据到本地内存缓冲区,缓冲区不够的话就溢写到磁盘。 2.?Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。 3.?Sort阶段:按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。 4.?Reduce阶段:执行reduce()函数,并将最终结果写到HDFS上。 四、参考文献https://zhuanlan.zhihu.com/p/85666077 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/28 10:22:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |