云原生数据仓库AnalyticDB MySQL版支持通过SQL开发编辑器或JDBC方式提交XIHE BSP作业。本文介绍XIHE BSP作业开发适用的场景、提交方法、常见配置参数及常见问题。
前提条件
- 已创建Job型资源组。详情请参见新建资源组。
- 如果您使用RAM用户(子账号)登录AnalyticDB MySQL,需要将使用的RAM用户绑定到AnalyticDB MySQL的数据库普通账号。具体操作,请参见绑定或解绑RAM用户与数据库账号。
- 数据库高权限账号默认绑定阿里云账号(主账号),可以直接提交XIHE BSP作业。
应用场景
XIHE BSP作业使用XIHE BSP引擎执行。关于XIHE BSP引擎的更多内容,请参见计算引擎。
在ETL场景、大查询、突发低优先级查询中,适合采用XIHE BSP模式进行作业开发。
ETL场景

从数据源到ADS层的数据清洗、数据转换等操作通常数据量较大,耗时较长。一般不需要关心具体查询的响应时间,只要整体清洗流程能够在特定时间点前完成,但对可靠性要求更高,需要支持自动重试等能力。这部分查询可以使用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作业开发
您可以采用以下任意一种方式开发XIHE BSP作业。
方式一:使用作业编辑器提交BSP作业
- 云原生数据仓库AnalyticDB MySQL控制台。
- 在页面左上角,选择集群所在地域。
- 在左侧导航栏,单击集群列表。
- 在湖仓版(3.0)页签下,单击目标集群ID。
- 在左侧导航栏,单击 。
- 在SQLConsole窗口,选择Job型资源组和XIHE引擎。
- 输入要执行的SQL语句,并单击执行SQL。
- 等待SQL执行完成后,下方执行结果页签会显示结果。说明 在执行记录页签,可单击操作列的结果下载执行结果。单击操作列的诊断,查看SQL语句诊断详情。
方式二:使用JDBC或MySQL客户端同步提交BSP作业
- 通过JDBC或MySQL客户端连接AnalyticDB MySQL湖仓版(3.0)集群。详情请参见MySQL命令行连接AnalyticDB MySQL。
- 通过Hint方式,手动指定Job型资源组。示例如下:
/*resource_group=<resource_group_name>*/ SELECT count(*) from test_db.ods_hudi;
重要- resource_group_name为Job型资源组的名称。
- 每次执行的SQL语句都需要添加Hint。
方式三:使用JDBC或MySQL客户端异步提交BSP作业
异步提交与同步提交的差异,请参见常见问题中的如何选择BSP作业的同步提交与异步提交方式章节。
- 通过JDBC或MySQL客户端连接AnalyticDB MySQL湖仓版(3.0)集群。详情请参见MySQL命令行连接AnalyticDB MySQL。
- 通过Hint方式,手动指定Job型资源组并添加
/*query_submission_type=async*/
以异步方式提交BSP作业。示例如下:/*resource_group=<resource_group_name>, query_submission_type=async*/ SELECT count(*) from test_db.ods_hudi;
重要- resource_group_name为Job型资源组的名称。
- 每次执行的SQL语句都需要添加Hint。
- 异步方式提交后,可根据返回结果中的job_id查询异步作业执行状态。
SHOW job status WHERE job='<job_id>';
说明 如果作业已执行成功,可以通过返回结果中的result_url
字段中的链接下载对应的结果csv文件,或者通过SHOW job result WHERE job='<job_id>';
命令查询结果集。
XIHE BSP作业配置
若需要调整单个查询所使用的计算节点数、计算资源及默认超时时间,可使用如下方式进行调整。
配置方法
- 方式一:通过Hint方式配置,只对单个查询生效。示例如下:
/*elastic_job_max_acu=20*/SELECT count(*) from test_db.ods_hudi;
- 方式二:通过SET adb_config方式配置,对全局生效或在单个资源组内生效。示例如下:
# 全局生效 SET adb_config elastic_job_max_acu=20; # 在单个资源组内生效 SET adb_config <resource_group_name>.elastic_job_max_acu=20;
配置项列表
XIHE BSP作业支持的配置项如下。
分类 | 配置项名称 | 说明 | 默认值 |
---|---|---|---|
资源 | elastic_job_max_acu | 单个查询所使用的最大ACU数(包括
AppMaster节点与计算节点)限制。 取值不能超过资源组的计算最大资源的ACU数。 | 9 |
超时时间 | batch_query_timeout | BSP作业的默认超时时间,单位:毫秒(ms)。BSP作业的执行时间大于该配置值时,作业会被系统自动取消。 | 7200000 |
并发 | 支持的配置项及说明,请参见优先级队列与并发控制。 |
常见问题
如何查看BSP作业的状态
- 如果是通过作业编辑器提交的BSP作业,可在执行记录页签查看。 页面下方的
- 如果不是通过作业编辑器提交的BSP作业,可通过系统内部提供的内存表查看。查询方法如下:
SELECT status FROM information_schema.kepler_meta_elastic_job_list WHERE process_id='<job_id>';
说明 该内存表中会保存最近30天提交的BSP任务,最多保存1000个。您可对该内存表进行聚合等操作,进一步统计。方法如下: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
等)使用异步提交。