在Databricks上用MLflow记录Spark模型时遇404资源不存在错误
调试方向与解决方案
核心排查点
- 确认MLflow运行会话是否活跃
调用mlflow.spark.log_model()时必须处于有效的MLflow运行会话中。如果代码里提前调用了mlflow.end_run(),或者运行会话意外终止,后续log_model就会因找不到运行记录报404。可以在log_model前加一行print(mlflow.active_run()),输出不为None才是正常状态。 - 检查Spark模型的序列化能力
Spark随机森林模型如果包含自定义Transformer、UDF这类无法序列化的组件,会导致MLflow无法正常保存模型。先试试直接把模型存到DBFS:model.write().overwrite().save("/tmp/test-spark-model"),如果失败,先解决模型序列化的问题,再用MLflow记录。 - 核对MLflow版本与集群兼容性
Databricks 10.4 LTS默认适配MLflow 1.26.0,运行print(mlflow.__version__)确认版本是否匹配。如果版本不对,在集群库管理里重新安装对应版本的MLflow,重启集群再试。 - 检查制品目录权限与路径
确保当前用户对默认制品目录dbfs:/databricks/mlflow-tracking/有读写权限,也可以手动往这个路径写个文件验证。如果指定了自定义artifact_path,别用特殊字符,确保路径存在且有权限。
修复示例代码
- 规范运行会话管理:
import mlflow from pyspark.ml.classification import RandomForestClassifier # 用with语句确保运行会话直到log_model完成才结束 with mlflow.start_run() as run: # 训练模型 rf = RandomForestClassifier(numTrees=10) model = rf.fit(training_data) # 记录参数、指标 mlflow.log_param("numTrees", 10) mlflow.log_metric("accuracy", 0.85) # 记录Spark模型 mlflow.spark.log_model(model, artifact_path="spark-rf-model") - 验证模型序列化:
# 先测试直接保存模型到DBFS model.write().overwrite().save("/tmp/test-spark-model") # 成功的话再用MLflow记录;失败就排查模型里的自定义组件 - 同步MLflow版本:
在集群的PyPI库中添加mlflow==1.26.0,重启集群后重试操作。
额外调试技巧
开启MLflow调试日志,获取更详细的错误细节:
import logging logging.basicConfig(level=logging.DEBUG)
内容的提问来源于stack exchange,提问作者Kavishka Gamage
相关产品推荐
相关产品推荐

