我与Scala编写了代码,以在EMR中运行集群。另外,我有一个用Scala编写的Spark应用程序。我想在EMR群集上运行此Spark应用程序。但是我可以在第一个脚本(启动EMR群集)中执行此操作吗?我想使用SDK而不是通过控制台或CLI来完成所有这些任务。它必须是一种自动化,而不是单个手动作业(或最小化手动作业)。
基本;
启动EMR群集->在EMR上运行Spark作业->作业完成后终止
如果可能,我该怎么办?谢谢。
HadoopJarStepConfig sparkStepConf = new HadoopJarStepConfig()
.withJar("command-runner.jar")
.withArgs(params);
final StepConfig sparkStep = new StepConfig()
.withName("Spark Step")
.withActionOnFailure("CONTINUE")
.withHadoopJarStep(sparkStepConf);
AddJobFlowStepsRequest request = new AddJobFlowStepsRequest(clusterId)
.withSteps(new ArrayList<StepConfig>(){{add(sparkStep);}});
AddJobFlowStepsResult result = emr.addJobFlowSteps(request);
return result.getStepIds().get(0);
如果您只是在寻找自动化,则应阅读有关管道编排的信息-
[如果您想始终运行Spark作业,建议您创建一个数据管道,并将您的管道配置为具有一个步骤,即使用“ shellcommandactivity”在主节点上运行Scala spark jar。另一个好处是,您正在运行的jar可以存储在AWS S3(对象存储服务)中,您只需提供s3到DataPipeline的路径,它将拾取该jar,并登录它带来的EMR服务( (使用您提供的配置)-在主节点上克隆该jar,使用“ shellcommandactivity”中提供的配置运行jar,一旦作业退出(成功或出现错误),它将杀死EMR集群,因此您无需为此付费并记录输出
请进一步阅读:https://aws.amazon.com/datapipeline/和https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/what-is-datapipeline.html
并且,如果您希望可以通过AWS开发工具包触发此管道,或者甚至可以将该管道设置为按计划运行,则>]