Spark Thrift Server是Apache Spark提供的一種服務,支援通過JDBC或ODBC串連並執行SQL查詢,從而便捷地將Spark環境與現有的商業智慧(BI)工具、資料視覺化工具及其他資料分析工具整合。本文主要為您介紹如何建立並串連Spark Thrift Server。
前提條件
已建立工作空間,詳情請參見管理工作空間。
建立Spark Thrift Server會話
Spark Thrift Server建立完成後,您可以在建立Spark SQL類型任務時選擇此會話。
進入會話管理頁面。
在左側導覽列,選擇
。在Spark頁面,單擊目標工作空間名稱。
在EMR Serverless Spark頁面,單擊左側導覽列中的會話管理。
在會話管理頁面,單擊Spark Thrift Server頁簽。
單擊建立Spark Thrift Server。
在建立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
。擷取Endpoint資訊。
在Spark Thrift Server頁簽,單擊新增的Spark Thrift Server的名稱。
在總覽頁簽,複製Endpoint資訊。
建立Token
Token使用時,請在請求的header中添加--header `x-acs-spark-livy-token: token`
。
在Spark Thrift Server頁簽,單擊新增的Spark Thrift Server的名稱。
單擊Token管理頁簽。
單擊建立Token。
在建立Token對話方塊中,配置以下資訊,單擊確定。
參數
說明
名稱
建立Token的名稱。
到期時間
設定該Token的到期時間。設定的天數應大於或等於1。預設情況下為開啟狀態,365天后到期。
複製Token資訊。
重要Token建立完成後,請務必立即複製新Token的資訊,後續不支援查看。如果您的Token到期或遺失,請選擇建立Token或重設Token。
串連Spark Thrift Server
在串連Spark Thrift Server時,請根據您的實際情況替換以下資訊:
<endpoint>
:您在總覽頁簽擷取的Endpoint資訊。<username>
:您在Token管理頁簽建立的Token的名稱。<token>
:您在Token管理頁簽複製的Token資訊。
使用Python串連Spark Thrift Server
執行以下命令,安裝PyHive和Thrift包。
pip install pyhive thrift
編寫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
請在您的
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版本。
編寫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
(可選)如果您使用的是EMR on ECS的叢集,建議您先進入Spark的
bin
目錄。cd /opt/apps/SPARK3/spark-3.4.2-hadoop3.2-1.0.3/bin/
使用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。
安裝依賴。
請確保您已經安裝了高版本的
thrift
包(建議高於16.0.0)。如未安裝,您可以使用以下命令安裝。pip install thrift==20.0.0
啟動Superset,進入Superset介面。
更多啟動操作資訊,請參見Superset文檔。
在頁面右上方單擊DATABASE,進入Connect a database頁面。
在Connect a database頁面,選擇Apache Spark SQL。
填寫連接字串,然後配置相關資料來源參數。
hive+https://<username>:<token>@<endpoint>:443/<db_name>
單擊FINISH,以確認成功串連和驗證。
配置Hue以串連Spark Thrift Server
Hue是一個流行的開源Web介面,可用於與Hadoop生態系統進行互動。關於Hue的更多介紹,請參見Hue官方文檔。
安裝依賴。
請確保您已經安裝了高版本的
thrift
包(建議高於16.0.0)。如未安裝,您可以使用以下命令安裝。pip install thrift==20.0.0
在Hue的設定檔中添加Spark SQL串連串。
請找到Hue的設定檔(通常位於
/etc/hue/hue.conf
),並在檔案中添加以下內容。[[[sparksql]]] name = Spark Sql interface=sqlalchemy options='{"url": "hive+https://<username>:<token>@<endpoint>:443/"}'
重啟Hue。
修改配置後,您需要執行以下命令重啟Hue服務以使更改生效。
sudo service hue restart
驗證串連。
成功重啟後,訪問Hue介面,找到Spark SQL選項。如果配置正確,您應能夠成功串連到Spark Thrift Server並執行SQL查詢。
相關文檔
Fusion引擎更多介紹,請參見Fusion引擎。