Comment soumettre des tâches Spark à un cluster Amazon EMR à partir d'une machine distante ou d'un nœud périphérique ?

Date de la dernière mise à jour : 02/03/2020

Je souhaite soumettre des tâches Apache Spark à un cluster Amazon EMR à partir d'une machine distante, comme une instance Amazon Elastic Compute Cloud (Amazon EC2).

Brève description

Pour soumettre des tâches Spark à un cluster EMR à partir d'une machine distante, les conditions suivantes doivent être remplies :

1.    Le trafic réseau est autorisé depuis la machine distante vers tous les nœuds du cluster.

2.    Tous les fichiers binaires Spark et Hadoop sont installés sur la machine distante.

3.    Les fichiers de configuration sur la machine distante pointent vers le cluster EMR.

Solution

Confirmer que le trafic réseau est autorisé depuis la machine distante vers tous les nœuds du cluster

  • Si vous utilisez une instance EC2 en tant que machine distante ou nœud périphérique : autorisez le trafic entrant depuis le groupe de sécurité de cette instance vers les groupes de sécurité de chaque nœud du cluster.
  • Si vous utilisez votre propre machine : autorisez le trafic entrant depuis l'adresse IP de votre machine vers les groupes de sécurité de chaque nœud du cluster.

Installer Spark et d'autres fichiers binaires dépendants sur la machine distante

Pour installer les fichiers binaires, copiez les fichiers à partir du nœud principal du cluster EMR, comme expliqué dans la procédure suivante. Il s'agit du moyen le plus simple de s'assurer que la même version est installée à la fois sur le cluster EMR et sur la machine distante.

1.    Exécutez les commandes suivantes pour créer la structure de dossiers sur la machine distante.

sudo mkdir -p /var/aws/emr/
sudo mkdir -p /etc/hadoop/conf
sudo mkdir -p /etc/spark/conf
sudo mkdir -p /var/log/spark/user/
sudo chmod 777 -R /var/log/spark/

2.    Copiez les fichiers suivants depuis le nœud principal du cluster EMR vers la machine distante. Ne modifiez pas la structure du dossier ou les noms de fichier.
/etc/yum.repos.d/emr-apps.repo
/var/aws/emr/repoPublicKey.txt

3.    Exécutez les commandes suivantes pour installer les fichiers binaires Spark et Hadoop :

sudo yum install -y hadoop-client
sudo yum install -y hadoop-hdfs
sudo yum install -y spark-core
sudo yum install -y java-1.8.0-openjdk

Si vous souhaitez utiliser le catalogue de données AWS Glue avec Spark, exécutez la commande suivante sur la machine distante pour installer les bibliothèques AWS Glue :

sudo yum install -y libgssglue

Créer les fichiers de configuration et les pointer vers le cluster EMR

Remarque : vous pouvez également utiliser des outils tels que rsync pour copier les fichiers de configuration depuis le nœud principal EMR vers l'instance distante.

1.    Exécutez les commandes suivantes sur le nœud principal du cluster EMR pour copier les fichiers de configuration dans Amazon Simple Storage Service (Amazon S3). Remplacez yours3bucket par le nom du compartiment que vous souhaitez utiliser.

aws s3 cp /etc/spark/conf s3://yours3bucket/emrhadoop-conf/sparkconf/ --recursive
aws s3 cp /etc/hadoop/conf s3://yours3bucket/emrhadoop-conf/hadoopconf/ --recursive

2.    Téléchargez les fichiers de configuration depuis le compartiment S3 vers la machine distante en exécutant les commandes suivantes sur les nœuds principaux et de tâche. Remplacez yours3bucket par le nom du compartiment que vous avez utilisé à l'étape précédente.

sudo aws s3 cp s3://yours3bucket/emrhadoop-conf/hadoopconf/ /etc/hadoop/conf/ --recursive
sudo aws s3 cp s3://yours3bucket/emrhadoop-conf/sparkconf/ /etc/spark/conf/ --recursive

3.    Créez le répertoire de base HDFS pour l'utilisateur qui va soumettre la tâche Spark au cluster EMR. Dans les commandes suivantes, remplacez sparkuser par le nom de votre utilisateur.

hdfs dfs –mkdir /user/sparkuser
hdfs dfs -chown sparkuser:sparkuser /user/sparkuser

La machine distante est à présent prête pour une tâche Spark.

Soumettre la tâche Spark

Exécutez la commande suivante pour soumettre une tâche Spark au cluster EMR. Remplacez les valeurs suivantes :
org.apache.spark.examples.SparkPi : la classe qui sert de point d'entrée à la tâche.
/usr/lib/spark/examples/jars/spark-examples.jar : chemin d'accès au fichier .jar Java

spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar

Vous pouvez également accéder aux données HDFS à partir de la machine distante à l'aide des commandes hdfs.

Erreurs courantes

Mode autonome

Amazon EMR ne prend pas en charge le mode Autonome pour Spark. Vous ne pouvez pas soumettre une application Spark à un cluster Amazon EMR distant en utilisant une commande telle que la suivante :

SparkConf conf = new
SparkConf().setMaster("spark://master_url:7077”).setAppName("Word Count");

Au lieu de cela, configurez votre machine locale comme expliqué précédemment dans cet article. Ensuite, soumettez l'application à l'aide de la commande spark-submit.

java.lang.UnsupportedClassVersionError

L'erreur suivante survient lorsque l'instance EC2 distante exécute Java version 1.7 et que le cluster EMR exécute Java 1.8 :

Exception in thread "main" java.lang.UnsupportedClassVersionError:
org/apache/spark/launcher/Main : Unsupported major.minor version 52.0

Pour corriger cette erreur, exécutez les commandes suivantes pour mettre à niveau la version Java sur l'instance EC2 :

sudo yum install java-1.8.0
sudo yum remove java-1.7.0-openjdk

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?