Menulis dan menjalankan tugas Spark Scala di Managed Service for Apache Spark

Tutorial ini mengilustrasikan berbagai cara untuk membuat dan mengirimkan tugas Spark Scala ke cluster Managed Service untuk Apache Spark, termasuk cara:

  • menulis dan mengompilasi aplikasi "Halo Dunia" Spark Scala di mesin lokal dari command line menggunakan Scala REPL (Read-Evaluate-Print-Loop atau penafsir interaktif) atau alat build SBT
  • mengemas class Scala yang telah dikompilasi ke dalam file jar dengan manifes
  • mengirim jar Scala ke tugas Spark yang berjalan di cluster Managed Service untuk Apache Spark Anda
  • memeriksa output tugas Scala dari konsol Google Cloud

Tutorial ini juga menunjukkan cara:

  • menulis dan menjalankan tugas mapreduce "WordCount" Spark Scala langsung di cluster Managed Service for Apache Spark menggunakan REPL spark-shell

  • menjalankan contoh Apache Spark dan Hadoop yang telah diinstal sebelumnya di cluster

Menyiapkan project Google Cloud

Jika Anda belum melakukannya:

  1. Menyiapkan project
  2. Membuat bucket Cloud Storage
  3. Membuat cluster Managed Service untuk Apache Spark

Menulis dan mengompilasi kode Scala secara lokal

Sebagai latihan dasar untuk tutorial ini, tulis aplikasi Scala "Halo Dunia" menggunakan Scala REPL atau antarmuka command line SBT secara lokal di mesin pengembangan Anda.

Menggunakan Scala

  1. Download biner Scala dari halaman Scala Install
  2. Ekstrak file, tetapkan variabel lingkungan SCALA_HOME, dan tambahkan ke jalur Anda, seperti yang ditunjukkan dalam petunjuk Penginstalan Scala. Contoh:

    export SCALA_HOME=/usr/local/share/scala
    export PATH=$PATH:$SCALA_HOME/
    

  3. Meluncurkan REPL Scala

    $ scala
    Welcome to Scala version ...
    Type in expressions to have them evaluated.
    Type :help for more information.
    scala>
    

  4. Menyalin dan menempelkan kode HelloWorld ke Scala REPL

    object HelloWorld {
      def main(args: Array[String]): Unit = {
        println("Hello, world!")
      }
    }

  5. Simpan HelloWorld.scala dan keluar dari REPL

    scala> :save HelloWorld.scala
    scala> :q
    

  6. Kompilasi dengan scalac

    $ scalac HelloWorld.scala
    

  7. Mencantumkan file .class yang dikompilasi

    $ ls HelloWorld*.class
    HelloWorld$.class   HelloWorld.class
    

Menggunakan SBT

  1. Download SBT

  2. Buat project "HelloWorld", seperti yang ditunjukkan di bawah

    $ mkdir hello
    $ cd hello
    $ echo \
    'object HelloWorld {def main(args: Array[String]) = println("Hello, world!")}' > \
    HelloWorld.scala
    

  3. Buat file konfigurasi sbt.build untuk menetapkan artifactName (nama file jar yang akan Anda buat, di bawah) ke "HelloWorld.jar" (lihat Mengubah artefak default)

    echo \
    'artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) =>
    "HelloWorld.jar" }' > \
    build.sbt
    

  4. Meluncurkan SBT dan menjalankan kode

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

  5. Paketkan kode ke dalam file jar dengan manifes yang menentukan titik entri class utama (HelloWorld), lalu keluar

    > package
    ... Packaging .../hello/target/scala-.../HelloWorld.jar ...
    ... Done packaging.
    [success] Total time: ...
    > exit
    

Membuat stoples

Buat file jar dengan SBT atau menggunakan perintah jar.

Membuat stoples

dengan SBT

Perintah package SBT membuat file jar (lihat Menggunakan SBT).

Membuat stoples

secara manual

  1. Ubah direktori (cd) menjadi direktori yang berisi file HelloWorld*.class yang telah dikompilasi, lalu jalankan perintah berikut untuk memaketkan file class ke dalam jar dengan manifes yang menentukan titik entri class utama (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%)
    

Menyalin jar ke Cloud Storage

  1. Gunakan Google Cloud CLI untuk menyalin jar ke bucket Cloud Storage di project Anda
$ 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

