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

在AWS EMR中使用自定义Jar依赖时如何避免类找不到异常

解决方案

问题根源在于你使用--driver-class-path时直接替换了EMR容器的默认类路径,导致EMR内置的EmrFileSystem相关类无法被加载。正确的做法是通过追加而非替换的方式添加自定义Jar,同时保留EMR的默认配置。

修改步骤

  • 移除--driver-class-path参数,改用spark.driver.extraClassPath和spark.executor.extraClassPath配置项,这两个参数会将自定义Jar追加到默认类路径之后,不会覆盖原有配置。
  • 保留--jars参数指定自定义Jar,确保Spark能将Jar分发给Driver和Executor。

修改后的代码

boto3.client("emr-containers").start_job_run(
    name=job_name,
    virtualClusterId=self.virtual_cluster_id,
    releaseLabel="emr-6.11.0-latest",
    executionRoleArn=role,
    jobDriver={
        "sparkSubmitJobDriver": {
            "entryPoint": entry_point,
            "entryPointArguments": entry_point_args,
            "sparkSubmitParameters": '--jars s3://my_bucket/mysql-connector-j-8.0.32.jar \
                --conf spark.driver.extraClassPath=s3://my_bucket/mysql-connector-j-8.0.32.jar \
                --conf spark.executor.extraClassPath=s3://my_bucket/mysql-connector-j-8.0.32.jar \
                --conf spark.kubernetes.driver.podTemplateFile=my_file.yaml \
                --conf spark.kubernetes.executor.podTemplateFile=my_file.yaml',
        }
    },
)

额外说明

  • 如果自定义Jar仅需在Driver端使用,可只配置spark.driver.extraClassPath;若Executor也需要(如读写MySQL数据场景),则必须同时配置spark.executor.extraClassPath。
  • --jars参数会将指定Jar上传至Spark分布式缓存,确保Driver和Executor都能访问,与extraClassPath配合可保证类路径加载正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:53:22