大数据开发面试知识点总结
Posted 一加六
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据开发面试知识点总结相关的知识,希望对你有一定的参考价值。
hadoop job执行流程
dataInput–>split–>Mapper–>Combine–>(产出临时数据–>Partition–>Sort–>Reducer–>最终数据。
Mapper阶段
Mapper的数量由输入的大小和个数决定。在默认情况下,最终input占据了多少block,就应该启动多少个Mapper。500M的数据分成四个block(128M*4)就是4个mapper。
分区 排序 溢写 文件合并
partition默认分区 分区器是HashPartitioner 对numReduceTasks取模,模数相同分到同一分区,对key进行排序,当内存缓冲区达到阈值进行溢写到磁盘,产生的多个小文件将合并为一个大文件。分区对应reduce;参考文章
Reduce
Reducer将与一个key关联的一组中间数值集归为一个更小的数值集。它的数据来源可能是多个mapper的某个分区,过程就要进行shuffle,然后对收集到的key进行合并;
reduce的数量可以直接在程序设置job.setNumReduceTasks属性设置
文件中配置根据任务需求
1.调整reduce个数方法一
(1)每个Reduce处理的数据量默认是256MB
hive.exec.reducers.bytes.per.reducer=256000000
(2)每个任务最大的reduce数,默认为1009
hive.exec.reducers.max=1009
(3)计算reducer数的公式
N=min(参数2,总输入数据量/参数1)
2.调整reduce个数方法二
在hadoop的mapred-default.xml文件中修改
设置每个job的Reduce个数
set mapreduce.job.reduces = 15;
3.reduce个数并不是越多越好
1)过多的启动和初始化reduce也会消耗时间和资源;
2)另外,有多少个reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题;
在设置reduce个数的时候也需要考虑这两个原则:处理大数据量利用合适的reduce数;使单个reduce任务处理数据量大小要合适;
hive数据倾斜
产生数据倾斜原因
进行Join group by Distinct这些操作时
1)、key分布不均匀
2)、业务数据本身的特性
3)、建表时考虑不周
4)、某些SQL语句本身就有数据倾斜
当某些key很多进行groupby时,发生数据倾斜,reduce阶段shuffle需要交换合并大量数据
解决
设置hive.map.aggr=true 在map阶段聚合,再把结果merge起来,为了减少reducer处理的数据量。
设置hive.groupby.skewindata=true,有数据倾斜时开启负载均衡
在mapper阶段对key加盐,比如hello,hello,hello-》1_hello,2_hello,3_hello使key能够均匀分布到reduce
spark和hadoop(mapreduce)区别
mapreduce经历map阶段和reduce,且只有map完才能reduce,map阶段溢写将kv数据写到磁盘(耗时),reduce阶段再将map阶段写道磁盘的数据读取再归并排序写道磁盘
适合单次处理非常大的数据,且中间任务数量不多
而spark适合数据规模不是很大,但是中间任务很多的情况
spark利用了DAG有向无环图,利用RDD(弹性分布式数据集)将需要反复用到的数据给 Cache 到内存中,减少数据加载耗时,对迭代次数多的数据友好。
hive外部表和内部表区别
外部表是hdfs文件的映射不储存数据,删除外部表数据部分不会删除,
内部表储存数据,删除内部表数据随之删除
sql语句解析
写一个sql
table1
city_id 城市
level_id 业务线
gmv 销售额
需求输出一个表table2 字段city_id,level_id,gmv
可查询每个城市gmv,每个业务线gmv
select city,null,sum(gmv)
from test
group by city
union
select null,level,sum(gmv)
from test
group by level
以上是关于大数据开发面试知识点总结的主要内容,如果未能解决你的问题,请参考以下文章