全部產品
Search
文件中心

E-MapReduce:管理Spark Thrift Server會話

更新時間:Nov 26, 2024

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會話。

    Spark Thrift Server連接埠

    預設443連接埠。

    認證方式

    僅支援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資訊。

建立Token

說明

Token使用時,請在請求的header中添加--header `x-acs-spark-livy-token: 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資訊。

  • <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()
    

使用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;
    
    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();
        }
    }

通過Spark Beeline串連Spark Thrift Server

  1. (可選)如果您使用的是EMR on ECS的叢集,建議您先進入Spark的bin目錄。

    cd /opt/apps/SPARK3/spark-3.4.2-hadoop3.2-1.0.3/bin/
  2. 使用Beeline用戶端串連到Spark Thrift Server。

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

    如果串連Serverless Spark Thrift Server時出現以下報錯,通常是由於Hive Beeline版本不相容導致的。請確保您使用的是Spark 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. 安裝依賴。

    請確保您已經安裝了高版本的 thrift 包(建議高於16.0.0)。如未安裝,您可以使用以下命令安裝。

    pip install thrift==20.0.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>
  6. 單擊FINISH,以確認成功串連和驗證。

配置Hue以串連Spark Thrift Server

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

  1. 安裝依賴。

    請確保您已經安裝了高版本的 thrift 包(建議高於16.0.0)。如未安裝,您可以使用以下命令安裝。

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

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

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

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

    sudo service hue restart
  4. 驗證串連。

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

    image

相關文檔

Fusion引擎更多介紹,請參見Fusion引擎