Amazon web services 如何从Lambda函数在amazon EMR上执行spark submit?

Amazon web services 如何从Lambda函数在amazon EMR上执行spark submit?,amazon-web-services,apache-spark,aws-lambda,amazon-emr,spark-submit,Amazon Web Services,Apache Spark,Aws Lambda,Amazon Emr,Spark Submit,我想基于S3上的文件上载事件在AWS EMR集群上执行spark submit作业。我正在使用AWS Lambda函数捕获事件,但我不知道如何从Lambda函数提交EMR集群上的spark submit作业 我搜索的大多数答案都谈到在EMR集群中添加步骤。但是我不知道我是否可以在添加的步骤中添加任何步骤来触发“spark submit--with args”。你可以,我上周也做了同样的事情 使用boto3 for Python(其他语言肯定会有类似的解决方案),您可以使用定义的步骤启动集群,或者

我想基于S3上的文件上载事件在AWS EMR集群上执行spark submit作业。我正在使用AWS Lambda函数捕获事件,但我不知道如何从Lambda函数提交EMR集群上的spark submit作业


我搜索的大多数答案都谈到在EMR集群中添加步骤。但是我不知道我是否可以在添加的步骤中添加任何步骤来触发“spark submit--with args”。

你可以,我上周也做了同样的事情

使用boto3 for Python(其他语言肯定会有类似的解决方案),您可以使用定义的步骤启动集群,或者将步骤附加到已启动的集群

使用步骤定义集群 将步骤附加到已运行的群集 依照


你可以,我上周也做了同样的事情

使用boto3 for Python(其他语言肯定会有类似的解决方案),您可以使用定义的步骤启动集群,或者将步骤附加到已启动的集群

使用步骤定义集群 将步骤附加到已运行的群集 依照


如果要使用Spark submit命令执行Spark jar,请使用AWS Lambda函数python代码:

from botocore.vendored import requests

import json

def lambda_handler(event, context):

headers = { "content-type": "application/json" }

  url = 'http://ip-address.ec2.internal:8998/batches'

  payload = {

    'file' : 's3://Bucket/Orchestration/RedshiftJDBC41.jar 
s3://Bucket/Orchestration/mysql-connector-java-8.0.12.jar 

s3://Bucket/Orchestration/SparkCode.jar',

    'className' : 'Main Class Name',

    'args' : [event.get('rootPath')]

  }

  res = requests.post(url, data = json.dumps(payload), headers = headers, verify = False)

  json_data = json.loads(res.text)

  return json_data.get('id')

如果要使用Spark submit命令执行Spark jar,请使用AWS Lambda函数python代码:

from botocore.vendored import requests

import json

def lambda_handler(event, context):

headers = { "content-type": "application/json" }

  url = 'http://ip-address.ec2.internal:8998/batches'

  payload = {

    'file' : 's3://Bucket/Orchestration/RedshiftJDBC41.jar 
s3://Bucket/Orchestration/mysql-connector-java-8.0.12.jar 

s3://Bucket/Orchestration/SparkCode.jar',

    'className' : 'Main Class Name',

    'args' : [event.get('rootPath')]

  }

  res = requests.post(url, data = json.dumps(payload), headers = headers, verify = False)

  json_data = json.loads(res.text)

  return json_data.get('id')

如果我需要为mey代码文件添加s3路径,那么这个script-runner.jar是什么?Amazon提供了
s3n://elasticmapreduce
bucket。除了引用它之外,您不必做任何事情。这个spark submit操作是lambda函数的同步调用,还是只添加作业流而不实际调用它?如果需要为mey代码文件添加s3路径,这个script-runner.jar是什么?Amazon提供了
s3n://elasticmapreduce
bucket。除了引用它之外,您不必做任何事情。这个spark submit操作是lambda函数的同步调用,还是只添加作业流而不实际调用它?您能提高第一句中的英语水平并格式化代码吗?这使用livy提交spark作业。虽然作业可以通过这种方式运行,但许多集群没有配置Livy,因此这种方法有其局限性。您可以提高第一句中的英语水平并格式化代码吗?这将使用Livy提交Spark作业。虽然作业可以通过这种方式运行,但许多集群没有配置Livy,因此这种方法有其局限性
from botocore.vendored import requests

import json

def lambda_handler(event, context):

headers = { "content-type": "application/json" }

  url = 'http://ip-address.ec2.internal:8998/batches'

  payload = {

    'file' : 's3://Bucket/Orchestration/RedshiftJDBC41.jar 
s3://Bucket/Orchestration/mysql-connector-java-8.0.12.jar 

s3://Bucket/Orchestration/SparkCode.jar',

    'className' : 'Main Class Name',

    'args' : [event.get('rootPath')]

  }

  res = requests.post(url, data = json.dumps(payload), headers = headers, verify = False)

  json_data = json.loads(res.text)

  return json_data.get('id')