arn*_*o_v 4 python amazon-web-services emr apache-spark
我想创建一个新的EMR集群,运行PySpark作业并销毁它.理想情况下,我想通过在创建群集时添加一个步骤来实现此目的.我在本地运行以启动作业的命令如下所示:
spark-submit calculate.py --input x.csv --output output
我不明白的是我如何确保在主节点上已经可以使用calculate.py.我看到的从S3桶读取python脚本参考这里,但我无法得到那个工作.
现在我有单独的命令来创建集群,将脚本放在主节点上并添加步骤.这个问题是在作业步骤完成后集群继续运行.
我通过创建一个额外的步骤来解决这个问题,该步骤只是调用hadoop fs -copyToLocal下载文件.
我遇到了bootstrap步骤的问题,即尚未安装hadoop命令.
使用boto3的完整工作示例:
import boto3
client = boto3.client('emr', region_name='eu-central-1')
cluster_id = client.run_job_flow(
Name='My job',
LogUri='s3://my-bucket/emr-logs/',
ReleaseLabel='emr-4.0.0',
Instances={
'MasterInstanceType': 'm3.xlarge',
'SlaveInstanceType': 'm3.xlarge',
'InstanceCount': 2,
'Ec2KeyName': 'my_key',
'Ec2SubnetId': 'subnet-123456'
},
Applications=[
{
'Name': 'Spark'
}
],
Steps=[
{
'Name': 'Copy files to master',
'ActionOnFailure': 'CONTINUE',
'HadoopJarStep': {
'Jar': 'command-runner.jar',
'Args': [
'hadoop',
'fs',
'-copyToLocal',
'%s/code/*' % S3_BUCKET,
'/home/hadoop/'
]
}
},
{
'Name': 'Calculate step',
'ActionOnFailure': 'CONTINUE',
'HadoopJarStep': {
'Jar': 'command-runner.jar',
'Args': [
'spark-submit',
'/home/hadoop/calculate.py',
'--param',
'value'
]
}
}
],
VisibleToAllUsers=True,
JobFlowRole='EMR_EC2_DefaultRole',
ServiceRole='EMR_DefaultRole')
print cluster_id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2228 次 |
| 最近记录: |