mapreduce接触两周了,跟刚刚接触懵逼的状态相比,现在好像有了更深刻的体会,体会到大数据的牛逼之处,稍微对一些大数据相关的实用案例有点理解。
下面对近期所学的一些mapreduce的相关知识稍稍进行一个总结
【1】常见的计算框架
mapreduce 离线计算框架
storm 流式计算框架(进行实时计算)
spark 内存计算框架(进行快速计算)
【2】mapreduce分布式计算的设计理念
移动计算而不移动数据
【3】mapreduce处理的数据源和目的地分别是?
mr所处理的数据源和所生成的计算结果均存储在HDFS分布式文件系统上
【4】mapreduce的几个阶段
1> 数据源 HDFS
2>split碎片化 进行数据碎片
3>map部分 (分)
4>shuffing部分 ****重点(合并,排序)
5>reduce部分 (合)
6>output 输出结果数据
【5】mr离线计算框架
mr作为计算框架大概可分为三个大模块(input、计算模型、output);
input和output是原始数据的输入和结果数据的输出,并且数据的存储位置均在HDFS上;
而整个环节的重点则是计算模型的实现,数据模型也可细分为三个模块阶段(map、shuffle、reduce),
>map 分割数据
>shuffle 计算排序
>reduce 合并数据
【6】shuffle阶段
位置:shuffle存在于map和reduce函数之间,进行数据的计算和排序
功能:
1:mapp而与reduce的一个中间步骤
2:可以把mapper的输出按照某种key值重新切分成几份和组合成几份,把key值符合某种范围的输出并送到特定的reduce函数去处理
3:可以简化reduce过程
4:大多数功能由框架自动完成
【7】shuffle详
map(内存)数据 ——> partitaion,sort,split to disk ——> disk(磁盘)数据
注:
shuffle的整个过程都在map节点中,其将map的内存输出数据分区按照partation的规则,然后机械能排序,再写入磁盘disk中,(其中partation的
默认规则以hash摸运算为准,当然也可以由程序员自行编写)
【8】partation分区:
分区时为了把map的数据进行负载均衡,解决数据倾斜问题,在分给不同的reduce进行计算处理,以避免各个reduce所处理的数据大小相差过大
【9】map数据不会出现数据倾斜,为什么?
map 的数据来源来自于HDFS,而HDFS的数据已经将数据分为block块,默认为64M,
相反reduc是接收数据的环境,所以必须shuffle进行数据处理,避免数据在进入reduce时出现数据倾斜问题
【10】mr架构
mapreduce也采用主从结构:
主:JobTracker
负责调度分配每一个子任务task运行于TaskTracker上,如果发现有失败的task就重新分配其任务到其他节点,每一个hadoop集群中只有一个JobTracker,一般运行在master节点上
从:TaskTracker
TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务,为了减少网路带宽,TaskTracker最好运行在HDFS的DataNode节点上