Jupyter交互式作业开发

更新时间:

云原生数据仓库 AnalyticDB MySQL 版Spark支持使用Docker镜像快速启动Jupyter交互式开发环境,帮助您使用本地Jupyter Lab连接AnalyticDB for MySQL Spark,从而利用AnalyticDB for MySQL的弹性资源进行交互测试和计算。

前提条件

注意事项

  • 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

  1. 安装并启动Docker镜像

  2. 启动Docker镜像后,拉取AnalyticDB for MySQL Jupyter镜像。命令如下:

    docker pull registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.pre
  3. 启动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} # StsTokenAK二选一

    参数说明:

    参数名称

    是否必填

    参数说明

    -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 IDAccessKey Secret。

    如何查看AccessKey IDAccessKey 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 ****************

    启动成功后,返回如下提示信息,您将URLhttp://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环境

  1. 安装JupyterLabJupyterHub

  2. Jupyter安装SparkMagic插件,以执行Spark交互式作业。请根据您的Jupyter版本选择对应的方法,下面以JupyterLab 3.x为例。

    重要

    所有可选步骤必须严格按照顺序执行,不可跳过或乱序操作。若跳过任意步骤,值班工程师将无法通过Jupyter启动日志分析环境问题,您需自行解决可能产生的各种报错。

    1. 安装SparkMagic。

      pip install sparkmagic
    2. 安装ipywidgets。

      pip install ipywidgets 
    3. (可选)安装包装器内核。运行 pip show sparkmagic,它将显示 sparkmagic 的安装路径。切换到该目录并运行:

       jupyter-kernelspec install sparkmagic/kernels/sparkkernel
       jupyter-kernelspec install sparkmagic/kernels/pysparkkernel
       jupyter-kernelspec install sparkmagic/kernels/sparkrkernel
    4. (可选)修改SparkMagicconfig.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"
      },
    5. (可选)启用服务器扩展,以便通过代码更改集群。

      jupyter server extension enable --py sparkmagic

启动AnalyticDB for MySQL代理

您可以选择以下任意一种方法启动AnalyticDB for MySQL代理。

方法一:通过Docker启动代理

  1. 安装并启动Docker镜像

  2. 启动Docker镜像后,拉取AnalyticDB for MySQL Jupyter镜像。命令如下:

    docker pull registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.pre
  3. 启动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} # StsTokenAK二选一

    参数说明:

    参数名称

    是否必填

    参数说明

    -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 IDAccessKey Secret。

    如何查看AccessKey IDAccessKey Secret,请参见账号与权限

    -k

    -t

    条件必选

    RAM角色的临时身份凭证,即安全令牌(STS Token)。

    有权限的RAM用户可以使用自己的访问密钥调用AssumeRole - 获取扮演角色的临时身份凭证接口,以获取某个RAM角色的STS Token,从而使用STS Token访问阿里云资源。

方法二:通过命令行安装代理

  1. 下载并安装代理

    pip install aliyun-adb-livy-proxy-0.0.1.zip
  2. 执行以下命令启动代理。

    说明

    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} # StsTokenAK二选一

    参数说明:

    参数名称

    是否必填

    参数说明

    --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 IDAccessKey Secret。

    如何获取AccessKey IDAccessKey Secret,请参见账号与权限

    -k

    -t

    条件必选

    RAM角色的临时身份凭证,即安全令牌(STS Token)。

    有权限的RAM用户可以使用自己的访问密钥调用AssumeRole - 获取扮演角色的临时身份凭证接口,以获取某个RAM角色的STS Token,从而使用STS Token访问阿里云资源。

  3. 启动成功后,控制台会输出相关日志信息。

启动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用量

  1. 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"
    }
  2. 如果您想修改Spark应用配置参数,可以使用%%configure -f语句修改。

    1. 重启kernel。

      单击页面顶部的Kernel > Restart Kernel and Clear All Outputs,确保当前Jupyter开发页面下没有任何运行中的Spark应用。

      image

    2. Jupyter Notebook Cell中输入自定义的Spark应用配置参数。

      重要

      自定义Spark应用配置参数时必须将spark.dynamicAllocation.enabled配置为false

      示例:

      此配置将为Spark作业分配32Executor,每个Executor的规格为 medium(即28GB),整个作业最多可分配总计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官网

  3. 单击image按钮,修改Spark应用配置参数。

    重要
    • 关闭Jupyter Notebook页面后,自定义配置参数会失效。重新打开Jupyter Notebook页面时,需重新配置Spark应用参数,否则Spark作业会使用默认的应用配置参数运行。

    • Jupyter Notebook页面执行Spark作业时,所有配置项都直接写入到JSON结构中,无需像提交Batch类型的作业时写入到confJSON对象中。

运行作业

  1. 输入spark命令,启动 SparkSession。image

    说明

    单击返回值中的Link,可进入Spark UI界面查看Spark作业的日志等信息。

  2. Jupyter Notebook Cell中执行Spark SQL,查询AnalyticDB for MySQL集群中当前可用数据库列表。

    重要

    执行Spark SQL代码前必须加%%sql,否则会默认解析为Python代码处理。您可执行 %%help 了解更多Magic指令及其用法。

    %%sql
    show databases

    image查询结果与AnalyticDB for MySQL中一致。