全部產品
Search
文件中心

E-MapReduce:管理Spark Thrift Server會話

更新時間:Jun 13, 2025

Spark Thrift Server是Apache Spark提供的一種服務,支援通過JDBC或ODBC串連並執行SQL查詢,從而便捷地將Spark環境與現有的商業智慧(BI)工具、資料視覺化工具及其他資料分析工具整合。本文主要為您介紹如何建立並串連Spark Thrift Server

前提條件

已建立工作空間,詳情請參見管理工作空間

建立Spark Thrift Server會話

Spark Thrift Server建立完成後,您可以在建立Spark SQL類型任務時選擇此會話。

  1. 進入會話管理頁面。

    1. 登入E-MapReduce控制台

    2. 在左側導覽列,選擇EMR Serverless > Spark

    3. Spark頁面,單擊目標工作空間名稱。

    4. EMR Serverless Spark頁面,單擊左側導覽列中的會話管理

  2. 會話管理頁面,單擊Spark Thrift Server會話頁簽。

  3. 單擊建立Spark Thrift Server會話

  4. 建立Spark Thrift Server會話頁面,配置以下資訊,單擊建立

    參數

    說明

    名稱

    建立Spark Thrift Server的名稱。

    長度限制為1~64個字元,僅支援字母、數字、短劃線(-)、底線(_)和空格。

    部署隊列

    請選擇合適的開發隊列部署會話。僅支援選擇開發或者開發和生產共用的隊列。

    隊列更多資訊,請參見管理資源隊列

    引擎版本

    當前會話使用的引擎版本。引擎版本號碼含義等詳情請參見引擎版本介紹

    使用Fusion加速

    Fusion可加速Spark負載的運行並降低任務的總成本。有關計費資訊,請參見產品計費。有關Fusion引擎介紹,請參見Fusion引擎

    自動停止

    預設開啟。45分鐘不活動後自動停止Spark Thrift Server會話。

    網路連接

    選擇已建立的網路連接,以便直接存取VPC內的資料來源或外部服務。有關建立網路連接的具體操作,請參見EMR Serverless Spark與其他VPC間網路互連

    Spark Thrift Server連接埠

    使用外網網域名稱訪問時連接埠號碼為443,使用內網網域名稱訪問時連接埠號碼為80。

    訪問憑證

    僅支援Token方式。

    spark.driver.cores

    用於指定Spark應用程式中Driver進程所使用的CPU核心數量。預設值為1 CPU。

    spark.driver.memory

    用於指定Spark應用程式中Driver進程可以使用的記憶體量。預設值為3.5 GB。

    spark.executor.cores

    用於指定每個Executor進程可以使用的CPU核心數量。預設值為1 CPU。

    spark.executor.memory

    用於指定每個Executor進程可以使用的記憶體量。預設值為3.5 GB。

    spark.executor.instances

    Spark分配的執行器(Executor)數量。預設值為2。

    動態資源分派

    預設關閉。開啟後,需要配置以下參數:

    • executors數量下限:預設為2。

    • executors數量上限:如果未設定spark.executor.instances,則預設值為10。

    更多記憶體配置

    • spark.driver.memoryOverhead:每個Driver可利用的非堆記憶體。如果未設定該參數,Spark會根據預設值自動分配,預設值為 max(384MB, 10% × spark.driver.memory)

    • spark.executor.memoryOverhead:每個Executor可利用的非堆記憶體。如果未設定該參數,Spark會根據預設值自動分配,預設值為 max(384MB, 10% × spark.executor.memory)

    • spark.memory.offHeap.size:Spark可用的堆外記憶體大小。預設值為1 GB。

      僅在spark.memory.offHeap.enabled設定為true時生效。預設情況下,當採用Fusion Engine時,該功能將處於啟用狀態,其非堆記憶體預設設定為1 GB。

    Spark配置

    填寫Spark配置資訊,預設以空格符分隔,例如,spark.sql.catalog.paimon.metastore dlf

  5. 擷取Endpoint資訊。

    1. Spark Thrift Server會話頁簽,單擊新增的Spark Thrift Server的名稱。

    2. 總覽頁簽,複製Endpoint資訊。

      根據網路環境的不同,可以選擇以下兩種Endpoint:

      • 外網Endpoint:適用於通過公網訪問EMR Serverless Spark的情境,例如本地開發機、外部網路或跨雲環境的訪問。此方式可能會產生流量費用,請確保採取必要的安全措施。

      • 內網Endpoint:適用於同地區的阿里雲ECS執行個體通過內網訪問EMR Serverless Spark的情境。內網訪問免費且更加安全,但僅限同一地區的阿里雲內網環境使用。

