Jupyter Notebook是一個強大的互動式開發工具,您可以在Web介面中即時編寫和執行代碼,並即時查看結果,無需進行先行編譯或單獨執行指令碼。本文將為您介紹如何構建高效的與Serverless Spark互動的開發環境。
背景資訊
Apache Livy通過REST介面與Spark進行互動,極大地簡化了Spark和應用程式伺服器之間的通訊複雜度。關於Livy API,請參見REST API。
在使用Jupyter Notebook進行開發時,您可以通過使用sparkmagic外掛程式或Docker鏡像兩種方式與Serverless Spark進行互動。請根據實際情況選擇最適合的方案。
方式 | 適用情境 |
如果您希望快速構建一個獨立的開發環境,或者需要在不同機器上複現相同的設定,使用Docker鏡像將是一個便捷的選擇。 | |
Jupyter Notebook的sparkmagic外掛程式通過REST介面與Spark進行互動,目前sparkmagic支援Livy、Livy Lighter和Ilum三種協議。配置Jupyter Notebook中的sparkmagic外掛程式,並利用Serverless Spark的Livy API,以實現一個高效的與遠程Spark叢集互動的開發環境。 |
前提條件
根據您選擇的互動式開發的方式進行相應的操作:
方式一:使用Docker鏡像快速啟動環境:已安裝Docker,詳情請參見Docker官方文檔。
方式二:使用sparkmagic外掛程式啟動環境:已安裝並啟動Jupyter Notebook,詳情請參見Project Jupyter | Installing Jupyter。
本文樣本使用的是Jupyter Notebook與Python 3.8進行示範。
已建立工作空間,詳情請參見建立工作空間。
方式一:使用Docker鏡像快速啟動環境
步驟一:建立Gateway及訪問Token
建立並啟動Gateway。
進入Gateway頁面。
在左側導覽列,選擇。
在Spark頁面,單擊目標工作空間名稱。
在EMR Serverless Spark頁面,單擊左側導覽列中的。
單擊Livy Gateway頁簽。
在Livy Gateway頁面,單擊建立Livy Gateway。
在建立Gateway頁面,輸入名稱(例如,Livy-gateway),單擊建立。
其餘參數請根據具體情況進行調整,更多參數資訊請參見Gateway管理。
在Livy Gateway頁面,單擊已建立Gateway操作列的啟動。
建立Token。
在Gateway頁面,單擊Livy-gateway操作列的Token管理。
單擊建立Token。
在建立Token對話方塊中,輸入名稱(例如,Livy-token),單擊確定。
複製Token資訊。
重要Token建立完成後,請務必立即複製新Token的資訊,後續不支援查看。如果您的Token到期或遺失,請選擇建立Token或重設Token。
步驟二:使用Docker拉取並啟動鏡像
執行以下命令,拉取鏡像。
docker pull emr-registry-registry.cn-hangzhou.cr.aliyuncs.com/serverless-spark-public/emr-spark-jupyter:latest執行以下命令,啟動鏡像。
docker run -p <host_port>:8888 emr-registry-registry.cn-hangzhou.cr.aliyuncs.com/serverless-spark-public/emr-spark-jupyter:latest <endpoint> <token>涉及參數說明如下表所示。
參數
說明
<host_port>替換為您的主機連接埠。
<endpoint>替換為Livy Gateway的Endpoint資訊。
您可以在Livy Gateway頁面,單擊已建立的Livy Gateway的名稱,在總覽頁簽,查看Endpoint資訊。
<token>替換為您前一個步驟中複製的Token資訊。
待鏡像啟動後,您可以看到返回如下提示資訊。
[I 2024-09-23 05:38:14.429 ServerApp] jupyter_lsp | extension was successfully linked. [I 2024-09-23 05:38:14.432 ServerApp] jupyter_server_terminals | extension was successfully linked. [I 2024-09-23 05:38:14.436 ServerApp] jupyterlab | extension was successfully linked. [I 2024-09-23 05:38:14.439 ServerApp] notebook | extension was successfully linked. [I 2024-09-23 05:38:14.439 ServerApp] Writing Jupyter server cookie secret to /root/.local/share/jupyter/runtime/jupyter_cookie_secret [I 2024-09-23 05:38:14.596 ServerApp] notebook_shim | extension was successfully linked. [I 2024-09-23 05:38:14.624 ServerApp] notebook_shim | extension was successfully loaded. [I 2024-09-23 05:38:14.625 ServerApp] jupyter_lsp | extension was successfully loaded. [I 2024-09-23 05:38:14.626 ServerApp] jupyter_server_terminals | extension was successfully loaded. [I 2024-09-23 05:38:14.627 LabApp] JupyterLab extension loaded from /root/miniforge3/envs/livy/lib/python3.8/site-packages/jupyterlab [I 2024-09-23 05:38:14.627 LabApp] JupyterLab application directory is /root/miniforge3/envs/livy/share/jupyter/lab [I 2024-09-23 05:38:14.628 LabApp] Extension Manager is 'pypi'. [I 2024-09-23 05:38:14.637 ServerApp] jupyterlab | extension was successfully loaded. [I 2024-09-23 05:38:14.640 ServerApp] notebook | extension was successfully loaded. [I 2024-09-23 05:38:14.640 ServerApp] Serving notebooks from local directory: /root [I 2024-09-23 05:38:14.640 ServerApp] Jupyter Server 2.14.2 is running at: [I 2024-09-23 05:38:14.640 ServerApp] http://6eca53b95ca2:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b****** [I 2024-09-23 05:38:14.640 ServerApp] http://127.0.0.1:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b******訪問Jupyter UI。
請複製返回資訊中的
http://127.0.0.1:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b******連結到瀏覽器中,即可直接使用Jupyter服務串連Serverless Spark。說明如果您是通過遠程伺服器進行串連,請將IP地址
127.0.0.1替換為伺服器的實際IP地址。如果啟動鏡像時的
host_port不是8888,請將連接埠號碼替換為實際的連接埠號碼。
步驟三:測試連通性
在JupyterLab頁面,單擊PySpark。

