云原生数据仓库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场景

典型的ETL流程如下图。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作业

  1. 云原生数据仓库AnalyticDB MySQL控制台
  2. 在页面左上角,选择集群所在地域。
  3. 在左侧导航栏,单击集群列表
  4. 湖仓版(3.0)页签下,单击目标集群ID
  5. 在左侧导航栏,单击作业开发 > SQL开发
  6. SQLConsole窗口,选择Job型资源组和XIHE引擎。
  7. 输入要执行的SQL语句,并单击执行SQL
  8. 等待SQL执行完成后,下方执行结果页签会显示结果。
    说明执行记录页签,可单击操作列的结果下载执行结果。单击操作列的诊断,查看SQL语句诊断详情。

方式二:使用JDBC或MySQL客户端同步提交BSP作业

  1. 通过JDBC或MySQL客户端连接AnalyticDB MySQL湖仓版(3.0)集群。详情请参见MySQL命令行连接AnalyticDB MySQL
  2. 通过Hint方式,手动指定Job型资源组。示例如下:
    /*resource_group=<resource_group_name>*/ 
    SELECT count(*) from test_db.ods_hudi;
    重要
    • resource_group_name为Job型资源组的名称。
    • 每次执行的SQL语句都需要添加Hint。

方式三:使用JDBC或MySQL客户端异步提交BSP作业

异步提交与同步提交的差异,请参见常见问题中的如何选择BSP作业的同步提交与异步提交方式章节。

  1. 通过JDBC或MySQL客户端连接AnalyticDB MySQL湖仓版(3.0)集群。详情请参见MySQL命令行连接AnalyticDB MySQL
  2. 通过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。
  3. 异步方式提交后,可根据返回结果中的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_timeoutBSP作业的默认超时时间,单位:毫秒(ms)。BSP作业的执行时间大于该配置值时,作业会被系统自动取消。7200000
并发支持的配置项及说明,请参见优先级队列与并发控制

常见问题

如何查看BSP作业的状态

  • 如果是通过作业编辑器提交的BSP作业,可在作业编辑器 > SQL开发页面下方的执行记录页签查看。
  • 如果不是通过作业编辑器提交的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 SELECTINSERT OVERWRITE SELECTCREATE TABLE AS SELECT等)使用异步提交。