建立Token

  1. Spark Thrift Server會話頁簽,單擊新增的Spark Thrift Server會話的名稱。

  2. 單擊Token管理頁簽。

  3. 單擊建立Token

  4. 建立Token對話方塊中,配置以下資訊,單擊確定

    參數

    說明

    名稱

    建立Token的名稱。

    到期時間

    設定該Token的到期時間。設定的天數應大於或等於1。預設情況下為開啟狀態,365天后到期。

  5. 複製Token資訊。

    重要

    Token建立完成後,請務必立即複製新Token的資訊,後續不支援查看。如果您的Token到期或遺失,請選擇建立Token或重設Token。

串連Spark Thrift Server

在串連Spark Thrift Server時,請根據您的實際情況替換以下資訊:

  • <endpoint>:您在總覽頁簽擷取的Endpoint(外網)Endpoint(內網)資訊。

    如果使用內網Endpoint,訪問Spark Thrift Server限於同一VPC內的資源。

  • <port>:連接埠號碼。使用外網網域名稱訪問時連接埠號碼為443,使用內網網域名稱訪問時連接埠號碼為80。

  • <username>:您在Token管理頁簽建立的Token的名稱。

  • <token>:您在Token管理頁簽複製的Token資訊。

使用Python串連Spark Thrift Server

  1. 執行以下命令,安裝PyHive和Thrift包。

    pip install pyhive thrift
  2. 編寫Python指令碼,串連Spark Thrift Server。

    以下是一個Python指令碼樣本,展示如何串連到Hive並顯示資料庫列表。根據網路環境的不同(外網或內網),您可以選擇適合的串連方式。

    使用外網網域名稱串連

    from pyhive import hive
    
    if __name__ == '__main__':
        # 替換<endpoint>、<username>和<token>為您的實際資訊。
        cursor = hive.connect('<endpoint>', port=443, scheme='https', username='<username>', password='<token>').cursor()
        cursor.execute('show databases')
        print(cursor.fetchall())
        cursor.close()

    使用內網網域名稱串連

    from pyhive import hive
    
    if __name__ == '__main__':
        # 替換<endpoint>、<username>和<token>為您的實際資訊。
        cursor = hive.connect('<endpoint>', port=80, scheme='http', username='<username>', password='<token>').cursor()
        cursor.execute('show databases')
        print(cursor.fetchall())
        cursor.close()

使用Java串連Spark Thrift Server

  1. 請在您的pom.xml中引入以下Maven依賴。

    <dependencies>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>3.0.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-jdbc</artifactId>
                <version>2.1.0</version>
            </dependency>
        </dependencies>
    
    說明

    當前Serverless Spark內建的Hive版本為2.x,因此僅支援hive-jdbc 2.x版本。

  2. 編寫Java代碼,串連Spark Thrift Server。

    以下是一個Sample Java代碼,用於串連到Spark Thrift Server,並查詢資料庫列表。

    使用外網網域名稱串連

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import org.apache.hive.jdbc.HiveStatement;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            String url = "jdbc:hive2://<endpoint>:443/;transportMode=http;httpPath=cliservice/token/<token>";
            Class.forName("org.apache.hive.jdbc.HiveDriver");
            Connection conn = DriverManager.getConnection(url);
            HiveStatement stmt = (HiveStatement) conn.createStatement();
    
            String sql = "show databases";
            System.out.println("Running " + sql);
            ResultSet res = stmt.executeQuery(sql);
    
            ResultSetMetaData md = res.getMetaData();
            String[] columns = new String[md.getColumnCount()];
            for (int i = 0; i < columns.length; i++) {
                columns[i] = md.getColumnName(i + 1);
            }
            while (res.next()) {
                System.out.print("Row " + res.getRow() + "=[");
                for (int i = 0; i < columns.length; i++) {
                    if (i != 0) {
                        System.out.print(", ");
                    }
                    System.out.print(columns[i] + "='" + res.getObject(i + 1) + "'");
                }
                System.out.println(")]");
            }
            
            conn.close();
        }
    }

    使用內網網域名稱串連

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import org.apache.hive.jdbc.HiveStatement;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            String url = "jdbc:hive2://<endpoint>:80/;transportMode=http;httpPath=cliservice/token/<token>";
            Class.forName("org.apache.hive.jdbc.HiveDriver");
            Connection conn = DriverManager.getConnection(url);
            HiveStatement stmt = (HiveStatement) conn.createStatement();
    
            String sql = "show databases";
            System.out.println("Running " + sql);
            ResultSet res = stmt.executeQuery(sql);
    
            ResultSetMetaData md = res.getMetaData();
            String[] columns = new String[md.getColumnCount()];
            for (int i = 0; i < columns.length; i++) {
                columns[i] = md.getColumnName(i + 1);
            }
            while (res.next()) {
                System.out.print("Row " + res.getRow() + "=[");
                for (int i = 0; i < columns.length; i++) {
                    if (i != 0) {
                        System.out.print(", ");
                    }
                    System.out.print(columns[i] + "='" + res.getObject(i + 1) + "'");
                }
                System.out.println(")]");
            }
            
            conn.close();
        }
    }

