2015-09-05 1 views

Répondre

3

Dans la version précédente de Boto, il y avait une classe d'aide nommée HiveStep qui a rendu facile de construire l'une étape de flux de travail pour l'exécution d'un travail Hive. Cependant, dans Boto3, l'approche a changé et les classes sont générées au moment de l'exécution à partir de l'API AWS REST. Par conséquent, aucune classe auxiliaire n'existe. En regardant le code source de HiveStep, https://github.com/boto/boto/blob/2d7796a625f9596cbadb7d00c0198e5ed84631ed/boto/emr/step.py, il peut être vu que c'est une sous-classe de Step, qui est une classe avec les propriétés jarargs et mainclass, très similaire aux requirments dans Boto3.

Il s'avère que toutes les étapes du flux de travaux sur EMR, y compris celles de Hive, doivent encore être instanciées à partir d'un fichier JAR. Par conséquent, vous pouvez exécuter des étapes Hive à travers Boto3, mais il n'y a pas de classe auxiliaire pour faciliter la construction de la définition. En examinant l'approche utilisée par HiveStep dans la version précédente de Boto, vous pouviez construire une définition de flux de travaux valide.

Ou, vous pourriez revenir à l'utilisation de la version précédente de Boto.

+0

Quel serait un exemple d'une étape à l'aide ruche Boto3? Je n'arrive pas à trouver des exemples ou des indications quelconques. Je préfère utiliser la dernière version de l'étiquette (4.0). – intl

+0

Vous ne savez pas ce que vous entendez par étiquette de version 4.0? – mattinbits

+0

C'est la dernière version de emr 4.0. C'est passé comme un argument de la CLI. – intl

3

j'ai pu obtenir ce travail en utilisant 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)