Caractéristiques de l'application Spark pour les versions AMI antérieures d'Amazon EMR
Utilisation interactive de Spark ou en mode de traitement par lots
Amazon EMR vous permet d'exécuter des applications Spark dans deux modes :
-
Interactive
-
Par lots
Lorsque vous lancez un cluster de longue durée à l'aide de la console ou de l'AWS CLI, vous pouvez vous connecter à l'aide de SSH dans le nœud maître en tant qu'utilisateur Hadoop et utiliser le shell de Spark pour développer et exécuter vos applications Spark de façon interactive. L'utilisation de Spark vous permet de façon interactive de créer un prototype ou de tester les applications Spark plus facilement que dans un environnement de traitement par lots. Après avoir révisé avec succès l'application Spark en mode interactif, vous pouvez placer le programme JAR ou Python de cette application dans le système de fichiers local du nœud principal du cluster sur Amazon S3. Vous pouvez alors soumettre l'application en tant que flux de travail de traitement par lots.
En mode de traitement par lots, chargez votre script Spark vers Amazon S3 ou le système de fichiers local du nœud principal, puis soumettez le travail au cluster en tant qu'étape. Les étapes Spark peuvent être soumises à un cluster de longue durée ou à un cluster transitoire.
Création d'un cluster avec Spark installé
Pour lancer un cluster avec Spark installé à l'aide de la console
Accédez à la nouvelle console Amazon EMR et sélectionnez Basculer vers l'ancienne console depuis le menu latéral. Pour plus d'informations sur ce qui vous attend lorsque vous passez à l'ancienne console, consultez la rubrique Utilisation de l'ancienne console.
-
Choisissez Create Cluster (Créer un cluster).
-
Pour Configuration des logiciels, choisissez la version AMI dont vous avez besoin.
-
Pour Applications to be installed (Applications à installer), choisissez Spark dans la liste, puis choisissez Configurer et ajouter.
-
Ajoutez des arguments pour modifier la configuration de Spark comme vous le souhaitez. Pour de plus amples informations, veuillez consulter Configuration de Spark. Choisissez Ajouter.
-
Sélectionnez d'autres options si nécessaire, puis choisissez Create cluster (Créer le cluster).
L'exemple suivant montre comment créer un cluster avec Spark au moyen de Java :
AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); SupportedProductConfig sparkConfig = new SupportedProductConfig() .withName("Spark"); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Spark Cluster") .withAmiVersion("3.11.0") .withNewSupportedProducts(sparkConfig) .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("
myKeyName
") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge") ); RunJobFlowResult result = emr.runJobFlow(request);
Configuration de Spark
Vous pouvez configurer Spark lorsque vous créez un cluster en exécutant l'action d'amorçage disponible au niveau du référentiel awslabs/emr-bootstrap-actions/spark sur Github$SPARK_CONF_DIR/spark-defaults.conf
. Pour plus d'informations sur les paramètres, consultez la rubrique Spark Configuration dans la documentation Spark. Vous pouvez remplacer « latest » dans l'URL suivante avec le numéro de la version de Spark que vous installez, par exemple, 2.2.0
http://spark.apache.org/docs/latest/configuration.html
Vous pouvez également configurer Spark dynamiquement au moment de l'envoi de chaque application. Un paramètre permettant d'optimiser automatiquement l'allocation de ressources pour un exécuteur est disponible dans le fichier de configuration spark
. Pour de plus amples informations, veuillez consulter Remplacement des paramètres de configuration par défaut de Spark.
Modification des paramètres Spark par défaut
L'exemple suivant montre comment créer un cluster avec spark.executor.memory
défini sur 2G au moyen de l'AWS CLI.
Note
Les caractères de continuation de ligne Linux (\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).
aws emr create-cluster --name "Spark cluster" --ami-version
3.11.0
\ --applications Name=Spark, Args=[-d,spark.executor.memory=2G] --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 --use-default-roles
Soumission d'un travail à Spark
Pour soumettre du travail à un cluster, utilisez une étape pour exécuter le script spark-submit
sur votre cluster EMR. Ajoutez l'étape à l'aide de la méthode addJobFlowSteps
dans AmazonElasticMapReduceClient :
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); StepFactory stepFactory = new StepFactory(); AddJobFlowStepsRequest req = new AddJobFlowStepsRequest(); req.withJobFlowId("j-
1K48XXXXXXHCB
"); List<StepConfig> stepConfigs = new ArrayList<StepConfig>(); StepConfig sparkStep = new StepConfig() .withName("Spark Step") .withActionOnFailure("CONTINUE") .withHadoopJarStep(stepFactory.newScriptRunnerStep("/home/hadoop/spark/bin/spark-submit","--class","org.apache.spark.examples.SparkPi","/home/hadoop/spark/lib/spark-examples-1.3.1-hadoop2.4.0.jar","10")); stepConfigs.add(sparkStep); req.withSteps(stepConfigs); AddJobFlowStepsResult result = emr.addJobFlowSteps(req);
Remplacement des paramètres de configuration par défaut de Spark
Vous souhaiterez probablement remplacer les valeurs de configuration par défaut de Spark indépendamment pour chaque application. Vous pouvez faire cela lorsque vous soumettez des applications à l'aide d'une étape, ce qui transmet essentiellement des options à spark-submit
. Par exemple, vous pouvez changer la mémoire allouée à un processus d'exécuteur en modifiant spark.executor.memory
. Vous pouvez fournir le commutateur --executor-memory
avec un argument tel que :
/home/hadoop/spark/bin/spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10
De même, vous pouvez ajuster --executor-cores
et --driver-memory
. Dans une étape, vous pouvez fournir les arguments suivants à l'étape :
--executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10
Vous pouvez également ajuster les paramètres qui n'ont peut-être pas de commutateur intégré à l'aide de l'option --conf
. Pour plus d'informations sur les autres paramètres ajustables, consultez la rubrique Chargement dynamique de propriétés Spark