通過Spark Beeline串連Spark Thrift Server

  • 如果您使用的是自建叢集,需先進入Spark的bin目錄,然後使用beeline串連Spark Thrift Server。

    使用外網網域名稱串連

    cd /opt/apps/SPARK3/spark-3.4.2-hadoop3.2-1.0.3/bin/
    
    ./beeline -u "jdbc:hive2://<endpoint>:443/;transportMode=http;httpPath=cliservice/token/<token>"

    使用內網網域名稱串連

    cd /opt/apps/SPARK3/spark-3.4.2-hadoop3.2-1.0.3/bin/
    
    ./beeline -u "jdbc:hive2://<endpoint>:80/;transportMode=http;httpPath=cliservice/token/<token>"
    說明

    代碼中的/opt/apps/SPARK3/spark-3.4.2-hadoop3.2-1.0.3是以EMR on ECS 叢集的Spark安裝路徑為例,實際應根據用戶端的Spark安裝路徑進行相應調整。如果您不確定Spark的安裝路徑,可以通過env | grep SPARK_HOME命令尋找。

  • 如果您使用的是EMR on ECS 叢集,可以直接使用Spark Beeline用戶端串連到Spark Thrift Server。

    使用外網網域名稱串連

    spark-beeline -u "jdbc:hive2://<endpoint>:443/;transportMode=http;httpPath=cliservice/token/<token>"

    使用內網網域名稱串連

    spark-beeline -u "jdbc:hive2://<endpoint>:80/;transportMode=http;httpPath=cliservice/token/<token>"

在使用Hive Beeline串連Serverless Spark Thrift Server時,如果出現以下報錯,通常是由於Hive Beeline的版本與Spark Thrift Server不相容導致。因此,建議使用Hive 2.x版本的Beeline。

24/08/22 15:09:11 [main]: ERROR jdbc.HiveConnection: Error opening session
org.apache.thrift.transport.TTransportException: HTTP Response code: 404

配置Apache Superset以串連Spark Thrift Server

Apache Superset是一個現代資料探索和可視化平台,具有豐富的從簡單的折線圖到高度詳細的地理空間圖表的圖表形態。更多Superset資訊,請參見Superset

  1. 安裝依賴。

    請確保您已經安裝了0.20.0版本的 thrift 包。如未安裝,您可以使用以下命令安裝。

    pip install thrift==0.20.0
  2. 啟動Superset,進入Superset介面。

    更多啟動操作資訊,請參見Superset文檔

  3. 在頁面右上方單擊DATABASE,進入Connect a database頁面。

  4. Connect a database頁面,選擇Apache Spark SQL

    image

  5. 填寫連接字串,然後配置相關資料來源參數。

    使用外網網域名稱串連

    hive+https://<username>:<token>@<endpoint>:443/<db_name>

    使用內網網域名稱串連

    hive+http://<username>:<token>@<endpoint>:80/<db_name>
  6. 單擊FINISH,以確認成功串連和驗證。

配置Hue以串連Spark Thrift Server

Hue是一個流行的開源Web介面,可用於與Hadoop生態系統進行互動。關於Hue的更多介紹,請參見Hue官方文檔

  1. 安裝依賴。

    請確保您已經安裝了0.20.0版本的 thrift 包。如未安裝,您可以使用以下命令安裝。

    pip install thrift==0.20.0
  2. 在Hue的設定檔中添加Spark SQL串連串。

    請找到Hue的設定檔(通常位於/etc/hue/hue.conf),並在檔案中添加以下內容。

    使用外網網域名稱串連

    [[[sparksql]]]
         name = Spark Sql
         interface=sqlalchemy
         options='{"url": "hive+https://<username>:<token>@<endpoint>:443/"}'

    使用內網網域名稱串連

    [[[sparksql]]]
         name = Spark Sql
         interface=sqlalchemy
         options='{"url": "hive+http://<username>:<token>@<endpoint>:80/"}'
  3. 重啟Hue。

    修改配置後,您需要執行以下命令重啟Hue服務以使更改生效。

    sudo service hue restart
  4. 驗證串連。

    成功重啟後,訪問Hue介面,找到Spark SQL選項。如果配置正確,您應能夠成功串連到Spark Thrift Server並執行SQL查詢。

    image

