Caractéristiques de l'application Spark pour les versions AMI antérieures d'Amazon EMR - Amazon EMR

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
  1. 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.

  2. Choisissez Create Cluster (Créer un cluster).

  3. Pour Configuration des logiciels, choisissez la version AMI dont vous avez besoin.

  4. Pour Applications to be installed (Applications à installer), choisissez Spark dans la liste, puis choisissez Configurer et ajouter.

  5. 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.

  6. 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. Pour savoir quels arguments sont acceptés par l'action d'amorçage, consultez le fichier READMEdans ce référentiel. L'action d'amorçage configure les propriétés dans le fichier $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 dans la documentation Apache Spark.