火山引擎 EMR on VKE 为您提供了 JupyterGE、JupyterLAB 两种Jupyter服务,集群中部署了这两种服务后,您即可使用EMR on VKE的Jupyter服务来开发任务代码。本文为您介绍EMR on VKE Jupyter的使用指导。
前提条件
使用此功能前,您需前在集群中部署JupyterGE、JupyterLAB服务。

如果此前集群为部署,您可在集群的“服务列表”页面右上角单击“添加服务”,按界面提示部署好这两个服务。
连接 EMR on VKE Jupyter
使用 Jupyter WebUI
- 安装JupyterLab 和Jupyter EG后,您可以在集群的“访问链接”页面看到 JupyterEG WebUI 和 JupyterLab WebUI。

- 单击 JupyterLab WebUI 链接后,可以进入JupyterLab可视化界面的登录页面。

- 在登录页面输入登录认证的token(即服务的jupyter_token参数取值)。
- 您可以在 JupyterLab 服务的服务参数中查询到jupyter_token的取值。

- 登录进入 JupyterLab WebUI 后,您可以看到默认内置三种kernel.

使用 VSCode 连接
JupyterLab支持Vscode 连接,您可以使用VSCode远程连接到EMR on VKE中的jupyterlab服务后,直接在VSCode中进行jupyterlab的操作。
以下为您示例使用 VSCode 连接的主要步骤,更多详细介绍请参见:详细参考文档。
- 打开 VSCode 后,安装vscode jupyter插件。

- 安装完成后,添加外部Jupyter Server连接。
- 打开vscode命令行(command+shift+P),输入“>jupyter”,选择创建新的Jupyter Notebook。

- 在右上角:选择内核 -> 现有jupyter服务器

- 输入EMR on VKE Jupyter WebUI地址。

- 填写密码(密码可通过服务中的:jupyter_token参数取值获取到,详情见上文“使用 Jupyter WebUI 章节)。

- 完成上述配置后,即可完成接入。

Kernel 使用说明
以下以使用 Jupyter WebUI 为例,为您示例 Kernel 的详细使用说明。
Python Kernel
选择Python on Kubernetes 使用。

Python代码编写
- 可在cell中编写python代码执行

- 按住tab可以触发代码提示

Debug
- Python kernel 支持debug,点击右上角的Enable Debugger按钮,开启debug模式

- 开启后,可以在代码左侧打上断点,执行后右侧能看到变量、堆栈等debug信息

PySpark(Client 模式)
EMR on VKE 支持开箱即用的Spark client模式,您可以在Python kernel中提交一个spark-client模式的spark任务(Driver 运行在python kernel中,Executor单独运行在vke集群中 )
SparkSession启动
在notebook中执行如下代码,启动sparkSession.
from pyspark.sql import SparkSession
from pyspark.storagelevel import StorageLevel
import os
KUBERNETES_SERVICE_HOST = os.environ['KUBERNETES_SERVICE_HOST']
KUBERNETES_SERVICE_PORT = os.environ['KUBERNETES_SERVICE_PORT']
spark = SparkSession.builder \
.appName("ReadTOSAndCount") \
.master(f"k8s://https://{KUBERNETES_SERVICE_HOST}:{KUBERNETES_SERVICE_PORT}") \
.getOrCreate()
启动后则可以执行spark相关代码

进入对应VKE集群页面中,您可以在工作负载中看到启动了的对应的executor。

读写TOS
- 如果需要读写tos,可以在EMR on VKE JupyterEG配置中,分别配置 ve_access_key 和 ve_secret_key 为您的AK/SK

- 配置后重启JupyterEG服务,使配置生效。

- 重启JupyterEG服务后,即可通过spark 读写TOS。

查看Spark Web UI
注意
需要EMR on VKE集群中提前安装Spark组件。
- 如果您希望Spark任务结束后,能够查看历史作业UI,可以通过在EMR on VKE JupyterEG配置中,分别配置以下服务参数。

- ve_access_key、ve_secret_key为您的TOS读写AK/SK
- spark_event_log_dir 为存储History uimeta文件的tos地址,需要与您的Spark组件中中的:event_log_dir 配置对齐
- spark_uiservice_enabled:设置为:true
- 配置后重启JupyterEG服务,使配置生效。

- 重启后,您在python kernel里将SparkSession stop 或者将kernel关闭后,即可在Spark History WebUI里看到作业。

Scala Kernel
- 选择Scala on Kubernetes 使用

- 可在notebook编辑、执行对应代码。

Spark Operator Kernel
Spark Operator Kernel利用EMR on VKE Spark Operator能力,启动后会在集群创建一个Cluster模式的SparkApp,
选择Spark Operator (Python) Kernel即可启动。
注意
- 需要EMR on VKE集群中提前安装Spark组件。
- 如果是后安装的Spark组件,需要您在Jupyter EG中的:kernel_sparkoperator_namespace 配置设置为Spark Operator所在的namesapce
- 选择 Spark Operator (Python) Kernel 使用。

- 启动后会自带SparkSession,您可以基于此进行数据处理。

EMR Serverless Spark Kernel
EMR On VKE JupyterLab支持连接到EMR Serverless Spark,
- 您可以在JupyterLab配置项里进行相关配置修改,具体参数如下。

- kernel_username:notebook
- enterprise_gateway_url:为EMR Serverless Jupyter 网关服务地址。参考如下:
- 华北公网 endpoint:https://notebook-eg.emr.cn-beijing.volces.com
- 华北内网 endpoint:http://ep-xxxx.privatelink.volces.com,详细内容请参考(可选)配置内网Endpoint。
- enterprise_auth_token:为EMR Serverless Jupyter 网关服务访问Token,需要工单联系EMR Serverless 提供。
- serverless_spark_conf:为EMR Serverless Jupyter 网关服务访问Conf,需要通过--conf的方式设置访问的AK/SK 以及相关的Spark Conf。
- 设置后重启Jupyterlab,重新登录后,则可以直接使用EMR Serverless Spark Kernel。

- 进入后等待Kernel 完成initializing,即可使用。

- 启动时,您可以在EMR Serverless 控制台的作业列表找到对应的作业

- Kernel与Serverless Spark作业,您可以通过:
spark.sql('set spark.app.id').show() 拿到对应的作业id。
