2015-09-05 59 views

回答

3

在以前版本的Boto,有一个名叫HiveStep一个辅助类,这使得它易于构建用于执行蜂巢作业的作业流程的步骤。但是,在Boto3中,该方法已更改,并且类在运行时从AWS REST API生成。因此,不存在这样的辅助类。查看HiveStep,https://github.com/boto/boto/blob/2d7796a625f9596cbadb7d00c0198e5ed84631ed/boto/emr/step.py的源代码,可以看出这是Step的一个子类,它是属性为jarargsmainclass的类,与Boto3中的需求非常相似。

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

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

或者,您可以重新使用Boto以前的版本。

+0

什么是使用Boto3蜂房步骤的例子吗?我似乎无法找到任何示例或指针。我宁愿使用最新版本标签(4.0)。 – intl

+0

不确定4.0版本标签是什么意思? – mattinbits

+0

这是最新的emr 4.0版本。它作为CLI的参数传递。 – intl

3

我能得到这个使用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)