如何在EMR Serverless控制台提交Spark作业时传递JAR包与依赖包?
在EMR Serverless中提交Spark作业传递依赖包的方法
和传统spark-submit的--jars参数对应,EMR Serverless提供了几种实用方式来指定作业依赖的JAR包,具体操作如下:
1. 通过作业提交参数直接指定
你可以在提交EMR Serverless Spark作业时,用--conf参数设置spark.jars配置项,效果和spark-submit的--jars完全一致。注意:依赖JAR必须存放在EMR Serverless可访问的存储位置(比如AWS S3),不能使用本地路径。示例命令如下:
aws emr-serverless start-job-run \ --application-id <你的应用ID> \ --execution-role-arn <你的执行角色ARN> \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://你的存储路径/主程序.jar", "entryPointArguments": [], "sparkSubmitParameters": "--conf spark.jars=s3://你的依赖路径/hudi-spark3.3-bundle_2.12-0.11.1-amzn-0.jar,s3://你的依赖路径/hudi-utilities-bundle_2.12-0.11.1-amzn-0.jar" } }'
2. 在应用创建时预设依赖
如果多个作业需要复用相同依赖,可以在创建EMR Serverless应用时,通过spark-defaults.conf配置文件预设spark.jars:
spark.jars s3://你的依赖路径/hudi-spark3.3-bundle_2.12-0.11.1-amzn-0.jar,s3://你的依赖路径/hudi-utilities-bundle_2.12-0.11.1-amzn-0.jar
创建应用时指定该配置文件的S3路径,后续提交作业无需重复设置依赖。
3. 打包成胖JAR(Uber JAR)
如果依赖固定且数量不多,可将主程序与所有依赖打包成一个胖JAR,直接提交这个JAR即可,无需额外指定依赖项。这种方式适合依赖稳定的作业,简化提交流程。
注意事项
- 确保执行角色拥有访问S3依赖包路径的权限(需添加
s3:GetObject等相关权限)。 - EMR Serverless不支持本地文件路径,所有依赖必须上传至S3等可访问的存储服务。
内容的提问来源于stack exchange,提问作者Valle1208
相关产品推荐
相关产品推荐

