从S3事件触发AWS EMR Spark作业

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

我正在考虑使用AWS EMR Spark对存储在S3上的非常大的Parquet文件运行Spark应用程序。这里的总体流程是Java进程会将这些大文件上传到S3,我想在这些文件上自动触发Spark作业的运行(注入了上载文件的S3键名)。 >

理想情况下,可以使用基于S3的EMR触发器进行连线;也就是说,我将EMR / Spark配置为“侦听” S3存储桶,并在对该存储桶进行upsertis操作时启动Spark作业。

[如果不存在这样的触发器,我可能会相互混淆,例如从S3事件中启动Lambda,并让Lambda以某种方式触发EMR Spark作业。

但是我的理解

(如果我错了,请请纠正我)是启动Spark工作的唯一方法是:
  1. 将作业打包为可执行的JAR文件;和
  2. 通过spark-submit shell脚本
  3. 提交给集群(EMR或其他方式)>>

    因此,如果我必须执行基于Lambda的合并,则我不确定Lambda在运行时中不会原生携带spark-submit,因此触发EMR / Spark作业的最佳方法是什么。而且,即使我配置了自己的Lambda运行时(现在我可以[进行配置),该解决方案也确实感觉很虚弱和无故障。

    有人曾经从S3触发器或any

AWS触发器触发过EMR / Spark作业吗?] >>我正在考虑使用AWS EMR Spark对存储在S3上的非常大的Parquet文件运行Spark应用程序。这里的总体流程是Java进程会将这些大文件上传到S3,然后我将...'

EMR Spark作业可以作为Adding a Spark Step中的步骤执行。步骤不只是在引导后的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);

java amazon-web-services apache-spark amazon-s3 amazon-emr
1个回答
0
投票
EMR Spark作业可以作为Adding a Spark Step中的步骤执行。步骤不只是在引导后的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://指向它。
© www.soinside.com 2019 - 2024. All rights reserved.