使用DataGrip串連Spark Thrift Server

DataGrip是面向開發人員的資料庫管理環境,旨在便捷地進行資料庫的查詢、建立和管理。資料庫可運行於本地、伺服器或雲端。如需瞭解更多關於DataGrip的資訊,請參見DataGrip

  1. 安裝DataGrip,詳情請參見Install DataGrip

    本文樣本中的DataGrip版本為2025.1.2。

  2. 開啟DataGrip用戶端,進入DataGrip介面。

  3. 建立專案。

    1. 單擊image,選擇Flie > New > Project

      image

    2. New Project對話方塊中,輸入專案名,例如Spark,單擊OK

  4. 單擊Database Explorer功能表列的 建立串連表徵圖。選擇Data Source > Other > Apache Spark

    image

  5. Data Sources and Drivers對話方塊,配置如下參數。

    image

    頁簽

    參數

    說明

    General

    Name

    自訂的串連名稱。例如,spark_thrift_server。

    Authentication

    選擇鑒權方式。本文選擇的No auth

    在生產環境中,請選擇User & Password,確保只有授權使用者能夠提交SQL任務,提高系統的安全性。

    Driver

    單擊Apache Spark,然後單擊Go to Driver ,確認Driver版本為ver. 1.2.2

    說明

    由於當前Serverless Spark引擎的版本為3.x,為確保系統的穩定性和功能的相容性,Driver版本必須選擇1.2.2。

    image

    URL

    串連Spark Thrift Server的URL。根據網路環境的不同(外網或內網),您可以選擇適合的串連方式。

    • 使用外網網域名稱串連

      jdbc:hive2://<endpoint>:443/;transportMode=http;httpPath=cliservice/token/<token>
    • 使用內網網域名稱串連

      jdbc:hive2://<endpoint>:80/;transportMode=http;httpPath=cliservice/token/<token>

    Options

    Run keep-alive query

    該參數為可選配置。勾選該參數可防止逾時自動斷開。

  6. 單擊Test Connection,確認資料來源配置成功。

    image

  7. 單擊OK,完成配置。

  8. 使用DataGrip管理Spark Thrift Server。

    DataGrip成功串連Spark Thrift Server後,您可以進行資料開發,更多資訊請參見DataGrip協助文檔

    例如,您可以在建立的串連下,在目標表上右鍵,選擇New > Query Console,並在右側SQL編輯器中編寫並運行SQL指令碼,即可查看錶資料資訊。

    image

使用Redash串連Spark Thrift Server

Redash是一款開源的BI工具,提供了基於Web的資料庫查詢和資料視覺效果功能。如需瞭解更多關於Redash的資訊,請參見Redash官方文檔

  1. 安裝Redash,詳情請參見Redash官方文檔

  2. 安裝依賴。

    請確保您已經安裝了0.20.0版本的thrift包。如未安裝,您可以使用以下命令安裝。

    pip install thrift==0.20.0
  3. 登入Redash。

  4. 在左側導覽列單擊Settings,並在Data Sources頁簽下單擊+New Data Source

  5. 在彈出的對話方塊中配置以下參數,然後單擊Create

    image

    參數

    說明

    Type Selection

    資料來源類型。在搜尋方塊中尋找並選擇Hive(HTTP)

    Configuration

    Name

    資料來源名稱。您可以自訂。

    Host

    Spark Thrift Server的Endpoint地址。

    您可以在總覽頁簽擷取的Endpoint(外網)Endpoint(內網)資訊。

    Port

    • 如果使用外網網域名稱訪問,連接埠號碼為443。

    • 如果使用內網網域名稱訪問,連接埠號碼為80。

    HTTP Path

    固定填寫為/cliservice

    Username

    使用者名稱。可以任意填寫,例如 root

    Password

    填寫您建立的Token資訊。

    HTTP Scheme

    • 如果使用外網網域名稱訪問,填寫為https

    • 如果使用內網網域名稱訪問,填寫為http

  6. 在頁面上方選擇Create > New Query,您可以在頁面的編輯框中編寫SQL語句。

    image

查看運行記錄

在資料開發工作單位執行完成後,您可以通過會話管理頁面查看任務的運行記錄。具體操作步驟如下:

  1. 在會話列表頁面,單擊會話名稱。

  2. 單擊運行記錄頁簽。

    在該頁面中,您可以查看任務的詳細運行資訊,包括運行ID,啟動時間,Spark UI等資訊。

    image