Ce tutoriel illustre différentes manières de créer et d'envoyer un job Spark Scala à un cluster Managed Service pour Apache Spark, y compris comment :
- Écrire et compiler une application "Hello World" Spark Scala sur une machine locale à partir de la ligne de commande à l'aide de Scala REPL (Read-Evaluate-Print-Loop ou interpréteur interactif) ou de l'outil de compilation SBT
- empaqueter des classes Scala compilées dans un fichier JAR avec un fichier manifeste ;
- Envoyer le fichier JAR Scala à un job Spark qui s'exécute sur votre cluster Managed Service pour Apache Spark
- Examiner le résultat d'un job Scala depuis la console Google Cloud
Ce tutoriel vous explique également comment :
Écrire et exécuter un job MapReduce "WordCount" Spark Scala directement sur un cluster Managed Service pour Apache Spark à l'aide de la boucle REPL
spark-shellexécuter des exemples Apache Spark et Hadoop pré-installés sur un cluster.
Configurer un projet Google Cloud
Si ce n'est pas déjà fait, effectuez les opérations suivantes :
- Configurer un projet
- Créer un bucket Cloud Storage
- Créer un cluster Managed Service pour Apache Spark
Écrire et compiler le code Scala en local
Pour vous entraîner, écrivez une application Scala "Hello World" à l'aide de l'outil REPL Scala ou de l'interface de ligne de commande SBT localement sur votre ordinateur de développement.
Utiliser Scala
- Téléchargez les fichiers binaires Scala depuis la page d'installation de Scala.
Décompressez le fichier, définissez la variable d'environnement
SCALA_HOMEet ajoutez-la à votre chemin d'accès, comme indiqué dans les instructions d'installation de Scala. Exemple :export SCALA_HOME=/usr/local/share/scala export PATH=$PATH:$SCALA_HOME/
Lancez le REPL Scala.
$ scala Welcome to Scala version ... Type in expressions to have them evaluated. Type :help for more information. scala>
Copiez et collez le code
HelloWorlddans le REPL Scala.object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } }
Enregistrez
HelloWorld.scalaet quittez le REPL.scala> :save HelloWorld.scala scala> :q
Effectuez la compilation avec
scalac.$ scalac HelloWorld.scala
Répertoriez les fichiers
.classcompilés.$ ls HelloWorld*.class HelloWorld$.class HelloWorld.class
Utiliser SBT
Créez un projet "HelloWorld", comme illustré ci-dessous.
$ mkdir hello $ cd hello $ echo \ 'object HelloWorld {def main(args: Array[String]) = println("Hello, world!")}' > \ HelloWorld.scalaCréez un fichier de configuration
sbt.buildpour définirartifactName(le nom du fichier jar que vous allez générer ci-dessous) sur "HelloWorld.jar" (voir Modifier les artefacts par défaut).echo \ 'artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) => "HelloWorld.jar" }' > \ build.sbtLancez SBT et exécutez le code.
$ sbt [info] Set current project to hello ... > run ... Compiling 1 Scala source to .../hello/target/scala-.../classes... ... Running HelloWorld Hello, world! [success] Total time: 3 s ...
Empaquetez le code dans un fichier JAR avec un fichier manifeste indiquant le point d'entrée de la classe principale (
HelloWorld), puis quittez l'outil.> package ... Packaging .../hello/target/scala-.../HelloWorld.jar ... ... Done packaging. [success] Total time: ... > exit
Créer un fichier JAR
Créez un fichier JAR avec SBT ou à l'aide de la commande jar.
Créer un fichier JAR
avec SBT
La commande package SBT crée un fichier JAR (voir Utiliser SBT).
Créer un fichier JAR
manuellement
- Basculez vers le répertoire (commande
cd) où sont stockés vos fichiersHelloWorld*.classcompilés, puis exécutez la commande suivante pour empaqueter les fichiers de classe dans un fichier JAR avec un fichier manifeste qui spécifie le point d'entrée de la classe principale (HelloWorld).$ jar cvfe HelloWorld.jar HelloWorld HelloWorld*.class added manifest adding: HelloWorld$.class(in = 637) (out= 403)(deflated 36%) adding: HelloWorld.class(in = 586) (out= 482)(deflated 17%)
Copier le fichier JAR dans Cloud Storage
- Utilisez la Google Cloud CLI pour copier le fichier JAR dans un bucket Cloud Storage de votre projet.
$ gcloud storage cp HelloWorld.jar gs://<bucket-name>/ Copying file://HelloWorld.jar [Content-Type=application/java-archive]... Uploading gs://bucket-name/HelloWorld.jar: 1.46 KiB/1.46 KiB
Envoyer le fichier JAR à un job Managed Service pour Apache Spark
Utilisez la consoleGoogle Cloud pour envoyer le fichier JAR à votre job Managed Service pour Apache Spark. Renseignez les champs de la page Envoyer un job comme suit :
- Sélectionner le type de calcul pour le job : Spark sur Compute Engine
- Détails du job de cluster :
- Cluster : sélectionnez le nom de votre cluster dans la liste.
Fichiers et artefacts :
- Type de tâche : Spark (Scala/Java)
Configuration du pilote : sélectionnez URI du fichier JAR principal, puis dans le champ Fichier JAR principal, spécifiez le chemin d'accès de l'URI Cloud Storage vers votre fichier JAR HelloWorld (
gs://your-bucket-name/HelloWorld.jar).Si votre fichier JAR n'inclut pas de fichier manifeste spécifiant le point d'entrée de votre code ("Main-Class: HelloWorld"), sélectionnez Classe principale sous Configuration du pilote, saisissez le nom de votre classe principale ("HelloWorld") dans le champ Classe principale, puis renseignez le champ Fichiers JAR avec le chemin d'URI de votre fichier JAR (
gs://your-bucket-name/HelloWorld.jar).
Cliquez sur Envoyer pour démarrer la tâche. Une fois le job lancé, il est ajouté à la liste des jobs.
Cliquez sur l'ID de job pour ouvrir la page Jobs, où vous pouvez afficher la sortie du pilote du job.
Écrire et exécuter du code Spark Scala à l'aide du REPL spark-shell du cluster
Vous pouvez développer des applications Scala directement sur votre cluster Managed Service pour Apache Spark. Hadoop et Spark sont préinstallés sur les clusters Managed Service pour Apache Spark et sont configurés avec le connecteur Cloud Storage, qui permet à votre code de lire et d'écrire des données directement depuis et vers Cloud Storage.
Cet exemple vous montre comment utiliser SSH pour vous connecter au nœud maître du cluster Managed Service pour Apache Spark, puis utiliser la boucle REPL spark-shell pour créer et exécuter une application MapReduce Scala de comptage de mots.
Utiliser SSH pour se connecter au nœud maître du cluster
Accédez à la page Clusters de la console Google Cloud , puis cliquez sur le nom de votre cluster.
Sur la page d'informations du cluster, sélectionnez l'onglet Instances de VM, puis cliquez sur la sélection SSH qui s'affiche à droite de la ligne du nom de votre cluster.
Une fenêtre de navigateur s'ouvre dans votre répertoire d'accueil sur le nœud maître.
Lancez
spark-shell.$ spark-shell ... Using Scala version ... Type in expressions to have them evaluated. Type :help for more information. ... Spark context available as sc. ... SQL context available as sqlContext. scala>
Créez un RDD (ensemble de données distribué résilient) à partir d'un extrait de texte de Shakespeare situé dans un espace de stockage Cloud Storage public.
scala> val text_file = sc.textFile("gs://pub/shakespeare/rose.txt")Exécutez une commande MapReduce "WordCount" sur le texte, puis affichez le résultat
wordcounts.scala> val wordCounts = text_file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b) scala> wordCounts.collect ... Array((call,1), (What's,1), (sweet.,1), (we,1), (as,1), (name?,1), (any,1), (other,1), (rose,1), (smell,1), (name,1), (a,2), (would,1), (in,1), (which,1), (That,1), (By,1))Enregistrez les valeurs de
<bucket-name>/wordcounts-outdans Cloud Storage, puis quittezscala-shell.scala> wordCounts.saveAsTextFile("gs://<bucket-name>/wordcounts-out/") scala> exitUtiliser la gcloud CLI pour lister les fichiers de sortie et afficher leur contenu
$ gcloud storage ls gs://bucket-name/wordcounts-out/ gs://spark-scala-demo-bucket/wordcounts-out/ gs://spark-scala-demo-bucket/wordcounts-out/_SUCCESS gs://spark-scala-demo-bucket/wordcounts-out/part-00000 gs://spark-scala-demo-bucket/wordcounts-out/part-00001
Vérifiez le contenu de
gs://<bucket-name>/wordcounts-out/part-00000.$ gcloud storage cat gs://bucket-name/wordcounts-out/part-00000 (call,1) (What's,1) (sweet.,1) (we,1) (as,1) (name?,1) (any,1) (other,1)
Exécuter l'exemple de code préinstallé
Le nœud maître du cluster contient des fichiers JAR exécutables avec des exemples standards d'Apache Hadoop et de Spark.
| Type de fichier JAR | Master node /usr/lib/ location |
Source GitHub | Documents Apache |
|---|---|---|---|
| Hadoop | hadoop-mapreduce/hadoop-mapreduce-examples.jar |
lien source | Tutoriel MapReduce |
| Spark | spark/lib/spark-examples.jar |
lien source | Exemples Spark |
Envoyer des exemples à votre cluster depuis la ligne de commande
Les exemples peuvent être envoyés depuis votre ordinateur de développement local à l'aide de l'outil de ligne de commande gcloud de Google Cloud CLI (consultez Utiliser la console Google Cloud pour envoyer des jobs depuis la console Google Cloud ).
Exemple d'application "WordCount" Hadoop
gcloud dataproc jobs submit hadoop --cluster=cluster-name \ --region=region \ --jars=file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \ --class=org.apache.hadoop.examples.WordCount \ -- URI of input file URI of output file
Exemple d'application "WordCount" Spark
gcloud dataproc jobs submit spark --cluster=cluster-name \ --region=region \ --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \ --class=org.apache.spark.examples.JavaWordCount \ -- URI of input file
Arrêter votre cluster
Pour éviter les frais récurrents, arrêtez votre cluster et supprimez les ressources Cloud Storage (bucket et fichiers Cloud Storage) utilisées pour ce tutoriel.
Pour arrêter un cluster :
gcloud dataproc clusters delete cluster-name \ --region=region
Pour supprimer le fichier JAR de Cloud Storage :
gcloud storage rm gs://bucket-name/HelloWorld.jar
Vous pouvez supprimer un bucket, ainsi que l'ensemble des dossiers et fichiers qu'il contient, à l'aide de la commande suivante :
gcloud storage rm gs://bucket-name/ --recursive