**
- 对SQL语句的优化 统计个数使用count(1),不要使用count(*)
- 查询字段不要select * ,使用select 字段
- 使用特殊的存储格式 列式存储:ORC,parquet 建表的时候 stored as orc
- 小表join大表(MR程序中的map端 jojn) 小表是个小文件可以分布式的缓存到集群的其他的maptask中,就不需要reduce端join
- 开启map端的局部聚合 默认是开启的
- 避免count(distinct)
- 进行join的时候避免笛卡儿积
- 适当的调整maptask的个数和reducetask的个数
- 测试数据在本地运行 没有问题了再放到yarn上运行 使用脚本来调度我们写的sql语句—hive -f
**
Hive中的数据倾斜
数据倾斜产生的根本原因就是shuffle ,上游的数据到下游 ,可能会出现下游数据分发不均匀的这种情况
解决方法
1:重写分区逻辑
2:重新设计key—>打散key
3:增加reduce 的个数
4:增加reduce的内存
5:先在map端进行局部聚合 再到reduce端进行全局聚合 会减少reduce端的压力
6:将reduce的join变成map端的join
7:避免reduce能不要reduce就不要reduce