如何按需创建EMR集群并执行aws emr命令?

时间:2018-02-02 17:26:47

标签: amazon-web-services apache-spark emr amazon-emr

我想按需执行Spark作业。因此,只有当我收到触发事件时,我才想使用通过此触发事件到达的输入执行Spark作业。由于触发事件不频繁,我不想使用Spark Streaming。 我的目标是在AWS EMR集群中部署该工具。我希望能够按需创建EMR集群(通过触发器),在那里执行Spark作业并关闭集群。 有没有关于如何从Scala处理这些操作的好例子?

3 个答案:

答案 0 :(得分:1)

  • AWS Data Pipeline似乎是您定义的问题的正确解决方案。 AWS Data Pipeline允许您连接AWS基础架构中的多个服务范围,例如存储和处理。

  • 您可以使用AWS Data管道中的EMRActivity创建EMR作业。管道将在满足前置条件或预定时间间隔时触发。

  • 它将设置一个EMR集群,其中包含您指定的规范和您定义的Spark步骤

  • 作业完成后,群集可以自动终止。

这个问题question将帮助您入门。

  • 您还可以在使用Choose a Template选项创建管道时启动AWS Data Pipeline using this definition。对于此选项,您可以使用上面共享的模板。

答案 1 :(得分:1)

Lambda函数可能是一个好的解决方案,只要它可以启动EMR集群即可。 Lambda函数可以按需启动,也可以使用许多不同的触发器来启动。

这可能是开始设置Lambda函数的好模板:

`

import sys
import time

import boto3

def lambda_handler(event, context):
    conn = boto3.client("emr")
    # chooses the first cluster which is Running or Waiting
    # possibly can also choose by name or already have the cluster id
    clusters = conn.list_clusters()
    # choose the correct cluster
    clusters = [c["Id"] for c in clusters["Clusters"] 
                if c["Status"]["State"] in ["RUNNING", "WAITING"]]
    if not clusters:
        sys.stderr.write("No valid clusters\n")
        sys.stderr.exit()
    # take the first relevant cluster
    cluster_id = clusters[0]
    # code location on your emr master node
    CODE_DIR = "/home/hadoop/code/"

    # spark configuration example
    step_args = ["/usr/bin/spark-submit", "--spark-conf", "your-configuration",
                 CODE_DIR + "your_file.py", '--your-parameters', 'parameters']

    step = {"Name": "what_you_do-" + time.strftime("%Y%m%d-%H:%M"),
            'ActionOnFailure': 'CONTINUE',
            'HadoopJarStep': {
                'Jar': 's3n://elasticmapreduce/libs/script-runner/script-runner.jar',
                'Args': step_args
            }
        }
    action = conn.add_job_flow_steps(JobFlowId=cluster_id, Steps=[step])
    return "Added step: %s"%(action)

`

答案 2 :(得分:0)

  1. 与其通过api来旋转EMR集群,不如使用EMR更好 在云形成模板中配置并开始云形成 模板(CFT)。通过CFT,您可以处理IAM角色,创建S3 水桶等
  2. 通过lambda旋转EMR集群;如果正在进行或正在等待任何火花作业,则让另一个Lambda监视EMR。如果没有空闲时间(例如15分钟),则对CFT进行拆解,从而终止EMR