全部產品
Search
文件中心

AnalyticDB:通過Spark SQL讀MySQL資料

更新時間:Oct 11, 2024

AnalyticDB for MySQL支援提交Spark SQL作業,您可以通過View或Catalog兩種方式訪問自建MySQL資料庫或雲資料庫RDS MySQL、雲原生資料庫 PolarDB MySQL。本文以RDS MySQL為例,介紹如何通過Spark SQL訪問RDS MySQL資料。

前提條件

  • AnalyticDB for MySQL叢集的產品系列為湖倉版

  • AnalyticDB for MySQL叢集與RDS MySQL執行個體位於同一地區。

  • 已在AnalyticDB for MySQL叢集中建立Job型資源群組。具體操作,請參見建立資源群組

  • 已建立AnalyticDB for MySQL叢集的資料庫帳號。

  • 已將RDS MySQL執行個體添加到安全性群組中,且安全性群組規則的入方向與出方向允許存取RDS MySQL連接埠的訪問請求。具體操作,請參見設定安全性群組添加安全性群組規則

步驟一:資料準備

在RDS MySQL中建立資料庫和表,並插入資料。樣本語句如下:

CREATE DATABASE `db`;

CREATE TABLE `db`.`test` (
  `id` int(11) DEFAULT NULL,
  `first_name` varchar(32) DEFAULT NULL,
  `laster_name` varchar(32) DEFAULT NULL,
  `age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;

INSERT INTO test VALUES(1,'a','b',5);
INSERT INTO test VALUES(2,'c','d',6);
INSERT INTO test VALUES(3,'e','f',7);

(可選)步驟二:上傳CA認證及RDS MySQL驅動程式

說明

如果您不需要通過SSL鏈路訪問RDS MySQL資料,可跳過該步驟,直接提交Spark SQL作業,詳情請參見提交Spark SQL作業

  1. 為RDS MySQL執行個體開啟SSL加密,並下載CA認證。具體操作,請參見使用雲端認證快速開啟SSL鏈路加密

    重要
    • 開啟SSL加密時可以選擇加密內網或公網鏈路。本文中必須加密內網鏈路。

    • CA認證的預設有效期間為1年,到期需要重建。 使用到期的CA認證則無法通過SSL鏈路訪問RDS的資料。

  2. 在官方網站下載適配RDS MySQL版本的驅動程式。下載地址,請參見https://dev.mysql.com/downloads/connector/j/

    本文以mysql-connector-java-8.0.29.jar包為例。

  3. 解壓CA認證壓縮包,並將JKS檔案和RDS MySQL驅動程式上傳至OSS中。具體操作,請參見上傳檔案

步驟三:提交Spark SQL作業

  1. 登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,在湖倉版頁簽下,單擊目的地組群ID。

  2. 在左側導覽列,單擊作業開發 > SQL開發

  3. SQLConsole視窗,選擇Spark引擎和Job型資源群組。

  4. SQLConsole視窗中按訪問方式輸入以下作業內容:

    View方式訪問

    View方式訪問資料時建立的視圖為臨時視圖,不會被持久化,每次啟動作業時需重新建立視圖。通過View方式訪問RDS MySQL資料時,也可進一步選擇通過ENI或SSL加密鏈路訪問

    通過ENI訪問RDS MySQL資料

    set spark.adb.eni.enabled=true;
    set spark.adb.eni.vswitchId=<vsw-bp1sxxsodv28ey5dl****>;   
    set spark.adb.eni.securityGroupId=<sg-bp19mr685pmg4ihc****>;    
    
    CREATE TEMPORARY VIEW table_tmp
    USING org.apache.spark.sql.jdbc
    OPTIONS (
      url '<jdbc:mysql://rm-bp1k87323a7ia****.mysql.rds.aliyuncs.com:3306>',     
      dbtable '<db.test>',    
      user '<user>',       
      password '<password>'      
    );
    
    select * from table_tmp;

    參數說明如下:

    參數

    說明

    spark.adb.eni.enabled

    開啟ENI訪問。

    訪問資料時,需將spark.adb.eni.enabled參數設定為true

    spark.adb.eni.vswitchId

    交換器ID。在RDS MySQL執行個體的資料庫連接頁面,將滑鼠移動至VPC處,擷取交換器ID。

    spark.adb.eni.securityGroupId

    RDS MySQL執行個體中添加的安全性群組ID。如未添加安全性群組,請參見設定安全性群組

    table_tmp

    視圖名稱。本文以table_tmp為例。

    USING org.apache.spark.sql.jdbc

    參數取值固定為USING org.apache.spark.sql.jdbc

    OPTIONS

    • url:RDS MySQL執行個體的內網地址和連接埠。格式為:jdbc:mysql://rm-bp1k87323a7ia****.mysql.rds.aliyuncs.com:3306

    • dbtable:RDS MySQL的表名。格式為db_name.table_name。本文以db_1.table_11為例。

    • user:RDS MySQL資料庫的帳號。

    • password:RDS MySQL資料庫帳號的密碼。

    通過SSL鏈路訪問RDS MySQL資料

    add jar oss://<bucketname>/mysql-connector-java-8.0.11.jar;
    set spark.app.name=SSL_RDS_SQL;
    set spark.adb.eni.enabled=true;
    set spark.adb.eni.vswitchId=<vsw-bp1sxxsodv28ey5dl****>;
    set spark.adb.eni.securityGroupId=<sg-bp19mr685pmg4ihc****>;
    set spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES=oss://<bucketname>/ApsaraDB-CA-Chain.jks;
    set spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES=oss://<bucketname>/ApsaraDB-CA-Chain.jks;
    
    CREATE TEMPORARY VIEW table_view
    USING org.apache.spark.sql.jdbc
    OPTIONS (
      url '<jdbc:mysql://rm-bp1k87323a7ia****.mysql.rds.aliyuncs.com:3306/?useSSL=true&clientCertificateKeyStoreUrl=file:///tmp/<bucketname>/folder/ApsaraDB-CA-Chain.jks&clientCertificateKeyStorePassword=apsaradb&trustCertificateKeyStoreUrl=file:///tmp/<bucketname>/folder/ApsaraDB-CA-Chain.jks&trustCertificateKeyStorePassword=apsaradb&trustCertificateKeyStoreType=JKS&clientCertificateKeyStoreType=JKS>',
      dbtable '<db.test>',
      user '<user>',
      password '<password>'
    );

    參數說明如下:

    參數

    說明

    add jar

    RDS MySQL驅動程式所在的OSS路徑。

    本文樣本為mysql-connector-java-8.0.11.jar包所在的OSS路徑

    spark.app.name

    Spark SQL作業名稱。

    spark.adb.eni.enabled

    開啟ENI訪問。

    訪問資料時,需將spark.adb.eni.enabled參數設定為true

    spark.adb.eni.vswitchId

    交換器ID。在RDS MySQL執行個體的資料庫連接頁面,將滑鼠移動至VPC處,擷取交換器ID。

    spark.adb.eni.securityGroupId

    RDS MySQL執行個體中添加的安全性群組ID。如未添加安全性群組,請參見設定安全性群組

    spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES

    Spark Driver節點參數,用於指定JKS認證所在的OSS路徑。多個JKS認證中間用英文逗號(,)分隔。例如:spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES: "oss://testBucketName/a.jks,oss://testBucketName/b.jks"

    spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES

    Spark Executor節點參數,用於指定JKS認證所在的OSS路徑。多個JKS認證中間用英文逗號(,)分隔。例如:spark.executor.ADB_SPARK_DOWNLOAD_FILES: "oss://testBucketName/a.jks,oss://testBucketName/b.jks"

    table_view

    視圖名稱。本文以table_view為例。

    USING org.apache.spark.sql.jdbc

    參數取值固定為USING org.apache.spark.sql.jdbc

    OPTIONS

    • url:RDS MySQL執行個體的內網地址、連接埠及SSL鏈路對應參數。格式為jdbc:mysql://rm-bp1k87323a7ia****.mysql.rds.aliyuncs.com:3306/?useSSL=true&clientCertificateKeyStoreUrl=file:///tmp/<bucketname>/folder/ApsaraDB-CA-Chain.jks&clientCertificateKeyStorePassword=apsaradb&trustCertificateKeyStoreUrl=file:///tmp/<bucketname>/folder/ApsaraDB-CA-Chain.jks&trustCertificateKeyStorePassword=apsaradb&trustCertificateKeyStoreType=JKS&clientCertificateKeyStoreType=JKS

      SSL鏈路對應參數的詳細資料,請參見參數說明

    • dbtable:RDS MySQL的表名。格式為db_name.table_name。本文以db.test為例。

    • user:RDS MySQL資料庫的帳號。

    • password:RDS MySQL資料庫帳號的密碼。

    Catalog方式訪問

    set spark.adb.eni.enabled=true;
    set spark.adb.eni.vswitchId=<vsw-bp1d14ddiw46fkgu1****>;
    set spark.adb.eni.securityGroupId=<sg-bp19varsa8j0hyb****>;
    set spark.sql.catalog.jdbc=org.apache.spark.sql.execution.datasources.v2.jdbc.JDBCTableCatalog;
    set spark.sql.catalog.jdbc.url=<jdbc:mysql://rm-bp11mpql1e01l****.mysql.rds.aliyuncs.com:3306>;
    set spark.sql.catalog.jdbc.user=<user>;
    set spark.sql.catalog.jdbc.password=<password>;
    use jdbc;
    select * from db.test;

    參數說明如下:

    參數

    說明

    spark.sql.catalog.jdbc

    Spark SQL支援的配置資料來源的方式。

    參數取值固定為org.apache.spark.sql.execution.datasources.v2.jdbc.JDBCTableCatalog

    說明

    spark.sql.catalog.catalog_name參數名稱中的catalog_name可自訂,本文樣本均為jdbc

    spark.sql.catalog.jdbc.url

    RDS MySQL執行個體的內網地址和連接埠。格式為:jdbc:mysql://rm-bp1k87323a7ia****.mysql.rds.aliyuncs.com:3306

    spark.sql.catalog.jdbc.user

    RDS MySQL資料庫的帳號。

    spark.sql.catalog.jdbc.password

    RDS MySQL資料庫帳號的密碼。

    說明

    若您想瞭解更多關於JDBC訪問資料來源的參數,請參見JDBC To Other Databases