You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark Connect环境下MLflow日志模型报错求助

问题

环境配置

  • 搭载Spark Connect 4.0.1的Kubernetes集群
  • MLflow tracking server 3.5.0

MLflow Tracking Server配置

--backend-store-uri=postgresql://
--artifacts-destination=<s3 bucket>
--serve-artifacts

本地运行PySpark脚本连接集群后,模型训练和参数日志功能正常,但执行mlflow.spark.log_model(model, "model")时抛出异常:

UnknownException: (org.apache.hadoop.fs.UnsupportedFileSystemException) No FileSystem for scheme "mlflow-artifacts"JVM stacktrace:
org.apache.hadoop.fs.UnsupportedFileSystemException
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3581)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3612)
    at org.apache.hadoop.fs.FileSystem.access$300(FileSystem.java:172)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3716)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3667)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:557)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:366)
    at org.apache.spark.sql.execution.datasources.DataSource.makeQualified(DataSource.scala:125)
    at org.apache.spark.sql.execution.datasources.DataSource.planForWritingFileFormat(DataSource.scala:468)
    at org.apache.spark.sql.execution.datasources.DataSource.planForWriting(DataSource.scala:554)
    at org.apache.spark.sql.classic.DataFrameWriter.saveToV1Source(DataFrameWriter.scala:273)
    at org.apache.spark.sql.classic.DataFrameWriter.saveInternal(DataFrameWriter.scala:241)
    at org.apache.spark.sql.classic.DataFrameWriter.save(DataFrameWriter.scala:118)
    at org.apache.spark.sql.connect.planner.SparkConnectPlanner.handleWriteOperation(SparkConnectPlanner.scala:2954)

需求:不想让Spark直接访问MLflow背后的S3存储桶,解决通过Spark Connect向MLflow日志模型的问题。

解决方案

核心原因

使用mlflow.spark.log_model时,默认会让Spark集群直接写入MLflow的制品存储(此处为S3),但你的配置是让MLflow Server托管制品(--serve-artifacts),且Spark集群缺少mlflow-artifacts协议的FileSystem实现,因此抛出异常。

方法1:本地序列化模型后上传(推荐,无需修改Spark集群)

跳过Spark集群直接写入流程,改为在本地脚本中完成模型序列化与上传:

  1. 从Spark Connect获取模型的本地引用:
# 将Spark Connect中的模型转为本地可序列化格式
local_model = model.to_local()
  1. 通过本地MLflow客户端日志模型:
import mlflow

# 配置本地客户端指向你的MLflow Tracking Server
mlflow.set_tracking_uri("http://your-mlflow-server-address")

# 日志模型,此时由本地客户端将制品上传至MLflow Server,无需Spark集群访问S3
mlflow.spark.log_model(local_model, "model")

方法2:为Spark集群添加MLflow Hadoop FileSystem依赖

若必须由Spark集群处理写入操作,需在Kubernetes上的Spark Driver/Executor中添加MLflow的Hadoop FileSystem包:

  • 确保使用与MLflow版本匹配的mlflow-hadoop-fs jar包(此处为3.5.0版本)
  • 在Spark Submit或Spark Connect的配置中添加依赖:
--packages org.mlflow:mlflow-hadoop-fs:3.5.0

或在Kubernetes的Spark Pod模板中,将该jar包挂载至Spark的classpath目录下。

完成配置后,Spark集群即可识别mlflow-artifacts协议,通过MLflow Server间接访问S3存储桶。

内容的提问来源于stack exchange,提问作者hage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 23:43:10