我正在考虑使用AWS EMR Spark对存储在S3上的非常大的Parquet文件运行Spark应用程序。这里的总体流程是Java进程会将这些大文件上传到S3,我想在这些文件上自动触发运行Spark作业(注入了上载文件的S3键名)。
理想情况下,可以使用基于S3的EMR触发器进行连线;也就是说,我将EMR / Spark配置为“侦听” S3存储桶,并在对该存储桶进行upsertis操作时启动Spark作业。
如果不存在这样的触发器,我可能会把某些事情融合在一起,例如从S3事件中启动Lambda,并让Lambda以某种方式触发EMR Spark作业。
但是我的理解(如果我错了,请纠正我)是开始Spark工作的唯一方法是:
因此,如果我必须执行基于Lambda的合并,那么我不确定Lambda本身不是spark-submit在运行时中执行的,因此触发EMR / Spark作业的最佳方法是什么。即使我配置了自己的Lambda运行时(我相信现在可以做到),该解决方案也已经感觉到了真正的问题和容错。
有人曾经从S3触发器或任何 AWS触发器触发过EMR / Spark作业吗?
问题来源:Stack Overflow
EMR Spark作业可以作为添加Spark步骤中的步骤执行。步骤不只是在引导后的EMR集群创建时。
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[--class,org.apache.spark.examples.SparkPi,/usr/lib/spark/examples/jars/spark-examples.jar,10]
由于它是AWS CLI,因此您可以从Lambda调用它,也可以在其中将jar文件上传到HDFS或S3,然后使用s3://或hdfs://指向它。
该文档还有一个Java示例。
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials);
StepFactory stepFactory = new StepFactory();
AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);
AddJobFlowStepsRequest req = new AddJobFlowStepsRequest();
req.withJobFlowId("j-1K48XXXXXXHCB");
List<StepConfig> stepConfigs = new ArrayList<StepConfig>();
HadoopJarStepConfig sparkStepConf = new HadoopJarStepConfig()
.withJar("command-runner.jar")
.withArgs("spark-submit","--executor-memory","1g","--class","org.apache.spark.examples.SparkPi","/usr/lib/spark/examples/jars/spark-examples.jar","10");
StepConfig sparkStep = new StepConfig()
.withName("Spark Step")
.withActionOnFailure("CONTINUE")
.withHadoopJarStep(sparkStepConf);
stepConfigs.add(sparkStep);
req.withSteps(stepConfigs);
AddJobFlowStepsResult result = emr.addJobFlowSteps(req);
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。