全部產品
Search
文件中心

AnalyticDB:通過Spark Distribution SQL Engine開發Spark SQL作業

更新時間:Aug 31, 2024

當您需要即時分析資料或通過JDBC協議開發Spark SQL作業時,可以通過AnalyticDB for MySQL的Spark Distribution SQL Engine開發Spark SQL作業。通過Spark Distribution SQL Engine可以更方便地利用SQL分析、處理和查詢資料,提升SQL執行效率。本文主要介紹如何啟動、串連Spark Distribution SQL Engine。

功能介紹

AnalyticDB for MySQL Spark提供Spark開源原生能力Distribution SQL Engine的託管服務。Spark Distribution SQL Engine是Spark內建的分布式SQL執行引擎,支援JDBC協議。任何支援標準Hive ThriftServer2的用戶端均可以通過JDBC串連Spark Distribution SQL Engine。

您可以開啟多個Spark Distribution SQL Engine,多個Spark Distribution SQL Engine之間執行環境相互隔離,且都具有獨立的串連地址,但是Spark Distribution SQL Engine之間會共用頻寬,因此不適用於大量資料的匯入。更多關於Spark Distribution SQL Engine的資訊,請參見Distributed SQL Engine

前提條件

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

  • 叢集與OSS儲存空間位於相同地區。

  • 已建立Job型資源群組。具體操作,請參見建立資源群組

  • 已建立資料庫帳號。

  • 已安裝Java 8開發環境,以運行Beeline用戶端和Java應用。

  • 已將用戶端IP地址添加至AnalyticDB for MySQL叢集白名單中。具體操作,請參見白名單

啟動Spark Distribution SQL Engine

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

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

  3. 在編輯器視窗上方,選擇Job型資源群組,作業類型選擇SQLEngine

  4. 在編輯器中輸入以下作業內容。

    -- Here is just an example of start Spark SQLEngine. Modify the content and run your spark program.
    CONF spark.adb.eni.enabled=true;
    CONF spark.adb.eni.vswitchId=vsw-bp1wh6lp1abs3fi0****;
    CONF spark.adb.eni.securityGroupId=sg-bp15ncw8v0624xe****;
    CONF spark.driver.resourceSpec=medium;
    CONF spark.executor.instances=1;
    CONF spark.executor.resourceSpec=small;
    CONF spark.app.name=Spark SQLEngine;
    CONF spark.sql.hive.metastore.version=adb;
    CONF spark.kubernetes.driverEnv.HIVE_SERVER2_USER=AdbSpark14****;
    CONF spark.kubernetes.driverEnv.HIVE_SERVER2_PASSWORD=Spark23****;
    CONF spark.adb.sessionTTLSeconds=1200;

    參數說明:

    參數

    是否必填

    說明

    spark.adb.eni.enabled

    條件必填

    是否開啟彈性網卡(ENI)。

    • 通過IP地址串連Spark Distribution SQL Engine時,需配置為true。

    • 通過網域名稱串連Spark Distribution SQL Engine時,無需配置。

    spark.adb.eni.vswitchId

    條件必填

    彈性網卡的交換器ID。

    • 通過IP地址串連Spark Distribution SQL Engine時,則需要配置為用戶端所屬VPC網路的交換器ID。

    • 通過網域名稱串連Spark Distribution SQL Engine時,無需配置。

    spark.adb.eni.securityGroupId

    條件必填

    彈性網卡的安全性群組ID。

    • 通過IP地址串連Spark Distribution SQL Engine時,則需要配置為用戶端所屬VPC網路的安全性群組ID。

    • 通過網域名稱串連Spark Distribution SQL Engine時,無需配置。

    spark.app.name

    Spark應用程式名稱。

    spark.sql.hive.metastore.version

    指定採用中繼資料服務版本,支援如下配置:

    • adb:串連AnalyticDB for MySQL中的中繼資料資訊。

    • <hive_version>:指定Hive MetaStore的版本。

    說明

    spark.kubernetes.driverEnv.HIVE_SERVER2_USER

    Spark Distribution SQL Engine服務的使用者名稱。使用者名稱需包含大寫字母、小寫字母和數字,長度無限制。

    spark.kubernetes.driverEnv.HIVE_SERVER2_PASSWORD

    Spark Distribution SQL Engine服務的密碼。密碼需包含大寫字母、小寫字母和數字,長度無限制。

    spark.adb.sessionTTLSeconds

    Spark Distribution SQL Engine銷毀時間。單位為秒(s),預設值為1200秒。即最後一個SQL代碼塊執行完畢,1200秒後Spark Distribution SQL Engine服務會自動銷毀。

    說明

    Spark Distribution SQL Engine銷毀後,Spark Jar作業的狀態為已完成

    其他參數,請參見Spark應用配置參數說明

  5. 單擊立即執行

    重要

    您可在應用列表地區查看任務狀態,僅當任務狀態為運行中時,可以串連Spark Distribution SQL Engine。

串連Spark Distribution SQL Engine

支援標準Hive ThriftServer的用戶端均可以通過IP地址或網域名稱串連Spark Distribution SQL Engine。用戶端列表,請參見Hive Client官方文檔

通過IP地址和通過網域名稱串連Spark Distribution SQL Engine的區別如下:

  • 通過IP地址串連Spark Distribution SQL Engine(推薦):用戶端與ENI所屬同一VPC,且已開啟ENI(spark.adb.eni.vswitchId為true)時,可以通過IP地址串連,此時您需要擷取Spark Distribution SQL Engine的IP地址。若您的用戶端所在VPC發生改變,您需修改ENI所在的交換器(即spark.adb.eni.vswitchId參數)並重新啟動Spark Distribution SQL Engine。

  • 通過網域名稱串連Spark Distribution SQL Engine:用戶端與AnalyticDB for MySQL叢集所屬同一VPC,或需要通過公網串連時,可以通過網域名稱串連,此時您需擷取Spark Distribution SQL Engine的網域名稱地址。

