Hive数据倾斜 优化等

1. 内部表和外部表的区别

  1. 导入数据语句一样(load data (local) inpath ‘’ into table tablename)
  2. 删除表时,内部表会删除表的元数据和数据,但外部表只会删元数据

2. sql优化

  1. 查询中不要的column不要写
  2. where条件判断在全表扫描的过滤
  3. 只读指定partition的数据
  4. 调整join顺序,以大表做驱动表,小表存内存
  5. map端用hash聚合,减少reduce端的数据处理规模
  6. 控制map和reduce个数

3. 数据倾斜

什么是数据倾斜:计算时,data多散度不够,导致大量data冲到一台或几台服务器上计算

spark中的数据倾斜

  • exeator lost、com、shuffle过程出错

  • driver com

  • 单个exeator执行很大,整个任务卡住
    正常运行任务突然失败

  • sql如join
    count(distinct) group by

解决:

  1. 从业务逻辑上,单独考虑发生倾斜的数据
  2. 从程序上,如hive中count(distinct),只有一个reduce,可以先在外面group 在count
  3. 调参:临时目录、exeator、cores、memory等
  4. 数据分布:均匀上传或异常数据处理

处理:

方法1:找到并过滤
方法2:对分布不均的单独弄;对key做hash,先打散在聚集
方法3:数据预处理

优化:

hadoop

  1. map join方式
  2. left semi join
  3. count distinct,先group 在count
  4. 设hive.group by.skewindata=true避免数据倾斜,将1个job分为2个,只有在count和count distinct,才有作用
  5. 设置map端,中间结果压缩,不仅可解决数据倾斜,还可以减少IO读写和网络传输

spark

  1. mapjoin方式
  2. 增加并行度,减少序列化反序列化负担
  3. 合理设置drive的内存
  4. 优化spark sql与hive类似

hive

  1. 分区,设置动态分区
  2. 减少存储空间和ID 压缩数据(压缩map和中间结果等)
  3. hive中间表以sequencefile保存,节约序列化和反序列化空间,
    hive.query.result.filter=sequenctfile
  4. yarn优化

sql

  • rank:按照排序生成排名,相同字段不去重
    select rank() over(order by [time] desc) from tablename;
  • row-number:按照排序生成排名,相同字段顺序往下
    ①排名算法必须有over子句
    ②排名函数必须有含order by 的over子句
  • join
    内连接
    外连接
    左半连接:前面为全表,返回主表中k在副表的记录,相当于in或exists

hive的join只支持相等连接,不支持不等连接
如select * from a join b on a.id<>b.id;

可以参考:https://www.cnblogs.com/qingyunzong/p/8847597.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值