2014-06-14 15 views
14

Amazon EMR Documentation to add steps to cluster afferma che un singolo passo Elastic MapReduce può inviare diversi lavori a Hadoop. Tuttavia, Amazon EMR Documentation for Step configuration suggerisce che un singolo passaggio può ospitare solo un'esecuzione di hadoop-streaming.jar (ovvero, HadoopJarStep è un HadoopJarStepConfig piuttosto che un array di HadoopJarStepConfigs).Come posso inviare più di un lavoro a Hadoop in una fase utilizzando l'API Elastic MapReduce?

Qual è la sintassi corretta per l'invio di più lavori a Hadoop in una fase?

+0

è possibile specificare con quale linguaggio (lingua) si desidera inviare lavoro. Voglio dire in quale lingua si desidera codificare per inviare il processo EMR sul cluster. – hayat

+0

C'è un oggetto JSON che descrive il flusso di lavoro che viene letto da EMR, a prescindere da cosa, quindi la lingua che usi in origine per descrivere il flusso di lavoro non ha importanza: viene tradotta in JSON, ad esempio, la CLI di AWS secondo alcune specifiche . In realtà non penso che questa specifica soddisfi esplicitamente l'invio di più processi a Hadoop in un solo passaggio, ma probabilmente puoi usare script_runner.jar per farlo: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr -hadoop-script.html. Qualcuno che esplori questo più profondamente può scrivere una risposta. Ne accetterò uno buono. – verve

+0

Hai trovato una soluzione a questo? Sto ancora cercando come farlo usando AWS SDK. Sto usando le API di Javascript. – nishant

risposta

3

Come Amazon EMR Documentation dice, è possibile creare un cluster per eseguire alcuni script my_script.sh sull'istanza master in un passo:

aws emr create-cluster --name "Test cluster" --ami-version 3.11 --use-default-roles 
    --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance count 3 
    --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://mybucket/script-path/my_script.sh"] 

my_script.sh dovrebbe essere simile a questa:

#!/usr/bin/env bash 

hadoop jar my_first_step.jar [mainClass] args... & 
hadoop jar my_second_step.jar [mainClass] args... & 
. 
. 
. 
wait 

In questo modo, più lavori vengono inviati a Hadoop nello stesso passaggio, ma sfortunatamente l'interfaccia EMR non sarà in grado di seguirli. Per fare ciò, è necessario utilizzare le interfacce Web Hadoop come mostrato here o semplicemente ssh nell'istanza master ed esplorare con mapred job.

+0

È come accedere al cluster ed eseguire due job hadoop (non come passo, ma usando il comando "hadoop jar ...") Qui inoltre, nel cluster EMR ciò che sta accadendo è che, uno dei due lavori procede e l'altro continua ad attendere il progresso dello 0%. – Karshit

+1

@Karshit Sperimenta con Fair Scheduler, che è appropriato per distribuire le risorse in modo uniforme tra i lavori in esecuzione: http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/FairScheduler.html. Ciò richiede la modifica di yarn-site.xml, che i documenti su http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-configure-apps.html ti dicono come fare. – verve

+0

Proverò questo e ti faccio sapere. – Karshit

Problemi correlati