Ce tutoriel illustre différentes manières de créer et d'envoyer une tâche Spark Scala sur un cluster Dataproc, y compris comment:
- écrire et compiler une Spark Scala & Hello World sur une machine locale à partir de la ligne de commande à l'aide du REPS Scala (lecture-évaluation-boucle 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 jargon Scala à une tâche Spark qui s'exécute sur votre cluster Dataproc ;
- Examiner les résultats de la tâche Scala à partir de Google Cloud Console
Ce tutoriel vous explique également comment :
écrire et exécuter une tâche Spark Scala "Jupyter" mapreduce directement sur un cluster Dataproc à l'aide du REPL
spark-shell
exécuter des exemples Apache Spark et Hadoop pré-installés sur un cluster.
Configurer un projet Google Cloud Platform
Si ce n'est pas déjà fait, effectuez les opérations suivantes :
Écrire et compiler le code Scala en local
Pour les besoins de ce tutoriel, effectuez un exercice simple en écrivant localement sur votre ordinateur de développement à l'aide de l'application Scala REPL ou de l'interface de ligne de commande SBT.
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_HOME
, puis 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
HelloWorld
dans le REPL Scalaobject HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } }
Enregistrez
HelloWorld.scala
et quittez le REPL.scala> :save HelloWorld.scala scala> :q
Compiler avec
scalac
$ scalac HelloWorld.scala
Lister les fichiers
.class
compilé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.scala
Créez un fichier de configuration
sbt.build
pour définirartifactName
(le nom du fichier JAR que vous allez générer) ci-dessous sur &HelloWorld.jar" (voir la section Modifier les artefacts par défaut).echo \ 'artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) => "HelloWorld.jar" }' > \ build.sbt
Lancez 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 ...
Empaqueter le code dans un fichier JAR avec un fichier manifeste spécifiant le point d'entrée de la classe principale (
HelloWorld
), puis quitter> 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 SBT package crée un fichier JAR (voir la section Utiliser SBT).
Créer un fichier JAR manuellement
- Modifiez le répertoire (
cd
) dans le répertoire contenant vos fichiersHelloWorld*.class
compilés, puis exécutez la commande suivante pour empaqueter les fichiers de classe dans un fichier JAR avec un fichier manifeste spécifiant 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
- Exécutez la commande
gsutil
pour copier le fichier JAR dans un bucket Cloud Storage de votre projet.
$ gsutil 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 des fichiers JAR à une tâche Spark Spark
Utilisez Google Cloud Console pour envoyer le fichier JAR à votre tâche Spark Spark. Renseignez les champs de la page Submit a job (Envoyer une tâche) comme suit:
- Cluster : sélectionnez le nom de votre cluster dans la liste.
- Job type (Type de tâche) : Spark.
Classe principale ou fichier JAR : spécifiez le chemin d'accès de l'URI Cloud Storage à votre fichier JAR HelloWorld (
gs://your-bucket-name/HelloWorld.jar
).Si votre fichier JAR n'inclut pas de fichier manifeste qui spécifie le point d'entrée de votre code (champ principal: HelloWorld), le champ "" Main class or jar" (la classe principale) doit indiquer le nom de votre classe principale ("HelloWorld"). Vous devez renseigner le champ "jar" (fichiers JAR) dans le fichier &Jar (fichier JAR).
Cliquez sur Submit (Envoyer) pour démarrer la tâche. Une fois la tâche démarrée, elle est ajoutée à la liste des tâches.
Cliquez sur l'ID de la tâche pour ouvrir la page Jobs (Tâches), où vous pouvez consulter le résultat du pilote de la tâche.
É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 Dataproc. Hadoop et Spark sont préinstallés sur les clusters Dataproc 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 vous connecter en SSH au nœud maître du cluster Dataproc de votre projet, puis utiliser le REPL spark-shell pour créer et exécuter une application Scala réduire le nombre de mots.
Se connecter en SSH au nœud maître du cluster Dataproc
Accédez à la page Dataproc Clusters de votre projet dans Google Cloud Console, puis cliquez sur le nom de votre cluster.
Sur la page des détails 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 du cluster.
Une fenêtre de navigateur s'ouvre dans votre répertoire d'accueil sur le nœud maître.
Lancer l'
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 fichier RDD (Ensemble de données distribué résilient) à partir d'un extrait de texte de Shakespeare situé dans un espace de stockage public Cloud Storage.
scala> val text_file = sc.textFile("gs://pub/shakespeare/rose.txt")
Exécuter une recherche"countcount"sur le texte, puis afficher 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 nombres dans
<bucket-name>/wordcounts-out
dans Cloud Storage, puis quittezscala-shell
scala> wordCounts.saveAsTextFile("gs://<bucket-name>/wordcounts-out/") scala> exit
Utilisez
gsutil
pour répertorier les fichiers de sortie et afficher leur contenu$ gsutil 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érifier le contenu
gs://<bucket-name>/wordcounts-out/part-00000
$ gsutil 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 un exemple de code pré-installé
Le nœud maître Dataproc contient des fichiers jar exécutables avec des exemples Apache Hadoop et Spark standards.
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 à partir de la ligne de commande
Vous pouvez envoyer des exemples depuis votre ordinateur de développement local à l'aide de l'outil de ligne de commande gcloud
de la CLI Google Cloud (consultez la section Utiliser Google Cloud Console pour envoyer des tâches depuis Google Cloud Console).
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 :
gsutil 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 :
gsutil rm -r gs://bucket-name/
Étapes suivantes
Consultez Gérer les dépendances Java pour les applications Apache Spark sur Dataproc.
Consultez les conseils de réglage de Spark.