DataHub S3元数据采集Spark安装与环境变量配置问题咨询
问题背景
使用DataHub采集S3存储桶/前缀路径元数据时触发报错:{logger:26} - Please set env variable SPARK_VERSION.
对照DataHub S3模块官方文档说明,S3元数据画像计算依赖PyDeequ组件,PyDeequ底层基于PySpark运行,要求环境预装匹配Hadoop 3.2的Spark 3.0.3版本,同时正确配置SPARK_HOME、SPARK_VERSION环境变量。
配置规则说明
Spark安装位置
- 本地直接运行DataHub采集进程的场景:Spark没有强制固定安装路径,存放在本地文件系统任意目录均可,只要执行采集任务的系统账号对Spark安装目录有读、执行权限就行,常规部署常用路径为
/opt/spark(Linux/macOS)、C:\spark(Windows)。 - 容器化运行DataHub采集组件的场景:必须将对应版本Spark安装在运行S3采集任务的容器内部。容器默认和宿主机做文件系统、环境变量隔离,宿主机上安装的Spark无法被容器内进程直接识别。如果基于DataHub官方镜像二次部署,可以在镜像构建阶段直接预装对应版本Spark,也可以在容器启动时将宿主机的Spark目录挂载到容器内使用,注意挂载后要同步配置容器内环境变量指向挂载路径。
环境变量配置位置
根据采集任务的运行方式选择对应配置位置即可:
- 本地命令行直接执行采集脚本:
临时测试可以在执行采集命令前直接在当前shell会话声明变量,示例:
需要永久生效的话,把上述export语句写入当前用户的shell配置文件(比如bash对应export SPARK_HOME=/your/actual/spark/install/path export SPARK_VERSION=3.0.3 datahub ingest -c your_s3_ingestion_config.yaml~/.bashrc、zsh对应~/.zshrc)或者系统级配置/etc/profile,写完执行source 对应配置文件路径加载配置即可。 - 容器化运行采集任务:
用docker启动的话,可以在docker run命令的--env参数或者docker-compose.yml的environment字段传入两个变量,变量值填容器内部的Spark安装路径;如果是K8s部署,直接在对应工作负载的env字段配置变量即可。
校验提示:版本必须严格匹配官方要求的Spark 3.0.3 + Hadoop 3.2,版本不兼容会直接触发PyDeequ运行异常,导致S3元数据画像计算失败。配置完成后可以执行
echo $SPARK_VERSION、$SPARK_HOME/bin/spark-submit --version验证,能正常返回对应Spark版本信息才说明配置生效。
内容的提问来源于stack exchange,提问作者pralik
相关产品推荐
相关产品推荐

