hive 写入分区oom

场景:写入大量分区

1.内存优化

列式存储的文件在写入文件之前都会将一定数量的数据缓存在内存中,由于hive每个动态分区目录都会打开一个文件写入器(file writer),所以当存在很多分区的时候,有可能会导致mapper OOM,所以需要增加内存。或者限制每次任务的分区数。另外缓冲区(file buffer)的大小最好跟block一样大,set parquetbuffer/orcbuffer size=blocksize

2.【重点】开启hive.optimize.sort.dynamic.partition

通过explain 发现 动态分区跟sqoop一样 一般是没有reduce的, 每个partition每个map会打开一个filewriter,所以可以强制开启reduce,这样,通过shuffle我们可以为 reducer 中的每个分区保持一个filewriter,从而减少 map内存压力。注意:在hive4.0以后会删除并被替换为 hive.optimize.sort.dynamic.partition.threshold

俄乌大战之际来一张生动的图片
在这里插入图片描述

3. distribute by

每个分区的数据量不大的时候可以使用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值