大数据开发面试知识点总结

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一加六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值