步驟一:擷取Spark Distribution SQL Engine的串連地址

擷取Spark Distribution SQL Engine的IP地址

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

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

  3. 應用列表頁簽中,單擊目標Spark應用操作列的日誌,擷取Spark Distribution SQL Engine的IP地址。

    jdbc:hive2://172.XX.XX.XX:10001/<db>;transportMode=http;httpPath=s202401301607hz**********.cliservice

擷取Spark Distribution SQL Engine的網域名稱地址

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

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

  3. 應用列表頁簽中,單擊目標Spark應用操作列的詳情,擷取Spark Distribution SQL Engine的網域名稱地址。

    • 通過公網串連Spark Distribution SQL Engine時,需使用Spark JDBC Public Connect URL對應的地址。

    • 通過VPC串連Spark Distribution SQL Engine時,需使用Spark JDBC VPC Connect URL對應的地址。

    重要
    • 初次開機Spark Distribution SQL Engine後,會進行網路初始化,初始化過程期間大約為1分鐘,初始化完成後才能擷取網域名稱地址。

    • 建立Spark網域名稱與申請、釋放公網地址的操作不能同時進行,因此不能確保每次都成功建立網域名稱。若您多次啟動Spark Distribution SQL Engine均無法建立網域名稱時,請提交工單聯絡支援人員解決。

步驟二:串連Spark Distribution SQL Engine

本文樣本以Beeline用戶端和Java應用為例,介紹串連Spark Distribution SQL Engine的具體方法。

通過Beeline用戶端串連Spark Distribution SQL Engine

  1. 串連Spark Distribution SQL Engine。

    命令格式如下:

    !connect <串連地址> <使用者名稱> <密碼>
    • 串連地址:步驟一中擷取的Spark Distribution SQL Engine串連地址。

    • 使用者名稱:Spark Distribution SQL Engine的使用者名稱。

    • 密碼:Spark Distribution SQL Engine的密碼。

    樣本:

    !connect jdbc:hive2://jdbc:hive2://amv-bp1c3em7b2e****-spark.ads.aliyuncs.com:10001/adb_test;transportMode=http;httpPath=s202401301607hz**********.cliservice AdbSpark14**** Spark23****
    重要
    • 啟動Spark Distribution SQL Engine時,若設定了spark.sql.hive.metastore.version=adb,則串連地址中的資料庫必須為AnalyticDB for MySQL中已存在的資料庫,否則會預設使用default 資料庫,造成串連失敗。

    • ThriftServer HTTP Protocol會在網路波動時,出現509拒絕訪問報錯,且不會自動重試,您需要手動重新執行。

    • 自動產生的串連配置參數transportMode=http;httpPath=s202401301607hzdf852**********.cliservice不能修改和刪除,若您需要新增其它配置參數,在串連地址末尾添加即可。

    返回結果:

    Connected to: Spark SQL (version 3.2.0)
    Driver: Hive JDBC (version 2.3.9)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
  2. 使用Spark Distribution SQL Engine執行Spark SQL。

    SHOW TABLES;

通過Java應用串連Spark Distribution SQL Engine

  1. 設定環境變數。

    export HIVEURL="jdbc:hive2://jdbc:hive2://amv-bp1c3em7b2e****-spark.ads.aliyuncs.com:10001/adb_test;transportMode=http;httpPath=s202401301607hz**********.cliservice"
    export HIVEUSER="AdbSpark14****"
    export HIVEPASSWORD="Spark23****"
    • HIVEURL:步驟一中擷取的Spark Distribution SQL Engine串連地址。

    • HIVEUSER:Spark Distribution SQL Engine的使用者名稱。

    • HIVEPASSWORD:Spark Distribution SQL Engine的密碼。

  2. 在pom.xml中配置Maven依賴。範例程式碼如下:

        <dependency>
          <groupId>org.apache.hive</groupId>
          <artifactId>hive-jdbc</artifactId>
          <version>2.3.9</version>
        </dependency>
  3. 建立串連並執行Spark SQL。

    package com.aliyun;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    public class TestHive {
        public static void main(String[] args) throws Exception {
            String hiveUrl = System.getenv("HIVEURL");;
            String username = System.getenv("HIVEUSER");
            String password = System.getenv("HIVEPASSWORD");
            // 已安裝驅動
            Class.forName("org.apache.hive.jdbc.HiveDriver");
            // 通過步驟一擷取的地址串連Spark Distribution SQL Engine
            String url = String.format(hiveUrl);
            Connection con = DriverManager.getConnection(url, username, password);
            Statement stmt = con.createStatement();
            // 執行show tables命令
            ResultSet tables = stmt.executeQuery("show tables");
            while (tables.next()) {
                System.out.println(tables.getString("tableName"));
            }
            // 查詢表資料
            ResultSet rows = stmt.executeQuery("select * from test");
            while (rows.next()) {
                System.out.println(rows.getString(0));
            }
        }
    }
    重要
    • 啟動Spark Distribution SQL Engine時,若設定了spark.sql.hive.metastore.version=adb,則串連地址中的資料庫必須為AnalyticDB for MySQL中已存在的資料庫,否則會預設使用default 資料庫,造成串連失敗。

    • ThriftServer HTTP Protocol會在網路波動時,出現509拒絕訪問報錯,且不會自動重試,您需要手動重新執行。

    • 自動產生的串連配置參數transportMode=http;httpPath=s202401301607hzdf852**********.cliservice不能修改和刪除,若您需要新增其它配置參數,在串連地址末尾添加即可。