2015-09-05 7 views

ответ

3

В предыдущей версии Бота, был вспомогательный класс с именем HiveStep, который сделал это легко построить шаг потока работы для выполнения улой работы. Однако в Boto3 подход изменился, и классы генерируются во время выполнения из AWS REST API. В результате такой вспомогательный класс не существует. Если посмотреть на исходный код HiveStep, https://github.com/boto/boto/blob/2d7796a625f9596cbadb7d00c0198e5ed84631ed/boto/emr/step.py, то это подкласс Step, который является классом со свойствами jarargs и mainclass, очень похожим на требования в Boto3.

Оказалось, что все шаги потока работ по EMR, включая Hive, все равно должны быть созданы из JAR. Поэтому вы можете выполнить шаги Hive через Boto3, но нет вспомогательного класса, чтобы упростить построение определения.

Рассматривая подход, использованный HiveStep в предыдущей версии Boto, вы можете построить правильное определение потока заданий.

Или вы можете вернуться к использованию предыдущей версии 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)