AnalyticDB for MySQLSpark支援使用Docker鏡像快速啟動Jupyter互動式開發環境,協助您使用本地Jupyter Lab串連AnalyticDB for MySQL Spark,從而利用AnalyticDB for MySQL的彈性資源進行互動測試和計算。
前提條件
AnalyticDB for MySQL叢集的產品系列為企業版、基礎版或湖倉版。
已在AnalyticDB for MySQL叢集中建立Job型資源群組。
已建立AnalyticDB for MySQL叢集的資料庫帳號。
如果是通過阿里雲帳號訪問,只需建立高許可權帳號。
如果是通過RAM使用者訪問,需要建立高許可權帳號和普通帳號並且將RAM使用者綁定到普通帳號上。
已完成帳號授權。
已配置Spark應用的日誌儲存地址。
說明登入雲原生資料倉儲AnalyticDB MySQL控制台,在頁面,單擊日誌配置,選擇預設路徑或自訂儲存路徑。自訂儲存路徑時不能將日誌儲存在OSS的根目錄下,請確保該路徑中至少包含一層檔案夾。
注意事項
AnalyticDB for MySQL Spark當前僅支援Python 3.7、Scala 2.12版本的Jupyter互動作業。
Jupyter互動式作業會在空閑一段時間後自動釋放Spark資源,預設釋放時間為1200秒(即最後一個代碼塊執行完畢,1200秒後自動釋放)。您可在Jupyter Notebook Cell中通過如下命令配置
spark.adb.sessionTTLSeconds參數,修改Spark資源自動釋放的時間。%%configure -f { "spark.adb.sessionTTLSeconds": "3600" }
串連AnalyticDB for MySQL Spark
使用AnalyticDB for MySQL提供鏡像中的JupyterLab串連Spark
啟動Docker鏡像後,拉取AnalyticDB for MySQL Jupyter鏡像。命令如下:
docker pull registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.pre啟動Jupyter互動式開發環境。
命令格式如下:
docker run -it -p {宿主機連接埠}:8888 -v {宿主機檔案路徑}:{Docker容器檔案路徑} registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.pre -d {ADB Instance Id} -r {Resource Group Name} -e {API Endpoint} -i {AK Id} -k {AK Sec} -t {StsToken} # StsToken和AK二選一參數說明:
參數名稱
是否必填
參數說明
-p
否
將宿主機連接埠綁定為容器連接埠。格式為
-p 宿主機連接埠:容器連接埠。宿主機連接埠可任意填寫,容器連接埠固定填寫為
8888。本文樣本為-p 8888:8888。-v
否
在不掛載宿主機檔案夾的情況下,關閉Docker容器後編輯的檔案會丟失。Docker容器關閉時也會自動嘗試終止所有正在啟動並執行Spark互動式作業。您可以選擇如下兩種方案避免編輯檔案丟失:
在啟動Jupyter互動式開發環境時,將宿主機檔案掛載到Docker容器中,並將作業檔案儲存體在對應的檔案路徑下。格式為
-v 宿主機路徑:Docker容器檔案路徑。Docker容器檔案路徑可任意填寫,建議填寫為/root/jupyter。在關閉Docker容器前保證所有的檔案被妥善地複製保管。
本文樣本為
-v /home/admin/notebook:/root/jupyter,表示將宿主機/home/admin/notebook路徑下的檔案掛載到Docker容器的/root/jupyter路徑。說明需要注意將編輯中的notebook檔案最終另存到
/tmp檔案夾,關閉Docker容器後,在宿主機的/home/admin/notebook檔案夾下可以看到對應的檔案,再次啟動Docker容器時可繼續執行。更多資訊,請參見Docker卷管理文檔。-d
是
AnalyticDB for MySQL企業版、基礎版及湖倉版叢集ID。
您可以登入AnalyticDB MySQL控制台,在叢集列表查看叢集的ID。
-r
是
AnalyticDB for MySQL Job型資源群組名稱。
您可以登入AnalyticDB MySQL控制台,在叢集管理 > 資源管理頁面,單擊資源群組管理頁簽,查看所有的資源群組資訊。
-e
是
AnalyticDB for MySQL叢集的服務存取點資訊。
詳細資料請參見服務存取點。
-i
條件必選
阿里雲帳號或RAM使用者的AccessKey ID和AccessKey Secret。
如何查看AccessKey ID和AccessKey Secret,請參見帳號與許可權。
-k
-t
條件必選
RAM角色的臨時身份憑證,即安全性權杖(STS Token)。
有許可權的RAM使用者可以使用自己的存取金鑰調用AssumeRole - 擷取扮演角色的臨時身份憑證介面,以擷取某個RAM角色的STS Token,從而使用STS Token訪問阿里雲資源。
樣本:
docker run -it -p 8888:8888 -v /home/admin/notebook:/root/jupyter registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.pre -d amv-bp164l******** -r test -e adb.aliyuncs.com -i LTAI**************** -k ****************啟動成功後,返回如下提示資訊,您將URL
http://127.0.0.1:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291複製到瀏覽器,即可使用Jupyter服務直連AnalyticDB for MySQL Spark。[I 2023-11-24 09:55:09.852 ServerApp] nbclassic | extension was successfully loaded. [I 2023-11-24 09:55:09.852 ServerApp] sparkmagic extension enabled! [I 2023-11-24 09:55:09.853 ServerApp] sparkmagic | extension was successfully loaded. [I 2023-11-24 09:55:09.853 ServerApp] Serving notebooks from local directory: /root/jupyter [I 2023-11-24 09:55:09.853 ServerApp] Jupyter Server 1.24.0 is running at: [I 2023-11-24 09:55:09.853 ServerApp] http://419e63fc7821:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291 [I 2023-11-24 09:55:09.853 ServerApp] or http://127.0.0.1:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291 [I 2023-11-24 09:55:09.853 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).說明啟動Jupyter環境時如果出現報錯,您可以查看
proxy_{timestamp}.log日誌記錄檔案,排查並解決問題。
使用安裝在本地的Jupyter Notebook串連Spark
安裝與配置Jupyter Notebook環境
在Jupyter中安裝SparkMagic外掛程式,以執行Spark互動式作業。請根據您的Jupyter版本選擇對應的方法,下面以JupyterLab 3.x為例。
重要所有可選步驟必須嚴格按照順序執行,不可跳過或亂序操作。若跳過任意步驟,值班工程師將無法通過Jupyter開機記錄分析環境問題,您需自行解決可能產生的各種報錯。
安裝SparkMagic。
pip install sparkmagic安裝ipywidgets。
pip install ipywidgets(可選)安裝封裝器核心。運行
pip show sparkmagic,它將顯示 sparkmagic 的安裝路徑。切換到該目錄並運行:jupyter-kernelspec install sparkmagic/kernels/sparkkernel jupyter-kernelspec install sparkmagic/kernels/pysparkkernel jupyter-kernelspec install sparkmagic/kernels/sparkrkernel(可選)修改SparkMagic的
config.json設定檔(檔案預設路徑為~/.sparkmagic/config.json),將127.0.0.1:5000修改為啟動監聽的IP和連接埠。以下為部分配置結構樣本,更多詳細參考相關樣本。"kernel_python_credentials": { "username": "", "password": "", "url": "http://127.0.0.1:5000", "auth": "None" }, "kernel_scala_credentials": { "username": "", "password": "", "url": "http://127.0.0.1:5000", "auth": "None" }, "kernel_r_credentials": { "username": "", "password": "", "url": "http://127.0.0.1:5000" },(可選)啟用伺服器擴充,以便通過代碼更改叢集。
jupyter server extension enable --py sparkmagic
啟動AnalyticDB for MySQL代理
您可以選擇以下任意一種方法啟動AnalyticDB for MySQL代理。
方法一:通過Docker啟動代理
啟動Docker鏡像後,拉取AnalyticDB for MySQL Jupyter鏡像。命令如下:
docker pull registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.pre啟動Docker代理。執行以下命令啟動容器並監聽本地5000連接埠。
docker run -it -p 5000:5000 -v {宿主機檔案路徑}:{Docker容器檔案路徑} registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.pre -d {ADB Instance Id} -r {Resource Group Name} -e {API Endpoint} -i {AK Id} -k {AK Sec} -t {StsToken} # StsToken和AK二選一參數說明:
參數名稱
是否必填
參數說明
-p
否
將宿主機連接埠綁定為容器連接埠。格式為
-p 宿主機連接埠:容器連接埠。宿主機連接埠可任意填寫,容器連接埠固定填寫為
5000。本文樣本為-p 5000:5000。-v
否
在不掛載宿主機檔案夾的情況下,關閉Docker容器後編輯的檔案會丟失。Docker容器關閉時也會自動嘗試終止所有正在啟動並執行Spark互動式作業。您可以選擇如下兩種方案避免編輯檔案丟失:
在啟動Jupyter互動式開發環境時,將宿主機檔案掛載到Docker容器中,並將作業檔案儲存體在對應的檔案路徑下。格式為
-v 宿主機路徑:Docker容器檔案路徑。Docker容器檔案路徑可任意填寫,建議填寫為/root/jupyter。在關閉Docker容器前保證所有的檔案被妥善地複製保管。
本文樣本為
-v /home/admin/notebook:/root/jupyter,表示將宿主機/home/admin/notebook路徑下的檔案掛載到Docker容器的/root/jupyter路徑。說明需要注意將編輯中的notebook檔案最終另存到
/tmp檔案夾,關閉Docker容器後,在宿主機的/home/admin/notebook檔案夾下可以看到對應的檔案,再次啟動Docker容器時可繼續執行。更多資訊,請參見Docker卷管理文檔。-d
是
AnalyticDB for MySQL企業版、基礎版及湖倉版叢集ID。
您可以登入AnalyticDB MySQL控制台,在叢集列表查看叢集的ID。
-r
是
AnalyticDB for MySQL Job型資源群組名稱。
您可以登入AnalyticDB MySQL控制台,在叢集管理 > 資源管理頁面,單擊資源群組管理頁簽,查看所有的資源群組資訊。
-e
是
AnalyticDB for MySQL叢集的服務存取點資訊。
詳細資料請參見服務存取點。
-i
條件必選
阿里雲帳號或RAM使用者的AccessKey ID和AccessKey Secret。
如何查看AccessKey ID和AccessKey Secret,請參見帳號與許可權。
-k
-t
條件必選
RAM角色的臨時身份憑證,即安全性權杖(STS Token)。
有許可權的RAM使用者可以使用自己的存取金鑰調用AssumeRole - 擷取扮演角色的臨時身份憑證介面,以擷取某個RAM角色的STS Token,從而使用STS Token訪問阿里雲資源。
方法二:通過命令列安裝代理
下載並安裝代理
pip install aliyun-adb-livy-proxy-0.0.1.zip執行以下命令啟動代理。
說明AnalyticDB for MySQL代理安裝成功後,可執行
adbproxy --help查看參數列表。adbproxy --db {ADB Instance Id} --rg {Resource Group Name} --endpoint {API Endpoint} --host 127.0.0.1 --port 5000 -i {AK Id} -k {AK Sec} -t {StsToken} # StsToken和AK二選一參數說明:
參數名稱
是否必填
參數說明
--db
是
AnalyticDB for MySQL企業版、基礎版及湖倉版叢集ID。
您可以登入AnalyticDB MySQL控制台,在叢集列表查看叢集的ID。
--rg
是
AnalyticDB for MySQL Job型資源群組名稱。
您可以登入AnalyticDB MySQL控制台,在叢集管理 > 資源管理頁面,單擊資源群組管理頁簽,查看所有的資源群組資訊。
--endpoint
是
AnalyticDB for MySQL叢集的服務存取點資訊。
詳細資料請參見服務存取點。
--host
否
adbproxy服務綁定的本地IP地址,預設為
127.0.0.1。--port
否
adbproxy服務監聽的連接埠號碼,預設為
5000。-i
條件必選
阿里雲帳號或者具備AnalyticDB for MySQL存取權限的RAM使用者的AccessKey ID和AccessKey Secret。
如何擷取AccessKey ID和AccessKey Secret,請參見帳號與許可權。
-k
-t
條件必選
RAM角色的臨時身份憑證,即安全性權杖(STS Token)。
有許可權的RAM使用者可以使用自己的存取金鑰調用AssumeRole - 擷取扮演角色的臨時身份憑證介面,以擷取某個RAM角色的STS Token,從而使用STS Token訪問阿里雲資源。
啟動成功後,控制台會輸出相關日誌資訊。
啟動Jupyster
使用以下命令啟動Jupyster互動開發環境。
jupyter lab若您設定了自訂監聽地址,請執行jupyter lab --ip=***啟動Jupyster,***為您的自訂監聽地址。
啟動成功後,返回如下提示資訊。您將URLhttp://127.0.0.1:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291複製到瀏覽器,即可使用Jupyter服務串連到AnalyticDB for MySQL Spark。
[I 2025-07-02 17:36:16.051 ServerApp] Serving notebooks from local directory: /home/newuser
[I 2025-07-02 17:36:16.052 ServerApp] Jupyter Server 2.16.0 is running at:
[I 2025-07-02 17:36:16.052 ServerApp] http://419e63fc7821:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291
[I 2025-07-02 17:36:16.052 ServerApp] http://127.0.0.1:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291
[I 2025-07-02 17:36:16.052 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).在Jupyter中運行作業
啟動資源並定義作業的最大ACU用量
用Jupyter服務串連AnalyticDB for MySQL Spark後,單擊頁面的PySpark,建立PySpark作業。此時Spark作業會使用預設的配置參數運行,預設配置參數如下:
{ "kind": "pyspark", "heartbeatTimeoutInSecond": "60", "spark.driver.resourceSpec": "medium", "spark.executor.resourceSpec": "medium", "spark.executor.instances": "1", "spark.dynamicAllocation.shuffleTracking.enabled": "true", "spark.dynamicAllocation.enabled": "true", "spark.dynamicAllocation.minExecutors": "0", "spark.dynamicAllocation.maxExecutors": "1", "spark.adb.sessionTTLSeconds": "1200" }如果您想修改Spark應用配置參數,可以使用
%%configure -f語句修改。重啟kernel。
單擊頁面頂部的,確保當前Jupyter開發頁面下沒有任何運行中的Spark應用。

