Boto3 EMR - 蜂巢步骤

Boto3 EMR - Hive step

是否可以使用 boto 3 执行配置单元步骤?我一直在使用 AWS CLI 这样做,但从文档 (http://boto3.readthedocs.org/en/latest/reference/services/emr.html#EMR.Client.add_job_flow_steps) 看来,似乎只接受 jars。如果可以使用 Hive 步骤,资源在哪里?

谢谢

在以前版本的 Boto 中,有一个名为 HiveStep 的助手 class,它可以轻松构建用于执行 Hive 作业的作业流步骤。但是在 Boto3 中,方法发生了变化,classes 是在 运行 时从 AWS REST API 生成的。因此,不存在这样的助手 class。查看HiveStep的源码,https://github.com/boto/boto/blob/2d7796a625f9596cbadb7d00c0198e5ed84631ed/boto/emr/step.py可以看出这是Step的subclass,是一个class,属性为jar argsmainclass,和Boto3中的要求非常相似。

事实证明,EMR 上的所有作业流程步骤,包括 Hive 的步骤,仍然需要从 JAR 实例化。因此,您可以通过 Boto3 执行 Hive 步骤,但没有帮助程序 class 可以轻松构建定义。

通过查看 HiveStep 在以前版本的 Boto 中使用的方法,您可以构建有效的作业流定义。

或者,您可以回退到使用以前版本的 Boto。

我能够使用 Boto3 使其工作:

# First create your hive command line arguments
hive_args = "hive -v -f s3://user/hadoop/hive.hql"

# Split the hive args to a list
hive_args_list = hive_args.split()

# Initialize your Hive Step 
hiveEmrStep=[
        {
            'Name': 'Hive_EMR_Step',
            'ActionOnFailure': 'CONTINUE',
            'HadoopJarStep': {
                'Jar': 'command-runner.jar',
                'Args': hive_args_list
            }
        },
    ]

# Create Boto3 session and client
session = boto3.Session(region_name=AWS_REGION,profile_name=AWS_PROFILE)
client = session.client('emr')

# Submit and execute EMR Step
client.add_job_flow_steps(JobFlowId=cluster_id,Steps=hiveEmrStep)

#Where cluster_id is the ID of your cluster from AWS EMR (ex: j-2GS7xxxxxx)