背景
为了让业务验收sql,特意一周时间在搞sql测试,测试环境中的运行一点问题都没有,但是一上生产,之前成功的代码,基本全军覆没。公司的数仓架构是Hive+Doris的形式,就是数仓在Hive上建立,最后的ads层要映射到Doris中,帆软通过读取Doris中的数据去进行可视化展示。
问题
测试环境中的Hive建表语句验收基本完毕,但是一到生产环境,hive中的表没有内容,dws与dwt数据正常,唯独ads层的hour这边没有数据。因为调度也没有报错,于是自己在服务器通过hive -f XX.sql去跑,果不其然就报错,基本是轮询异常等。
解决
在每个sql文件上面添加五个参数,设置hive的内存。
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=10000000;
set hive.exec.max.dynamic.partitions =10000000;
set hive.exec.max.created.files =10000000;
set hive.auto.convert.join=false;
经验
生产环境相对于测试环境会数据量比较多,容易照成OOM。还是把hive的参数往最大化设置。