全部产品

Spark支持Virtualenv以及压缩文件上传

更新时间:2020-11-26 10:37

本文介绍了如何在使用数据湖分析的Spark时支持archives参数从而支持用户上传执行环境或者数据文件如机器学习模型等。

使用背景

当用户使用自建集群执行Spark作业时,可以使用--archives上传压缩包到Spark作业的执行环境中,在Spark执行过程中可直接使用压缩包中的文件,从而支持数据包的上传、PySpark执行环境的上传等场景。DLA Spark也支持使用archives上传压缩包到Spark作业的执行环境。

注意

当前archives 支持 zip、tgz、tar、tar.gz 四种文件扩展名

PySpark使用自定义Virtualenv

注意

必须在Linux下执行以下操作

1. 在Linux下打包Python执行环境

常用的工具包括VirtualenvConda,您可以根据需求来选择对应的工具。请首先根据官方文档安装对应的工具到您的Linux环境中。

注意

当前Serverless Spark支持的最高Python主版本为3.7

以下给出使用virtualenv生成一个执行环境压缩包venv.zip,压缩包中包含了scikit-spark的特定版本。

# create directory venv at current path with python3
virtualenv --copies --download --python Python3.7 venv

# active environment
source venv/bin/activate

# install third part modules
pip install scikit-spark==0.4.0

# check the result
pip list

# zip the environment
zip -r venv.zip venv

类似的,使用Conda生成独立运行环境可以参见此官方文档 Conda管理虚拟环境

2. 在Spark中使用这个虚拟环境

用户可以在提交Spark作业时使用类似如下的配置来使用这个虚拟环境,可以看到通过spark.pyspark.python来指向我们上传的运行包。同Spark开源社区的语义相同,venv.zip#PY3代表了将压缩包解压到计算节点工作目录的PY3文件夹下,继而从本地访问。

{
    "name": "venv example",
    "archives": [
        "oss://test/venv.zip#PY3"
    ],
    "conf": {
        "spark.driver.resourceSpec": "medium",
        "spark.dla.connectors": "oss",
        "spark.executor.instances": 1,
        "spark.dla.job.log.oss.uri": "oss://test/spark-logs",
        "spark.pyspark.python": "./PY3/venv/bin/python3",
        "spark.executor.resourceSpec": "medium"
    },
    "file": "oss://test/example.py"
}

当不使用#重命名时,需要使用压缩包名字作为路径的一部分

{
    "name": "venv example",
    "archives": [
        "oss://test/venv.zip"
    ],
    "conf": {
        "spark.driver.resourceSpec": "medium",
        "spark.dla.connectors": "oss",
        "spark.executor.instances": 1,
        "spark.dla.job.log.oss.uri": "oss://test/spark-logs",
        "spark.pyspark.python": "./venv.zip/venv/bin/python3",
        "spark.executor.resourceSpec": "medium"
    },
    "file": "oss://test/example.py"
}