运行hive sql时报错Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

当我们在第三方软件或者在黑窗口中运行hive sql中的insert语句时,弹出这样的错误:[08S01][2] Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask。

出现这样的错误的原因一般是因为hive中MapReduce任务执行默认单个节点(Node)可以创建的最大动态分区数为100,此时执行任务所需要的超过100了(由于我的日志给清除了,没办法给出具体日志信息),此时我们只需要设置如下几行代码:

SET hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions = 100000;
set hive.exec.max.dynamic.partitions.pernode=10000;

第一行代码用于开启动态分区

第二行代码用于设置动态分区的非严格模式,允许所有分区字段都是动态的(即分区字段的值来自查询结果)。 如果所有分区字段都是动态的(如 PARTITION(partition_date) 中的 partition_date 来自查询结果),必须设置为 nonstrict

第三行代码用于设置单个查询可以创建的最大动态分区数为100000。如果查询结果中分区字段的值很多(如按天分区,数据跨越多天),需要增加该值以避免报错。设置过大会增加 Hive 元数据和 HDFS 的压力,需根据实际数据量调整。

第四行代码用于设置单个节点(Node)可以创建的最大动态分区数为10000。如果单个节点处理的数据量较大,需要增加该值以避免报错。该值不能超过 hive.exec.max.dynamic.partitions。

 这些配置可以帮助优化动态分区插入操作,避免因分区数量过多而导致的错误。根据实际数据量和集群规模,可以适当调整这些参数的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值