Mengirim jar ke tugas Managed Service untuk Apache Spark

  1. Gunakan konsolGoogle Cloud untuk mengirimkan file jar ke tugas Managed Service untuk Apache Spark Anda. Isi kolom di halaman Submit a job sebagai berikut:

    • Pilih jenis komputasi untuk tugas: Spark on Compute Engine
    • Detail tugas cluster:
      • Cluster: Pilih nama cluster Anda dari daftar cluster
    • File dan artefak:

      • Job type: Spark (Scala / Java)
      • Driver configuration: Pilih Main jar URI, dan di kolom Main jar, tentukan jalur Cloud Storage URI ke jar HelloWorld Anda (gs://your-bucket-name/HelloWorld.jar).

        Jika jar Anda tidak menyertakan manifes yang menentukan titik entri ke kode Anda ("Main-Class: HelloWorld"), pilih Main class di bagian Driver configuration, masukkan nama class utama Anda ("HelloWorld") di kolom Main class, dan isi kolom Jar files dengan jalur URI ke file jar Anda (gs://your-bucket-name/HelloWorld.jar).

  2. Klik Submit untuk memulai tugas. Setelah dimulai, tugas akan ditambahkan ke daftar Tugas.

  3. Klik ID pekerjaan untuk membuka halaman Jobs, tempat Anda dapat melihat output driver pekerjaan.

Menulis dan menjalankan kode Spark Scala menggunakan REPL spark-shell cluster

Anda mungkin ingin mengembangkan aplikasi Scala langsung di cluster Managed Service untuk Apache Spark. Hadoop dan Spark telah diinstal sebelumnya di cluster Managed Service untuk Apache Spark, dan dikonfigurasi dengan konektor Cloud Storage, yang memungkinkan kode Anda membaca dan menulis data langsung dari dan ke Cloud Storage.

Contoh ini menunjukkan cara menggunakan SSH untuk terhubung ke node master cluster Managed Service untuk Apache Spark, lalu menggunakan REPL spark-shell untuk membuat dan menjalankan aplikasi mapreduce wordcount Scala.

  1. Menggunakan SSH untuk terhubung ke node master cluster

    1. Buka halaman Clusters di konsol Google Cloud , lalu klik nama cluster Anda.

    2. Di halaman detail cluster, pilih tab VM Instances, lalu klik pilihan SSH yang muncul di sebelah kanan baris nama cluster Anda.

      Jendela browser akan terbuka di direktori utama Anda pada node master

  2. Luncurkan 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>
    

  3. Buat RDD (Resilient Distributed Dataset) dari cuplikan teks Shakespeare yang berada di Cloud Storage publik

    scala> val text_file = sc.textFile("gs://pub/shakespeare/rose.txt")
    

  4. Jalankan mapreduce wordcount pada teks, lalu tampilkan hasil 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))
    

  5. Simpan jumlahnya di <bucket-name>/wordcounts-out di Cloud Storage, lalu keluar dari scala-shell

    scala> wordCounts.saveAsTextFile("gs://<bucket-name>/wordcounts-out/")
    scala> exit
    

  6. Menggunakan gcloud CLI untuk mencantumkan file output dan menampilkan konten file

    $ 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
    

  7. Memeriksa konten 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)
    

Menjalankan kode Contoh yang Telah Diinstal Sebelumnya

Node master cluster berisi file jar yang dapat dijalankan dengan contoh Apache Hadoop dan Spark standar.

Jenis Stoples Master node /usr/lib/ location Sumber GitHub Dokumen Apache
Hadoop hadoop-mapreduce/hadoop-mapreduce-examples.jar link sumber Tutorial MapReduce
Spark spark/lib/spark-examples.jar link sumber Contoh Spark

Mengirimkan contoh ke cluster Anda dari command line

Contoh dapat dikirimkan dari mesin pengembangan lokal Anda menggunakan alat command line gcloud Google Cloud CLI (lihat Menggunakan konsol Google Cloud untuk mengirimkan tugas dari konsol Google Cloud ).

Contoh 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

Contoh 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

Mematikan cluster Anda

Agar tidak dikenai biaya berkelanjutan, nonaktifkan cluster Anda dan hapus resource Cloud Storage (bucket dan file Cloud Storage) yang digunakan untuk tutorial ini.

Untuk menonaktifkan cluster:

gcloud dataproc clusters delete cluster-name \
    --region=region

Untuk menghapus file jar Cloud Storage:

gcloud storage rm gs://bucket-name/HelloWorld.jar

Anda dapat menghapus bucket beserta semua folder dan filenya dengan perintah berikut:

gcloud storage rm gs://bucket-name/ --recursive

Langkah berikutnya