如何通过使用SDK使Scala代码在EMR集群上运行?

问题描述 投票:0回答:2

我与Scala编写了代码,以在EMR中运行集群。另外,我有一个用Scala编写的Spark应用程序。我想在EMR群集上运行此Spark应用程序。但是我可以在第一个脚本(启动EMR群集)中执行此操作吗?我想使用SDK而不是通过控制台或CLI来完成所有这些任务。它必须是一种自动化,而不是单个手动作业(或最小化手动作业)。

基本;

启动EMR群集->在EMR上运行Spark作业->作业完成后终止

如果可能,我该怎么办?谢谢。

scala amazon-web-services amazon-emr
2个回答
2
投票
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);

0
投票

如果您只是在寻找自动化,则应阅读有关管道编排的信息-

  • EMR是允许您运行分布式应用程序的AWS服务
  • AWS DataPipeline是一个编排工具,可让您在资源(EMR甚至EC2)上运行作业(活动)

[如果您想始终运行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开发工具包触发此管道,或者甚至可以将该管道设置为按计划运行,则>]

© www.soinside.com 2019 - 2024. All rights reserved.