在Jupyter Notebook Cell中輸入自訂的Spark應用配置參數。
重要自訂Spark應用配置參數時必須將spark.dynamicAllocation.enabled配置為false。
樣本:
此配置將為Spark作業分配32個Executor,每個Executor的規格為
medium(即2核8GB),整個作業最多可分配總計64 ACU的計算資源。%%configure -f { "spark.driver.resourceSpec":"large", "spark.sql.hive.metastore.version":"adb", "spark.executor.resourceSpec":"medium", "spark.adb.executorDiskSize":"100Gi", "spark.executor.instances":"32", "spark.dynamicAllocation.enabled":"false", "spark.network.timeout":"30000", "spark.memory.fraction":"0.75", "spark.memory.storageFraction":"0.3" }Spark應用配置參數的詳細介紹,請參見Spark應用配置參數說明和Spark官網。
單擊
按鈕,修改Spark應用配置參數。重要關閉Jupyter Notebook頁面後,自訂配置參數會失效。重新開啟Jupyter Notebook頁面時,需重新設定Spark應用參數,否則Spark作業會使用預設的應用配置參數運行。
在Jupyter Notebook頁面執行Spark作業時,所有配置項都直接寫入到JSON結構中,無需像提交Batch類型的作業時寫入到
conf的JSON對象中。
運行作業
輸入
spark命令,啟動 SparkSession。
說明單擊傳回值中的Link,可進入Spark UI介面查看Spark作業的日誌等資訊。
在Jupyter Notebook Cell中執行Spark SQL,查詢AnalyticDB for MySQL叢集中當前可用資料庫列表。
重要執行Spark SQL代碼前必須加
%%sql,否則會預設解析為Python代碼處理。您可執行%%help瞭解更多Magic指令及其用法。%%sql show databases
查詢結果與AnalyticDB for MySQL中一致。