背景:
数据中台项目使用Spark+Hive+Paimon做湖仓底层,调度任务使用的是基于Dolphinscheduler进行二开。在做离线脚本任务开发时,在Paimon库下执行非查询类SQL报错。
INSERT报错
DELETE报错
现状:
原始逻辑为数据中台中选择的Paimon数据源,实际上在Dolphinscheduler中是选择的Hive数据源。所以在Dolphinscheduler中,实际上是选择了一个SQL类型的任务节点,数据原类型选择Hive。执行后就会报以上两个错误。
排查思路以及解决方案:
在这种多组件复杂环境的情况下去排查问题,需要分段排查。首先确认是否是数据中台代码的问题。
1. 脱离数据中台直接在Dolphinscheduler创建一个工作流,任务节点选择SQL,选择Hive数据源执行insert代码。发现是同样的报错。
所以可以先排除是数据中台在创建Dolphinscheduler工作流的问题,但这不代表原逻辑正确。
2. Dolphinscheduler只是一个调度,除非是他无法实现这个功能,基本上不会出现问题,所以继续向下排查。
3. 排查Spark+Hive+Paimon
分别来看一下这三个组件在数据中台中的作用
Spark+Hive
在我们的中台中,是Spark on Hive 是Hive只作为存储角色,Spark负责sql解析优化,执行。也就是Spark 通过Spark SQL 使用Hive 语句操作Hive表 ,底层运行的还是 Spark RDD。
具体步骤如下: