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

Sagemaker部署SparkML模型报错:健康检查未通过,key 'size'缺失

SparkML模型部署到SageMaker健康检查失败问题排查

环境信息

  • mleap-spark: 0.17.0
  • EMR: 5.24.0

问题现象

部署时触发报错:The primary container for production variant AllTraffic did not pass the ping health check sagemaker,CloudWatch日志中的核心异常(已翻译):

Caused by: org.springframework.beans.factory.BeanCreationException: 创建类路径资源[com/amazonaws/sagemaker/configuration/BeanConfiguration.class]中定义的'provideTransformer' Bean失败:工厂方法实例化Bean出错;嵌套异常是org.springframework.beans.BeanInstantiationException: 无法实例化[ml.combust.mleap.runtime.frame.Transformer]:工厂方法'provideTransformer'抛出异常;嵌套异常是java.util.NoSuchElementException: 找不到键: size

部署代码

from time import gmtime, strftime
import time

timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime())

import sagemaker
from sagemaker import get_execution_role
from sagemaker.sparkml.model import SparkMLModel

sess = sagemaker.Session()
role ="sagemaker-execution-role"# get_execution_role()


sparkml_data = "s3://{}/{}/{}".format(
    "emr-spark-sagemaker", "emr/sparkml-layer/mleap", "model.tar.gz"
)
model_name = "sparkml-layer-" + timestamp_prefix
sparkml_model = SparkMLModel(
    model_data=sparkml_data,
    role=role,
    sagemaker_session=sess,
    name=model_name,
    env={"SAGEMAKER_SPARKML_SCHEMA": schema_json},
)


endpoint_name = "sparkml-layer-ep-ap3"

sparkml_model.deploy(
    initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name
)

排查与解决

这个错误的核心是MLeap模型加载时找不到size键,从以下几个方向排查:

  1. 校验Schema配置

    • SAGEMAKER_SPARKML_SCHEMA传入的schema_json必须是模型训练时DataFrame的完整schema JSON串。可以在导出模型的Spark环境中执行df.schema.json()获取正确的schema,确保包含size字段(如果模型依赖该字段),且格式无错误。
    • 避免手动编写schema,容易出现字段名、类型不匹配的问题。
  2. 检查模型完整性

    • 下载S3上的model.tar.gz,解压后确认包含model.json和所有必要的MLeap模型文件,没有损坏或缺失。
    • 用MLeap Runtime在本地加载模型,验证模型本身是否能正常初始化,排除模型导出时的问题。
  3. 版本兼容性验证

    • EMR 5.24.0内置Spark 2.4.0,确认mleap-spark 0.17.0与该Spark版本兼容。若存在版本冲突,调整mleap版本至与Spark 2.4.x匹配的稳定版(比如mleap-spark 0.16.0)。
  4. 权限配置检查

    • 代码中手动指定的sagemaker-execution-role必须拥有S3模型文件的GetObject权限,以及SageMaker部署相关的权限。建议恢复使用get_execution_role()自动获取角色,避免手动配置出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:07:09