好程序员大数据学习路线分享MapReduce全流程总结

本文深入解析MapReduce在大数据处理中的核心流程,从数据输入、Map处理、shuffle过程、Reduce处理到输出,详细阐述了各阶段的数据处理逻辑及关键技术点。

  好程序员大数据学习路线分享MapReduce 全流程总结,首先, MapReduce 是什么?干什么用的?

  MapReduce 是一个基于 yarn 的分布式、离线、并行的计算框架,主要职责是处理海量数据集,是 Hadoop 生态圈中一个非常重要的一个工具,所以 MapReduce 是大数据学习的一个很关键的知识点,需要大家好好掌握!

  MapReduce 其中包含许多组件,但最主要的还是 Job 提交和 Map Reduce 的全流程这两个部分 , 学习中只要把握好这两条主线理清楚细节串成一个知识体系,那么 MapReduce 的学习就会得心应手了。关于 Job 作业的提交流程在 Hadoop 权威指南这本书上有相当详细的步骤解析和图示说明,那么这次总结主要关于 MapReduce 过程中海量数据是怎么被提取并在 MapTask ReduceTask 中被处理,以及其中涉及运用的组件,让我们一起来看看吧。

  

  上面的图从整体上描述了整个MapRduce 流程,大致分为五个步骤

  1 input map 端读取分片数据) --->2 Map 处理 --->3 shuffle 过程 --->4 reduce 处理 --->5 output reduce 端输出处理结果) 现在我们一步步来分析解释这个过程。注:MP 的整个过程中数据结构为 :key-value

1、   Map 端读取数据

a 、在读取之前,客户端会对数据进行切片处理, 分片机制如下,一个分片对应一个map,可调整客户端的块大小,minSize,maxSize改变map数量,minSize默认值是1,maxSize默认是long的最大值

b 、如下图所示,先对数据进行 TextInputFormat 格式化,然后 lineRecordReader 循环调用

nextKeyValue getCurrentKey getCurrentValue 等方法将数据以 <K,V> 形式获取到 MapTask

c 、切片读取细节:每次读取都往下多读取一行 ( 第一个切片 ) ;下一个切片永远抛弃第一行;最后一个切片不能多读一行


2、   Map 处理

a 、在 Map 端,调用我们按照业务逻辑编写的 map() 方法,每一行调用一次 map() 方法对数据进行处理,有且仅有一次,分别在调用 map 方法前调用 setup() 方法和在在调用 map 方法后调用 cleanup() 方法

在这个阶段,数据会被分解成一个个<K,V> 形式的键值对

b 、在这个阶段,可以有一个 combiner 过程,将数据进行局部整合(当数据量太大时), combiner 能调用


3、   shuffle 过程:是指数据从 Map 端输出到 Reduce 端输入这中间对数据的操作过程(数据分区、排序、缓存)

a、 输出从map 端输出后,会进入到 outputCollector, 一个数据收集器,然后由数据收集器将数据传进一个有 20% 保留区的环形缓冲区 ( 一般是 100M)

b、 当数据在环形缓冲区溢出时,会有一个spiller 溢出器,在溢出器中会将数据调用 getPartition(k,v,num) 方法分区,然后根据 hashcode 在分区内进行快速排序,之后将数据发往 Reduce

4、   reduce 处理

a、 经过shuffle 过程处理的数据,是分区并排序的 index 索引文件,而 reducetask 框架从文件中读取一个 key 传递给 reduce 方法,同时传一个 value 迭代器

b、Value 迭代器的 hasnext 方法会判断文件中的下一个 key 是否是传入时的 key (如果是,则返回该 value ,如果不是,则停止,转而调用下一个 key

c、 看起来的效果,reducetask 是将数据事先分组,每组调用一次 reduce 方法(其实不是)

d、reducetask 处理完后,将所有分区文件进行归并排序生成大文件输出(默认输出到 hdfs

e、

5、   output reduce 端输出处理结果)

  对数据进行TextOutputFormat 处理,然后 lineRecordWritor 循环调用

nextKeyValue getCurrentKey getCurrentValue ,输出到外部文件系统( hdfs

 

以上就是mapreduce 对数据处理的全流程,这个阶段的代码比较简单,只要把逻辑和数据处的思路和方向把握好,写代码也就手到擒来了


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69913892/viewspace-2655431/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69913892/viewspace-2655431/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值