執行以下命令,查詢可訪問的所有資料庫。
spark.sql("show databases").show()返回資訊如下所示。

方式二:使用sparkmagic外掛程式啟動環境
步驟一:建立Gateway及訪問Token
建立並啟動Gateway。
進入Gateway頁面。
在左側導覽列,選擇。
在Spark頁面,單擊目標工作空間名稱。
在EMR Serverless Spark頁面,單擊左側導覽列中的。
單擊Livy Gateway頁簽。
在Livy Gateway頁面,單擊建立Livy Gateway。
在建立Gateway頁面,輸入名稱(例如,Livy-gateway),單擊建立。
其餘參數請根據具體情況進行調整,更多參數資訊請參見Gateway管理。
在Livy Gateway頁面,單擊已建立Gateway操作列的啟動。
建立Token。
在Gateway頁面,單擊Livy-gateway操作列的Token管理。
單擊建立Token。
在建立Token對話方塊中,輸入名稱(例如,Livy-token),單擊確定。
複製Token資訊。
重要Token建立完成後,請務必立即複製新Token的資訊,後續不支援查看。如果您的Token到期或遺失,請選擇建立Token或重設Token。
步驟二:安裝並啟用sparkmagic外掛程式
執行以下命令,安裝sparkmagic外掛程式。
pip install sparkmagic根據您使用的Jupyter環境(Jupyter Notebook或JupyterLab),啟用相應的外掛程式。
對於Jupyter Notebook使用者
jupyter nbextension enable --py --sys-prefix widgetsnbextension對於JupyterLab使用者
jupyter labextension install "@jupyter-widgets/jupyterlab-manager"
sparkmagic外掛程式的更多詳細資料和進階配置選項,請參見sparkmagic。
步驟三:配置與啟動互動式Spark Session
訪問Jupyter UI,詳情請參見JupyterLab。
匯入sparkmagic外掛程式。
%load_ext sparkmagic.magics修改Session啟動配置。
延長啟動逾時時間,防止因資源調度延遲導致逾時失敗。
import sparkmagic.utils.configuration as conf conf.override("livy_session_startup_timeout_seconds", 1000)(可選)自訂 Spark 資源配置。
您可自行添加ttl、conf等參數,詳情請參見Livy Docs - REST API。
例如,以下配置樣本展示了如何修改Driver的資源配置。
%% spark config { "conf": { "spark.driver.cores": "1", "spark.driver.memory": "7g" } }
建立Session。
在Jupyter Notebook中建立Spark Session,支援Python和Scala兩種語言,您可以根據實際需求選擇語言並完成相關配置。
%spark add -s <session_name> -l python -u https://<endpoint> -a username -p <token>%spark add -s <session_name> -l scala -u https://<endpoint> -a username -p <token>請根據您的實際情況替換以下資訊。
參數
說明
<session_name>Spark Session的名稱。您可以自訂。
<endpoint>您在總覽頁簽擷取的Endpoint(外網)或Endpoint(內網)資訊。
如果使用內網Endpoint,請確保運行 Jupyter 的機器與 Livy Gateway部署在同一Region,且Endpoint前的
https://需改為http://。<token>替換為您在步驟一中複製的Token資訊。
本文樣本以Python語言為例,返回資訊如下所示。

請耐心等待1至5分鐘直至Session狀態變為
idle,則表明Session已成功建立並準備就緒。此時,介面會展示新建立的Session詳情,您可以開始進行Pyspark互動式開發。您還可以通過Serverless Spark控制台,在目標Livy Gateway的Session列表頁簽,查看Session資訊。驗證Session。
Session建立成功後,您可以通過
%%spark執行代碼。例如,通過以下代碼查看當前 Spark 環境中的所有資料庫。%%spark spark.sql("show databases").show()返回資訊如下所示。

(可選)步驟四:釋放Session資源
自動釋放。
建立的Session會在閑置達到兩小時後自動終止。
手動釋放。
通過
sparkmagic外掛程式釋放。%spark delete -s <session_name>通過Serverless Spark控制台釋放。
在目標Livy Gateway的Session列表頁簽,單擊已建立Session操作列的關閉。
