DataWorks Notebook使用帮助

更新时间:
复制为 MD 格式

本文介绍在DataWorks Notebook中使用PySpark时的配置方法,包括自定义配置、OSS存储访问、第三方Python包、JAR资源、Livy参数等。

使用自定义配置

重要

如果执行%%maxcompute_spark后提示dataworks-magic版本需要升级,请确保升级后再使用以下功能,否则可能不生效。

  1. 启动时设置SparkConf,例如设置Livy最长空闲时间(config表示和Livy相关的参数)和开启Schema级语法开关(spark_conf表示和Spark相关的参数),其余参数同理。

    %%maxcompute_spark
    {
      "config": {
        # cpu 和 memory 默认为14G
        "cpu": 1,
        "memory": "4096M",
        "livy.server.max.idle.time": "10m"
      },
      "quota": "XXX",
      "spark_conf": {
        "spark.sql.catalog.odps.enableNamespaceSchema": "true"
      }
    }
  2. 如果需要修改配置,只需重新执行上述代码即可。但是重启Spark Session会丢失之前的会话状态。

使用OSS存储

配置OSS访问参数:

重要
  • oss_endpoint必须使用Internal内网地址,例如:oss-cn-shanghai-internal.aliyuncs.com

  • 请不要在Notebook中设置spark.hadoop.fs.oss.implspark.hadoop.fs.AbstractFileSystem.oss.impl这两个参数,否则可能导致无法访问OSS。

%%maxcompute_spark
{
  "spark_conf": {
    "spark.hadoop.odps.cupid.trusted.services.access.list": "<bucket-name>.<oss-endpoint>",
    "spark.hadoop.fs.oss.accessKeyId": "***",
    "spark.hadoop.fs.oss.accessKeySecret": "***",
    "spark.hadoop.fs.oss.endpoint": "<oss-endpoint>"
  }
}

使用第三方Python

  1. 打包依赖:推荐使用pyodps-pack,强烈建议指定Python版本为3.11,因为Livy Spark Session默认使用Python 3.11,保持一致可避免兼容性问题。参考PySpark Python版本和依赖

    # 安装pyodps
    pip install pyodps
    
    # 准备requirements.txt,然后打包
    pyodps-pack -r requirements.txt --python-version=3.11 -o <package-name>
  2. 上传包到MaxCompute Project

    -- 在odpscmd中执行
    ADD archive /path/to/<package-name> -f;
  3. 配置Spark使用该包

    说明
    • 如果有多个cupid.resources用逗号(",")隔开,该参数具体效果请参考数据互通配置

    • 如果有多个PYTHONPATH路径用冒号(":")隔开。当前示例中PYTHONPATHpackages子目录是因为pyodps-pack打包会自动包含该子目录,如果是其他方式打包请明确目录结构再填写PYTHONPATH。关于PYTHONPATH更多详情请参考引用用户自定义的python

    %%maxcompute_spark
    {
      "spark_conf": {
        "spark.hadoop.odps.cupid.resources": "<your_project>.<package-name>",
        "spark.executorEnv.PYTHONPATH": "./<your_project>.<package-name>/packages",
        "spark.yarn.appMasterEnv.PYTHONPATH": "./<your_project>.<package-name>/packages"
      }
    }

使用JAR或其他资源包

  1. 上传资源(以tar.gz为例):add archive /path/to/<package-name> -f;

  2. 配置Spark加载资源,多个资源用英文逗号(",")分隔:

    %%maxcompute_spark
    {
      "spark_conf": {
        "spark.hadoop.odps.cupid.resources": "<your_project>.<package-name>"
      }
    }

可与Python包配置合并使用,都填写在spark_conf参数中。

高级配置

指定Spark版本

  • 支持的版本如下:

    • spark-3.1.1-odps0.47.0

    • spark-3.4.2-odps0.48.0(默认)

    • spark-3.5.2-odps0.49.0

  • 设置方式:

    %%maxcompute_spark
    {
      "spark_conf": {
        "spark.hadoop.odps.spark.version": "spark-3.4.2-odps0.48.0"
      }
    }

禁用默认Python 3.11环境

如需自定义Python环境:

%%maxcompute_spark
{
  "spark_conf": {
    "spark.hadoop.odps.spark.alinux3.enabled": "false"
  }
}

使用Matplotlib绘图

先将Matplotlib打包并上传,参考使用第三方Python,然后在Notebook中绘图:

%%spark

import matplotlib.pyplot as plt
import io, base64, json
import matplotlib
# 非必须
matplotlib.use('Agg')

# 必须在此处先创建figure(关键步骤)
fig = plt.figure()

# 示例绘图
x = [1, 2, 3, 4]
y = [20, 22, 19, 23]

plt.plot(x, y, marker='o', linestyle='--', color='b')
plt.title("Temperature Change Over Time")
plt.xlabel("Time")
plt.ylabel("Temperature")

# 渲染图像到Notebook(Livy魔法命令)
%matplot plt

Livy相关配置

以下列出可以控制的Livy参数:

参数名

默认值

说明

livy.server.access-control.enabled

true

是否开启权限控制,默认开启,不推荐关闭。

livy.server.max.alive.time

3d

Livy Server最长存活时间,默认3天。单位支持s、m、h、d。

livy.server.max.idle.time

1h

Livy Server最长空闲时间,默认1小时,超过该时间没有任何Spark Session就会自动关闭。

livy.server.session.timeout

12h

Spark Session最长空闲时间,默认12小时,超过该时间没有任何Spark任务执行就会自动关闭。

livy.server.session.state-retain.sec

12h

Spark Session过期后最长保留时间,默认12小时,关闭后超过该时间未重启将彻底销毁。

livy.server.session.max-creation

50

单个Livy Server可以同时存在的Session数量上限,默认50个。