2015-09-05 28 views

Odpowiedz

3

W poprzedniej wersji Inii nastąpił klasa pomocnika nazwany HiveStep co sprawiło, że łatwo skonstruować etap przepływu pracy za wykonanie Hive pracę. Jednak w Boto3 podejście zmieniło się i klasy są generowane w czasie wykonywania z interfejsu API AWS REST. W rezultacie nie istnieje taka klasa pomocnicza. Patrząc na kod źródłowy HiveStep, https://github.com/boto/boto/blob/2d7796a625f9596cbadb7d00c0198e5ed84631ed/boto/emr/step.py można zauważyć, że jest to podklasa Step, która jest klasą o właściwościach jarargs i mainclass, bardzo podobną do wymagań w Boto3.

Okazuje się, że wszystkie etapy przepływu pracy w EMR, w tym w Hive, nadal muszą być tworzone z pliku JAR. Dlatego możesz wykonywać kroki Hive przez Boto3, ale nie ma klasy pomocnika, która ułatwiłaby skonstruowanie definicji.

Patrząc na podejście stosowane przez HiveStep w poprzedniej wersji Boto, można skonstruować poprawną definicję przepływu pracy.

Możesz też wrócić do używania poprzedniej wersji Boto.

+0

Jaki byłby przykładem ula kroku używając Boto3? Nie mogę znaleźć żadnych przykładów ani wskaźników. Wolę używać najnowszej wersji (4.0). – intl

+0

Nie wiesz, co masz na myśli przez etykietę wydania 4.0? – mattinbits

+0

Jest to najnowsze wydanie emr 4.0. Jest przekazywany jako argument z CLI. – intl

3

udało mi się uzyskać to do pracy za pomocą 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)