一、MapReduce执行原理
Map主要负责数据的读取,同时对读取的数据进行逻辑处理获取到k-v键值对,然后根据
key的值判断数据属于哪个分区,也就是说将一个大的数据文件切分成多份。Raduce负责从Map端拉取数据并对数据按照分区进行存放,每一个分区对应一个Raduce,之后再进行数据结果的输出,但其实Map和Reduce中间还存在一个Shuffle过程,suffle会对map分割的数据块进行按分区排序处理然后在读取数据达到自身容量百分之八十的时候开始对Reduce端进行数据输出
Reduce则对已排好序的数据根据业务需求做进一步的处理 。
二、hive的架构以及执行流程是什么?
hive是一个数仓管理工具,可以将hfs中的数据文件转换成数据表格的形式进行输出,hive的架构主要分为 metastore client mapreduce hdfs ,hive客户端可以根据用户编写的hql去解析用户的需求,然后根据去求去meta store中获取相关元数据,从而通过元数据用mapreduce去对hdfs中的数据进行读取和处理,最终以数据表格的形式呈现给用户。
三、什么是数据倾斜,导致数据倾斜发生的原因是什么?当数据倾斜发生后如何处理数据倾斜?
简单的讲,数据倾斜就是我们在计算数据的时候,数据的分散度不够,导致大量的数据集中到了一个或者几个分区上计算,造成数据倾斜问题,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。
导致数据倾斜的主要原因有如下几方面:
1、数据的key值分布不均,导致大量数据分配到同意分区
2、sql语句导致数据倾斜(如jion,group by 等等)
3、业务数据本身特性(如电商平台中的爆款商品)
如何解决数据倾斜?
1、在map端进行负载均衡的相关设置(set hive.map.aggr=true ;set hive.groupby.skewindata=true)
ps:负载均衡的原理 利用随机分配将相同分区的key值分配到不同的reduce中进行聚合处理将数据打散,聚合在成之后再有第二轮的mapreduce来对key值进行分区处理,即可规避掉数据倾斜问题。
2、优化相关SQL语句
3、增加reduce数量
修改reduce数量的方法:在hadoop的mapred-default.xml中修改
set mapreduce.job.reduces=15 即每个job的reduce数量为15