如何将文件上载到新的EMR集群

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脚本参考这里,但我无法得到那个工作.

现在我有单独的命令来创建集群,将脚本放在主节点上并添加步骤.这个问题是在作业步骤完成后集群继续运行.

arn*_*o_v 6

我通过创建一个额外的步骤来解决这个问题,该步骤只是调用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)