怎么办?用DolphinScheduler调度执行复杂的HiveSQL时无法正确识别符号

终于解决了!以后碰到类似调度器识别不了SQL里符号的问题,可以用这个方法,把SQL放在SQL文件里,然后在脚本里执行这个SQL文件,这样就能规避这类问题了。
在使用Apache DolphinScheduler调度执行复杂的HiveSQL时,HQL包含多种DolphinScheduler无法正确识别的符号,怎么办?本文提供了可行的思路和方法,供用户参考。



01


目的


在Hive中完成复杂JSON,既有对象还有数组而且数组中包含数组的解析后,原本以为没啥问题了,结果在DolphinScheduler中调度又出现了大问题,搞了一天。试了很多种方法,死了无数脑细胞,才解决了这个问题!



02


HiveSQL



172740723386751a4e1bdb23597a0b1b7f823b18a918c


03


原来的任务调度方式



DolphinScheduler原来的任务调度方式是在shell脚本里添加HiveSQL语句:

1727407255676b9c6d299f3468a930a38b3c43ce2b6bd



04


原先方式报错日志


图片

DolphinScheduler无法正确识别HiveSQL里解析复杂JSON的多种符号。



05


解决方式


把HiveSQL放在一个SQL文件里,然后在脚本里是执行Hive的sourceSQL文件。

1 SQL文件

图片

  • 使用hurys_dc_ods数据库
    use hurys_dc_dwd;
  • hive调优(必须先执行调优语句,否则部分复杂SQL运行会有问题)
    set hive.vectorized.execution.enabled=false;
  • 开启动态分区功能(默认 true,开启)
    set hive.exec.dynamic.partition=true;
  • 设置为非严格模式 nonstrict 模式表示允许所有的分区字段都可以使用动态分区
    set hive.exec.dynamic.partition.mode=nonstrict;
  • 在每个执行 MR 的节点上,最大可以创建多少个动态分区
    set hive.exec.max.dynamic.partitions.pernode=1000;
  • 在所有执行 MR 的节点上,最大一共可以创建多少个动态分区。默认 1000
    set hive.exec.max.dynamic.partitions=1500;

1727407298329ca614eff3d1419a3d8beb595ea2249d3

2 海豚任务执行脚本

图片

1727407298358216b5a907a4242f45262f754567dd9c9

3 执行任务,验证结果

图片

终于解决了!以后碰到类似调度器识别不了SQL里符号的问题,可以用这个方法,把SQL放在SQL文件里,然后在脚本里执行这个SQL文件,这样就能规避这类问题了。
原文链接:https://blog.csdn.net/tiantang2renjian/article/details/140605840


上一篇

下一篇深入工作流调度的内核