本文介紹在使用Spark計算引擎訪問Table Store時,如何通過DataFrame編程方式對錶格儲存中的資料進行Realtime Compute,並分別在本地和叢集環境中進行運行調試。
準備工作
-
在Table Store中建立資料表,並建立資料通道、寫入資料。詳情請參見寬表模型快速入門和通道服務快速入門。
說明資料表
order_source_stream_view的結構及樣本資料,請參見附錄:樣本資料表。 -
為阿里雲帳號或具有Table Store存取權限的RAM使用者建立AccessKey。
-
搭建Java開發環境。
本文以Windows環境、JDK 1.8、IntelliJ IDEA 2024.1.2 (Community Edition)和Apache Maven為例介紹。
操作步驟
步驟一:下載專案源碼
通過Git下載範例專案。
git clone https://github.com/aliyun/tablestore-examples.git
如果因為網路問題無法下載,您也可以直接下載tablestore-examples-master.zip。
步驟二:更新Maven依賴
-
進入
tablestore-spark-demo根目錄。說明推薦您閱讀
tablestore-spark-demo根目錄下的README.md文檔,全面瞭解專案資訊。 -
執行以下命令,安裝
emr-tablestore-2.2.0-SNAPSHOT.jar到本地Maven倉庫。mvn install:install-file -Dfile="libs/emr-tablestore-2.2.0-SNAPSHOT.jar" -DartifactId=emr-tablestore -DgroupId="com.aliyun.emr" -Dversion="2.2.0-SNAPSHOT" -Dpackaging=jar -DgeneratePom=true
步驟三:(可選)修改範例程式碼
步驟四:運行調試
您可以在本地或者通過Spark叢集進行運行調試。此處以StructuredTableStoreAggSQLSample為例介紹調試過程。
本地開發環境
以在Windows作業系統上使用IntelliJ IDEA為例,為您介紹如何調試。
-
安裝Scala外掛程式。
IntelliJ IDEA預設不支援Scala,需要您手動安裝Scala外掛程式。
-
安裝winutils.exe(本文使用winutils 3.3.6)。
僅在Windows環境下運行Spark時,還需安裝
winutils.exe以解決相容性問題。您可以通過github專案首頁進行下載。 -
在Scala程式
TableStoreBatchSample上按右鍵,選擇Modify Run Configuration,開啟Edit Run Configuration彈窗。說明由於作業系統及IntelliJ IDEA的版本不同,實際操作可能存在一些細微差異。
-
在Program arguments欄中,依次配置執行個體名稱、資料表名稱、資料通道ID、AccessKey ID、AccessKey Secret、執行個體Endpoint參數和MaxOffsetsPerChannel。
myinstance order_source_stream_view 8f6a****-****-****-****-************ LTAI********************** DByT************************** https://myinstance.cn-hangzhou.ots.aliyuncs.com 10000 -
單擊Modify options,勾選Add dependencies with "provided" scope to classpath選項,並單擊OK。
-
-
運行Scala程式。
運行結束後,將列印結果到控制台。
+-------------------+-------------------+-----+-----------------+ |begin |end |count|totalPrice | +-------------------+-------------------+-----+-----------------+ |2025-04-16 11:13:30|2025-04-16 11:14:00|1 |2547.0 | |2025-04-16 11:13:00|2025-04-16 11:13:30|3 |984.1999999999999| |2025-04-16 11:12:30|2025-04-16 11:13:00|1 |29.6 | +-------------------+-------------------+-----+-----------------+
Spark叢集環境
在進行調試之前,請確保已構建Spark叢集,並且該叢集環境中的Spark版本與範例專案的Spark版本一致。否則,可能會因版本不相容而導致運行錯誤。
以spark-submit方式為例說明。範例程式碼中的master預設為local[*],在Spark叢集上運行時可以去掉,使用spark-submit參數傳入。
-
執行命令
mvn -U clean package對專案進行打包,JAR包的路徑為target/tablestore-spark-demo-1.0-SNAPSHOT-jar-with-dependencies.jar。 -
將JAR包上傳到Spark叢集的Driver節點,並使用
spark-submit提交任務。spark-submit --class com.aliyun.tablestore.spark.demo.streaming.StructuredTableStoreAggSQLSample --master yarn tablestore-spark-demo-1.0-SNAPSHOT-jar-with-dependencies.jar myinstance order_source_stream_view 8f6a****-****-****-****-************ LTAI********************** DByT************************** https://myinstance.cn-hangzhou.ots.aliyuncs.com 10000
附錄:樣本資料表
以下是order_source_stream_view表的結構及樣本資料。
樣本表結構
|
欄位名稱 |
類型 |
描述 |
|
pk |
long |
主鍵。 |
|
UserId |
string |
使用者ID。 |
|
OrderId |
string |
訂單ID。 |
|
price |
double |
訂單金額。 |
|
timestamp |
long |
時間戳記。 |
樣本資料
|
pk(主鍵) |
UserId |
OrderId |
price |
timestamp |
|
1 |
user_A |
00002664-9d8b-441b-bad7-845202f3b142 |
29.6 |
1744773175362 |
|
2 |
user_A |
9d8b7a6c-5e4f-4321-8765-0a9b8c7d6e5f |
785.3 |
1744773190240 |
|
3 |
user_A |
c3d4e5f6-7a8b-4901-8c9d-0a1b2c3d4e5f |
187 |
1744773195579 |
|
4 |
user_B |
f1e2d3c4-b5a6-4789-90ab-123cdef45678 |
11.9 |
1744773203345 |
|
5 |
user_B |
e2f3a4b5-c6d7-4890-9abc-def012345678 |
2547 |
1744773227789 |