hive动态分区报错

HIVE动态分区,由于动态分区个数过多,map端内存溢出,报错。

containerID=container_e86_1608865192015_2953765_01_000002] is running beyond physical memory limits. Current usage: 3.0 GB of 3 GB physical memory used; 5.1 GB of 6.3 GB virtual memory used. Killing container. Dump of the process-tree for container_e86_1608865192015_2953765_01_000002 : |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINEattempt_1608865192015_2953765_m_000000_0 94557999988738 1>/data/data24/yarn/container-logs/application_1608865192015_2953765/container_e86_1608865192015_2953765_01_000002/stdout 2>/data/data24/yarn/container-attempt_1608865192015_2953765_m_000000_0 94557999988738 Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143

解决方式:启用hive.optimize.sort.dynamic.partition,将其设置为true。通过这个优化,这个只有map任务的mapreduce会引入reduce过程,这样动态分区的那个字段比如日期在传到reducer时会被排序。分区字段是会做排序的,因此每个reducer只需要保持一个文件写入器(file writer)随时处于打开状态,在收到来自特定分区的所有行后,关闭记录写入器(record writer),从而减小内存压力。这种优化方式在写parquet文件时使用的内存要相对少一些,但代价是要对分区字段进行排序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值