如何在AWS EMR集群中运行Python脚本以替代Java Jar应用
在AWS EMR上运行Python脚本替代Java Jar的方法
嘿,我来帮你搞定在AWS EMR上运行Python脚本的事儿!你之前用HadoopJarStepConfig跑Java Jar的思路没问题,换成Python的话,得用EMR专门的Script Runner工具,对应的配置类是ScriptRunnerStepConfig,我给你一步步讲清楚怎么弄:
核心思路
EMR的Script Runner是一个预安装的Jar包,专门用来运行shell、Python这类非Java的脚本。你只需要把Python脚本上传到S3,然后通过ScriptRunnerStepConfig指定脚本路径和参数即可。
具体代码实现
对比你之前的Java Jar代码,替换后的Python脚本运行配置如下:
原Java Jar运行代码
HadoopJarStepConfig runExampleConfig = new HadoopJarStepConfig() .withJar(jar_name) .withArgs(main_arguments);
替换为Python脚本的代码
// 1. 指定EMR自带的Script Runner Jar路径(固定路径,无需自己上传) String scriptRunnerJar = "s3://elasticmapreduce/libs/script-runner/script-runner.jar"; // 2. 创建ScriptRunnerStepConfig,配置Python脚本路径和参数 // 第一个参数必须是你的Python脚本在S3的完整路径,后面是脚本需要的运行参数 ScriptRunnerStepConfig runPythonScriptConfig = new ScriptRunnerStepConfig() .withJar(scriptRunnerJar) .withArgs( "s3://your-bucket/path/to/your/script.py", "your-first-argument", "your-second-argument" ); // 3. 将配置转为StepConfig,添加到EMR集群的步骤列表中 StepConfig pythonScriptStep = new StepConfig() .withName("Execute Python Script") .withActionOnFailure(ActionOnFailure.CONTINUE) // 可根据需求调整失败后的动作(比如TERMINATE_CLUSTER) .withHadoopJarStep(runPythonScriptConfig);
关键注意事项
- 脚本存储位置:必须把Python脚本上传到S3,EMR集群的节点需要能访问这个S3路径,请确保集群的IAM角色有
s3:GetObject权限。 - 依赖包安装:如果你的Python脚本需要额外的第三方库(比如pandas、numpy),可以通过Bootstrap Action在集群启动时安装。示例Bootstrap脚本如下(上传到S3后添加到集群配置):
#!/bin/bash # 安装Python3依赖 sudo pip3 install pandas numpy - PySpark脚本特殊处理:如果是运行PySpark脚本,你可以直接用
SparkSubmitStepConfig来提交,示例代码如下:SparkSubmitStepConfig pySparkStepConfig = new SparkSubmitStepConfig() .withMaster("yarn") .withDeployMode("cluster") .withAppResource("s3://your-bucket/path/to/your/pyspark_script.py") .withArgs("arg1", "arg2"); StepConfig pySparkStep = new StepConfig() .withName("Run PySpark Script") .withActionOnFailure(ActionOnFailure.CONTINUE) .withHadoopJarStep(new HadoopJarStepConfig(pySparkStepConfig));
内容的提问来源于stack exchange,提问作者Shru
相关产品推荐
相关产品推荐

