云原生数据仓库 AnalyticDB MySQL 版支持通过SQL开发编辑器或JDBC方式提交XIHE BSP SQL作业。本文介绍XIHE BSP SQL作业开发的适用场景、提交方法、常见配置参数及常见问题。
前提条件
已在企业版、基础版或湖仓版集群中创建Job型资源组。具体操作,请参见新建资源组。
已创建企业版、基础版或湖仓版集群的数据库账号。
应用场景
XIHE BSP SQL作业由XIHE BSP引擎执行,适用于ETL场景、大查询、突发低优先级查询。关于XIHE BSP引擎的更多内容,请参见计算引擎。
ETL场景
典型的ETL流程如下图。
从数据源到ADS层的数据清洗、数据转换等操作通常数据量较大,耗时较长。一般不需要关心具体查询的响应时间,只要整体ELT流程能够在特定时间点前完成,对可靠性要求更高,需要支持自动重试等能力。这部分查询可以使用XIHE BSP方式执行,充分利用XIHE BSP吞吐量大、可靠性更高、成本更低的优势。
对于ADS层的查询,通常对查询响应时间更加敏感,常要求秒级甚至毫秒级的响应,这部分查询可以使用XIHE MPP方式执行,以充分利用XIHE MPP引擎速度更快的优势。
XIHE MPP方式无法执行的大查询
由于XIHE MPP执行方式的限制,部分数据量较大的查询可能出现内存报错、查询异常等情况。如果仍要在XIHE MPP方式下执行,需要进行扩容等操作来增加更多的资源,从成本来看并不经济。此时可尝试使用XIHE BSP方式执行,查询会在指定的Job型资源组中执行数据落盘,对于大查询更加友好,且Job型资源组的资源按需申请、按需付费,成本也会更低。
突发的低优先级查询
低优先级查询通常对响应时间不敏感,但由于其突发性,系统资源可能不足,可能影响其他查询的正常执行。此时可尝试将这些低优先级查询放入Job型资源组以XIHE BSP方式执行,缓解系统的资源压力,防止查询之间的互相影响。
使用限制
不支持通过XIHE BSP方式写Hudi表。
不支持通过XIHE BSP方式读写Delta表。
开发XIHE BSP作业
您可以采用以下任意一种方式开发XIHE BSP作业。
使用SQL开发编辑器提交XIHE BSP作业
使用JDBC或MySQL客户端同步提交XIHE BSP作业
使用JDBC或MySQL客户端异步提交XIHE BSP作业
配置XIHE BSP作业
您可以设置一个XIHE BSP作业可以使用的资源、默认超时时间和优先级。
配置方法
BSP作业的配置,可以仅对单个作业生效,可以对单个Job型资源组执行的所有作业生效,也可以对集群所有的作业生效。
仅对单个作业生效
通过Hint/*+ resource_group=<resource_group_name>,<config_name>*/
,使作业配置只对单个作业生效。
其中resource_group_name
为资源组名称,config_name
为配置项列表中的配置项名称。
示例:指定在Job型资源组bsptest中执行作业,该作业最多可使用20 ACU。
/*+ resource_group=bsptest,elastic_job_max_acu=20*/SELECT count(*) from test_db.ods_hudi;
资源组内生效
通过SET adb_config <resource_group_name>.<config_name>
,使作业配置对某个Job型资源组内执行的所有作业均生效。
其中resource_group_name
为资源组名称,config_name
为配置项列表中的配置项名称。
示例:在Job型资源组bsptest中执行的所有作业,每个作业最多可使用20 ACU。
SET adb_config bsptest.elastic_job_max_acu=20;
查看配置是否生效
查看资源组的作业配置是否生效,可以使用SHOW ADB_CONFIG KEY=<resource_group_name>.<config_name>
。
集群内生效
通过SET adb_config <config_name>
,使作业配置对集群内执行的所有作业均生效。其中config_name
为配置项列表中的配置项名称。
示例:在集群中执行的所有作业,每个作业最多可使用20 ACU。
SET adb_config elastic_job_max_acu=20;
查看配置是否生效
查看集群的作业配置是否生效,可以使用SHOW ADB_CONFIG KEY=<config_name>
。
配置项列表
XIHE BSP作业支持的配置项如下。
分类 | 配置项名称 | 说明 | 默认值 |
资源 |
| 单个XIHE BSP作业所使用的最大ACU数(包括AppMaster与计算节点)限制。 取值不能超过资源组的计算最大资源的ACU数。 说明 AppMaster节点是负责单次查询的解析、任务调度与执行的节点。 | 9 |
超时时间 |
| BSP作业的超时时间,单位:毫秒(ms)。BSP作业的执行时间大于该配置值时,作业会自动取消。 | 7200000 |
优先级 |
| BSP作业的优先级。 取值:HIGH、NORMAL、LOW和LOWEST。 关于优先级队列,详情请参见Job型资源组的优先级队列。 | NORMAL |
常见问题
如何查看BSP作业的状态
如果是通过作业编辑器提交的BSP作业,可在
页面下方的执行记录页签查看。如果不是通过作业编辑器提交的BSP作业,可通过
information_schema.kepler_meta_elastic_job_list
表查看。查询方法如下:SELECT status FROM information_schema.kepler_meta_elastic_job_list WHERE process_id='<job_id>';
说明information_schema.kepler_meta_elastic_job_list
表中会保存最近30天提交的BSP任务,最多保存1000个。您可对该表进行聚合等进一步统计分析。以下示例为统计各个状态的BSP作业数量。SELECT status,count(*) FROM information_schema.kepler_meta_elastic_job_list GROUP BY status;
如何选择BSP作业的同步提交与异步提交方式
同步提交与异步提交功能上并无差别,区别仅在于客户端是否需要等待查询执行完成。
异步提交会有如下限制:
结果集返回最多10000行。
结果集(包括对应的csv文件下载链接)最多保存30天,最多保存1000个。
建议对执行时间较长、计算量较大,但结果集较小的查询(如INSERT INTO SELECT
、INSERT OVERWRITE SELECT
、CREATE TABLE AS SELECT
等)使用异步提交。