Ce tutoriel présente différentes manières de créer un job Spark Scala et de l'envoyer à un cluster Dataproc, y compris comment effectuer les opérations suivantes:
- écrire et compiler une application Spark Scala "Hello World" ; sur une machine locale à partir de la ligne de commande en utilisant le REPL Scala (boucle de lecture/évaluation/boucle d'impression ou interpréteur interactif) ; ou 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 Dataproc
- examiner les résultats du job Scala dans la console Google Cloud ;
Ce tutoriel vous explique également comment :
écrire et exécuter un exemple de script Spark Scala : "mapreduce" directement sur un Dataproc cluster à 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
Comme exercice simple pour ce tutoriel, écrivez un exemple l'application Scala à l'aide de la commande Scala REPL ou l'interface de ligne de commande SBT en local 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_HOME
et ajoutez-la à votre chemin d'accès, affiché dans Installation de Scala instructions. Par 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 Scala.object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } }
Enregistrez
HelloWorld.scala
et quittez la 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éer un "HelloWorld" projet, comme indiqué 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) par "HelloWorld.jar". (voir Modifier les artefacts par défaut)echo \ 'artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) => "HelloWorld.jar" }' > \ build.sbt
Lancer SBT et exécuter 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 quittez> package ... Packaging .../hello/target/scala-.../HelloWorld.jar ... ... Done packaging. [success] Total time: ... > exit
Créer un fichier JAR
Créer un fichier JAR
avec SBT
ou avec le fichier jar
.
Créer un pot avec SBT
Le package SBT crée un fichier JAR (voir Utiliser SBT).
Créer un fichier JAR manuellement
- Remplacez le répertoire (
cd
) par celui qui contient votre fichierHelloWorld*.class
compilé. , 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
- Utiliser la Google Cloud CLI pour copier le fichier JAR dans un bucket Cloud Storage bucket dans 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 un fichier JAR à un job Spark Dataproc
Utiliser la console Google Cloud pour envoyer le fichier JAR à votre job Spark Dataproc. Remplissez les champs de la page Envoyer une tâche comme suit:
- Cluster : sélectionnez le nom de votre cluster dans la liste.
- Job type (Type de tâche) : Spark.
Main class or jar (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 spécifie le point d'entrée de votre code ("Main-Class: HelloWorld"), "Classe principale ou fichier JAR" doit indiquer le nom de votre La classe principale ("HelloWorld") et vous devez remplir la "Fichiers JAR" avec le chemin d'accès à l'URI de votre fichier JAR (
gs://your-bucket-name/HelloWorld.jar
).
Cliquez sur Envoyer pour démarrer la tâche. Une fois le job démarré, il est ajouté liste.
Cliquez sur l'ID de la tâche pour ouvrir la page Jobs (Tâches) qui affiche les résultats 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 configurés avec l'API 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 de cluster Dataproc de votre projet, puis comment utiliser le shell-spark REPL pour créer et exécuter une application MapReduce Scala "wordcount".
Se connecter en SSH au nœud maître du cluster Dataproc
Accédez à l'onglet Clusters Dataproc de la console Google Cloud, puis cliquez sur le nom cluster.
Sur la page des détails du cluster, sélectionnez l'onglet Instances de VM, puis cliquez sur le bouton 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.
Lancer
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 bucket 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 décomptes de
<bucket-name>/wordcounts-out
dans Cloud Storage, puis quittezscala-shell
scala> wordCounts.saveAsTextFile("gs://<bucket-name>/wordcounts-out/") scala> exit
Utiliser la gcloud CLI pour répertorier 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érifier 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 un exemple de code pré-installé
Le nœud maître Dataproc contient des fichiers JAR exécutables avec Apache Hadoop et Spark standards. exemples.
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 la Google Cloud CLI gcloud
de l'outil de ligne de commande (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 et tous ses dossiers et fichiers à l'aide de la commande suivante:
gcloud storage rm gs://bucket-name/ --recursive
Étape suivante
Consultez Gérer les dépendances Java pour les applications Apache Spark sur Dataproc.
Consultez les conseils de réglage des tâches Spark.