Jupyter交互式作业开发
云原生数据仓库 AnalyticDB MySQL 版Spark支持使用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中一致。