Tutorial: Senibina aplikasi dan kluster aplikasi

Dapatkan buku penuh
Analisis Data dengan Spark Menggunakan Python (Siri Data & Analisis Addison-Wesley) MSRP $ 44.99 Lihatnya

Artikel ini adalah petikan dari buku Pearson Addison-Wesley "Analisis Data dengan Spark Menggunakan Python" karya Jeffrey Aven. Diterbitkan semula di sini dengan kebenaran dari Pearson © 2018. Untuk maklumat lebih lanjut, lawati informit.com/aven/infoworld.

Sebelum memulakan perjalanan anda sebagai pengaturcara Apache Spark, anda harus mempunyai pemahaman yang kukuh mengenai seni bina aplikasi Spark dan bagaimana aplikasi dijalankan pada cluster Spark. Artikel ini meneliti komponen aplikasi Spark dengan teliti, melihat bagaimana komponen ini berfungsi bersama, dan melihat bagaimana aplikasi Spark berjalan pada kelompok yang berdiri sendiri dan YARN.

Anatomi aplikasi Spark

Aplikasi Spark mengandungi beberapa komponen, semuanya ada sama ada anda menjalankan Spark pada satu mesin atau merentasi sekumpulan beratus-ratus atau ribuan nod.

Setiap komponen mempunyai peranan khusus dalam melaksanakan program Spark. Sebilangan peranan ini, seperti komponen pelanggan, bersifat pasif semasa pelaksanaan; peranan lain aktif dalam pelaksanaan program, termasuk komponen yang menjalankan fungsi pengiraan.

Komponen aplikasi Spark adalah:

  • pemandu itu
  • induk
  • pengurus kluster
  • para pelaksana

Mereka semua menggunakan nod pekerja, alias pekerja.

Rajah 1 menunjukkan semua komponen Spark dalam konteks aplikasi Spark yang berdiri sendiri.

Pearson Addison-Wesley

Semua komponen Spark — termasuk proses pemacu, master, dan pelaksana — dijalankan dalam mesin maya Java. JVM adalah mesin runtime lintas platform yang dapat melaksanakan arahan yang disusun ke dalam kod bytec Java. Scala, yang ditulis oleh Spark, disusun menjadi bytecode dan berjalan pada JVM.

Penting untuk membezakan antara komponen aplikasi runtime Spark dan lokasi dan jenis nod di mana ia dijalankan. Komponen ini berjalan di tempat yang berbeza menggunakan mod penyebaran yang berbeza, jadi jangan memikirkan komponen ini dalam simpul fizikal atau istilah contoh. Sebagai contoh, semasa menjalankan Spark di YARN, akan terdapat beberapa variasi pada Gambar 1. Namun, semua komponen yang digambarkan masih terlibat dalam aplikasi dan mempunyai peranan yang sama.

Pemacu kilat

Kehidupan aplikasi Spark bermula dan berakhir dengan pemacu Spark. Pemacu adalah proses yang digunakan oleh klien untuk menghantar permohonan di Spark. Pemandu juga bertanggungjawab untuk merancang dan menyelaraskan pelaksanaan program Spark dan mengembalikan status dan / atau hasil (data) kepada pelanggan. Pemandu secara fizikal boleh tinggal pada klien atau pada simpul dalam kluster, seperti yang akan anda lihat kemudian.

SparkSesi

Pemacu Spark bertanggungjawab untuk membuat SparkSession. Objek SparkSession mewakili sambungan ke kluster Spark. SparkSession dibuat pada awal aplikasi Spark, termasuk cangkang interaktif, dan digunakan untuk keseluruhan program.

Sebelum Spark 2.0, titik masuk untuk aplikasi Spark termasuk SparkContext, yang digunakan untuk aplikasi teras Spark; SQLContext dan HiveContext, digunakan dengan aplikasi Spark SQL; dan StreamingContext, digunakan untuk aplikasi Spark Streaming. Objek SparkSession yang diperkenalkan di Spark 2.0 menggabungkan semua objek ini menjadi satu titik masuk yang dapat digunakan untuk semua aplikasi Spark.

Melalui objek anak SparkContext dan SparkConf, objek SparkSession mengandungi semua sifat konfigurasi runtime yang ditetapkan oleh pengguna, termasuk sifat konfigurasi seperti master, nama aplikasi, dan jumlah pelaksana. Gambar 2 menunjukkan objek SparkSession dan beberapa sifat konfigurasinya dalam pysparkshell.

Pearson Addison-Wesley

Nama SparkSession

Nama objek untuk contoh SparkSession sewenang-wenangnya. Secara lalai, instansiasi SparkSession di cangkang interaktif Spark dinamakan spark. Untuk konsistensi, anda selalu menjadikan SparkSession sebagai spark; namun, nama itu bergantung kepada budi bicara pemaju.

Kod di bawah menunjukkan cara membuat SparkSession dalam aplikasi Spark yang tidak interaktif, seperti program yang diserahkan menggunakan spark-submit.

dari pyspark.sql import SparkSession

percikan = SparkSession.builder \

  .master ("percikan: // sparkmaster: 7077") \

  .appName ("Aplikasi Spark Saya") \

  .config ("spark.submit.deployMode", "client") \

  .getOrCreate ()

numlines = spark.sparkContext.textFile ("fail: /// opt / percikan / lesen") \

  .kira ()

cetak ("Jumlah baris adalah" + str (garis nombor))

Perancangan aplikasi

Salah satu fungsi utama pemandu adalah merancang aplikasi. Pemandu mengambil input pemprosesan aplikasi dan merancang pelaksanaan program. Pemandu mengambil semua transformasi yang diminta (operasi manipulasi data) dan tindakan (permintaan untuk output atau arahan untuk melaksanakan program) dan membuat graf aciklik (DAG) nod yang diarahkan, masing-masing mewakili langkah transformasi atau komputasi.

Graf asiklik yang diarahkan (DAG)

DAG adalah konstruk matematik yang biasanya digunakan dalam sains komputer untuk mewakili aliran data dan kebergantungannya. DAG mengandungi bucu (atau nod) dan tepi. Titik dalam konteks aliran data adalah langkah dalam aliran proses. Tepi dalam DAG menghubungkan bucu antara satu sama lain dalam arah yang diarahkan dan sedemikian rupa sehingga mustahil untuk mempunyai rujukan bulat.

Aplikasi Spark DAG terdiri daripada tugas dan peringkat . Tugas adalah unit terkecil yang dapat dijadualkan dalam program Spark. Tahap adalah sekumpulan tugas yang dapat dijalankan bersama. Tahap bergantung antara satu sama lain; dengan kata lain, terdapat pergantungan pentas .

Dalam arti penjadualan proses, DAG tidak unik untuk Spark. Sebagai contoh, ia digunakan dalam projek ekosistem data besar lain, seperti Tez, Drill, dan Presto untuk penjadualan. DAG adalah asas bagi Spark, jadi perlu mengetahui konsepnya.

Aplikasi orkestrasi

Pemandu juga menyelaraskan tahap dan tugas yang ditentukan dalam DAG. Kegiatan pemacu utama yang terlibat dalam penjadualan dan pelaksanaan tugas merangkumi yang berikut:

  • Menjejaki sumber yang ada untuk melaksanakan tugas.
  • Menjadualkan tugas untuk menjalankan "dekat" dengan data di mana mungkin (konsep lokaliti data).

Fungsi lain

Selain merancang dan mengatur pelaksanaan program Spark, pemandu juga bertanggungjawab untuk mengembalikan hasil dari aplikasi. Ini dapat berupa kod atau data pengembalian dalam kasus tindakan yang meminta data dikembalikan kepada klien (misalnya, pertanyaan interaktif).

Pemacu juga melayani UI aplikasi pada port 4040, seperti yang ditunjukkan dalam Rajah 3. UI ini dibuat secara automatik; ia bebas dari kod yang diserahkan atau bagaimana ia dikemukakan (iaitu penggunaan interaktif pyspark atau penggunaan tidak interaktif spark-submit)

Pearson Addison-Wesley

Sekiranya aplikasi seterusnya dilancarkan pada host yang sama, port berturut-turut digunakan untuk UI aplikasi (contohnya, 4041, 4042, dan sebagainya).

Pekerja dan pelaksana percikan api

Pelaksana Spark adalah proses di mana tugas Spark DAG dijalankan. pelaksana menempah sumber CPU dan memori pada node hamba, atau pekerja, dalam kelompok Spark. Seorang pelaksana didedikasikan untuk aplikasi Spark tertentu dan diberhentikan ketika aplikasi selesai. Program Spark biasanya terdiri daripada banyak pelaksana, sering bekerja secara selari.

Biasanya, simpul pekerja - yang menjadi tuan rumah proses pelaksana - mempunyai bilangan pelaksana yang terbatas atau tetap yang diperuntukkan pada bila-bila masa. Oleh itu, sekelompok - menjadi sebilangan nod yang diketahui - mempunyai bilangan pelaksana yang terbatas untuk dijalankan pada waktu tertentu. Sekiranya aplikasi memerlukan pelaksana yang melebihi kapasitas fizikal kluster, mereka dijadualkan untuk memulai ketika pelaksana lain menyelesaikan dan melepaskan sumber daya mereka.

Seperti disebutkan sebelumnya, JVM menjadi tuan rumah pelaksana Spark. JVM untuk pelaksana diperuntukkan timbunan , yang merupakan ruang memori khusus untuk menyimpan dan mengurus objek.

Jumlah memori komited untuk timbunan JVM untuk wasi ditetapkan oleh hartanah spark.executor.memoryatau sebagai --executor-memoryhujah untuk itu pyspark, spark-shellatau spark-submitarahan.

Pelaksana menyimpan data output dari tugas dalam memori atau cakera. Penting untuk diperhatikan bahawa pekerja dan pelaksana hanya mengetahui tugas yang diperuntukkan kepada mereka, sedangkan pemandu bertanggungjawab untuk memahami set tugas yang lengkap dan kebergantungan masing-masing yang merangkumi aplikasi.

Dengan menggunakan UI aplikasi Spark pada port 404 x host pemandu, anda dapat memeriksa pelaksana aplikasi tersebut, seperti yang ditunjukkan pada Gambar 4.

Pearson Addison-Wesley

Untuk penyebaran kluster mandiri Spark, simpul pekerja memperlihatkan antara muka pengguna pada port 8081, seperti yang ditunjukkan pada Gambar 5.

Pearson Addison-Wesley

Master Spark dan pengurus kluster

Pemacu Spark merancang dan menyelaraskan set tugas yang diperlukan untuk menjalankan aplikasi Spark. Tugas itu sendiri dijalankan dalam pelaksana, yang dihoskan pada simpul pekerja.

Tuan dan pengurus kluster adalah proses pusat yang memantau, menyimpan, dan memperuntukkan sumber kluster yang diedarkan (atau kontena, dalam hal YARN atau Mesos) di mana pelaksana dijalankan. Master dan cluster manager boleh menjadi proses yang berasingan, atau mereka dapat digabungkan menjadi satu proses, seperti yang terjadi ketika menjalankan Spark dalam mod mandiri.

Tuan percikan

Master Spark adalah proses yang meminta sumber dalam kluster dan menjadikannya tersedia untuk pemacu Spark. Dalam semua mod penyebaran, induk merundingkan sumber atau bekas dengan node pekerja atau node hamba dan mengesan statusnya dan memantau kemajuannya.

Semasa menjalankan Spark dalam mod Berdiri, proses master Spark menyajikan UI web pada port 8080 pada host induk, seperti yang ditunjukkan pada Gambar 6.

Pearson Addison-Wesley

Master Spark berbanding pemandu Spark

Penting untuk membezakan fungsi runtime pemacu dan master. Nama tuan boleh disimpulkan sebagai bermaksud bahawa proses ini yang mengawal pelaksanaan aplikasi tetapi ini tidak berlaku. Master hanya meminta sumber dan menjadikan sumber tersebut tersedia untuk pemandu. Walaupun tuan memantau status dan kesihatan sumber-sumber ini, ia tidak terlibat dalam pelaksanaan aplikasi dan penyelarasan tugas dan tahapnya. Itulah tugas pemandu.

Pengurus kluster

Pengurus kluster adalah proses yang bertanggungjawab untuk memantau node pekerja dan menyimpan sumber pada node ini atas permintaan tuan. Master kemudian menyediakan sumber kluster ini kepada pemandu dalam bentuk pelaksana.

Seperti yang dinyatakan sebelumnya, pengurus kluster boleh terpisah dari proses induk. Ini berlaku semasa menjalankan Spark di Mesos atau YARN. Dalam kes Spark berjalan dalam mod mandiri, proses induk juga menjalankan fungsi pengurus kluster. Secara berkesan, ia berfungsi sebagai pengurus klusternya sendiri.

Contoh baik fungsi pengurus kluster adalah proses YARN ResourceManager untuk aplikasi Spark yang berjalan di kluster Hadoop. ResourceManager menjadualkan, memperuntukkan, dan memantau kesihatan kontena yang berjalan di YARN NodeManagers. Aplikasi Spark kemudian menggunakan wadah ini untuk menjadi tuan rumah proses pelaksana, dan juga proses induk jika aplikasi berjalan dalam clustermode.

Aplikasi percikan menggunakan penjadual mandiri

Dalam Bab 2, "Menerapkan Spark," saya menjelaskan penjadual yang berdiri sendiri sebagai pilihan penyebaran untuk Spark. Di sana, saya menggunakan kluster Spark multinode yang berfungsi sepenuhnya dalam salah satu latihan dalam Bab 2. Seperti yang dinyatakan sebelumnya, dalam kluster Spark yang berjalan dalam mod mandiri, proses induk Spark juga melakukan fungsi pengurus kluster, mengatur sumber daya yang ada di kluster dan memberi mereka proses master untuk digunakan dalam aplikasi Spark.

Aplikasi percikan berjalan di YARN

Hadoop adalah platform penyebaran yang sangat popular dan biasa untuk Spark. Beberapa pakar industri percaya bahawa Spark akan segera menggantikan MapReduce sebagai platform pemprosesan utama aplikasi di Hadoop. Aplikasi Spark di YARN mempunyai seni bina jangka masa yang sama tetapi mempunyai sedikit perbezaan dalam pelaksanaan.

ResourceManager sebagai pengurus kluster

Berbeza dengan penjadual Standalone, pengurus kluster dalam kluster YARN adalah YARN ResourceManager. ResourceManager memantau penggunaan sumber dan ketersediaan di semua nod dalam kluster. Pelanggan menghantar permohonan Spark ke YARN ResourceManager. ResourceManager memperuntukkan bekas pertama untuk aplikasi, wadah khas yang disebut ApplicationMaster.

ApplicationMaster sebagai master Spark

ApplicationMaster adalah proses master Spark. Seperti proses master dalam penyebaran kluster lain, ApplicationMaster merundingkan sumber antara pemacu aplikasi dan pengurus kluster (atau ResourceManager dalam kes ini); kemudian menjadikan sumber-sumber ini (wadah) tersedia untuk pemandu untuk digunakan sebagai pelaksana untuk menjalankan tugas dan menyimpan data untuk aplikasi.

ApplicationMaster kekal untuk sepanjang hayat aplikasi.

Mod penyebaran untuk aplikasi Spark yang berjalan di YARN

Dua mod penyebaran dapat digunakan ketika mengirimkan aplikasi Spark ke kluster YARN: mod klien dan mod kluster. Mari lihat mereka sekarang.

Mod pelanggan

Dalam mod pelanggan, proses pemacu berjalan pada klien yang mengemukakan permohonan. Pada dasarnya ia tidak dikendalikan; sekiranya hos pemandu gagal, aplikasi gagal. Mod pelanggan disokong untuk kedua-dua sesi shell interaktif ( pyspark, spark-shell, dan sebagainya) dan penyerahan permohonan bukan interaktif ( spark-submit). Kod di bawah menunjukkan cara memulakan pysparksesi menggunakan mod penyebaran klien.

$ SPARK_HOME / tong sampah / taman \

- pelanggan benang pelanggan \

- pelaksana bilangan 1 \

- pemacu memori 512m \

- memori pelaksana 512m \

- pelaksana-inti 1

# ATAU

$ SPARK_HOME / tong sampah / taman \

- benang tuan \

- pelanggan mod penerapan \

- pelaksana bilangan 1 \

- pemacu memori 512m \

- memori pelaksana 512m \

- pelaksana-inti 1

Gambar 7 memberikan gambaran keseluruhan aplikasi Spark yang berjalan di YARN dalam mod pelanggan.

Pearson Addison-Wesley

Langkah-langkah yang ditunjukkan dalam Rajah 7 adalah:

  1. Pelanggan mengemukakan aplikasi Spark kepada pengurus kluster (YARN ResourceManager). Proses pemacu, SparkSession, dan SparkContext dibuat dan dijalankan pada klien.
  2. ResourceManager memberikan ApplicationMaster (Spark master) untuk aplikasi tersebut.
  3. ApplicationMaster meminta kontena digunakan untuk pelaksana dari ResourceManager. Dengan bekas yang ditugaskan, pelaksana melahirkan.
  4. Pemandu, yang terletak di klien, kemudian berkomunikasi dengan pelaksana untuk menyelesaikan proses dan peringkat program Spark. Pemandu mengembalikan kemajuan, hasil, dan status kepada pelanggan.

Mod penyebaran pelanggan adalah mod paling mudah digunakan. Namun, ia tidak memiliki ketahanan yang diperlukan untuk kebanyakan aplikasi produksi.

Mod kluster

Berbeza dengan mod penyebaran klien, dengan aplikasi Spark berjalan dalam mod YARN Cluster, pemacu itu sendiri berjalan di kluster sebagai subproses dari ApplicationMaster. Ini memberikan ketahanan: Jika proses ApplicationMaster yang menghoskan pemacu gagal, ia dapat dibuat semula pada simpul lain dalam kluster.

Kod di bawah menunjukkan cara menghantar permohonan dengan menggunakan spark-submitdan mod penyebaran kelompok YARN. Kerana pemacu adalah proses tidak segerak yang berjalan di kluster, mod kluster tidak disokong untuk aplikasi shell interaktif ( pysparkdan spark-shell).

$ SPARK_HOME / tong / percikan api \

- kumpulan benang master \

- pelaksana bilangan 1 \

- pemacu memori 512m \

- memori pelaksana 512m \

- pelaksana-inti 1

$ SPARK_HOME / contoh / src / main / python / pi.py 10000

# ATAU

- benang tuan \

- kluster mod penerapan \

- pelaksana bilangan 1 \

- pemacu memori 512m \

- memori pelaksana 512m \

- pelaksana-inti 1

$ SPARK_HOME / contoh / src / main / python / pi.py 10000

Gambar 8 memberikan gambaran keseluruhan aplikasi Spark yang berjalan di YARN dalam mod kluster.

Pearson Addison-Wesley

Langkah-langkah yang ditunjukkan dalam Rajah 8 adalah:

  1. Pelanggan, proses pengguna yang meminta spark-submit, menyerahkan aplikasi Spark kepada pengurus kluster (YARN ResourceManager).
  2. ResourceManager memberikan ApplicationMaster (Spark master) untuk aplikasi tersebut. Proses pemacu dibuat pada nod kluster yang sama.
  3. ApplicationMaster meminta kontena untuk pelaksana dari ResourceManager. pelaksana dilahirkan dalam bekas yang diperuntukkan kepada ApplicationMaster oleh ResourceManager. Pemandu kemudian berkomunikasi dengan pelaksana untuk menyelesaikan proses dan peringkat program Spark.
  4. Pemacu, berjalan pada node dalam kluster, mengembalikan kemajuan, hasil, dan status kepada klien.

UI web aplikasi Spark, seperti yang ditunjukkan sebelumnya, boleh didapati dari host ApplicationMaster di kluster; pautan ke antara muka pengguna ini boleh didapati dari UI ResourceManager YARN.

Mod tempatan dikaji semula

Dalam mod tempatan, pemandu, master, dan pelaksana semuanya berjalan dalam satu JVM. Seperti yang dinyatakan sebelumnya dalam bab ini, ini berguna untuk pengembangan, pengujian unit, dan debugging, tetapi penggunaannya terbatas untuk menjalankan aplikasi produksi kerana tidak diedarkan dan tidak skala. Selanjutnya, tugas yang gagal dalam aplikasi Spark yang berjalan dalam mod tempatan tidak dilaksanakan semula secara lalai. Anda boleh mengatasi tingkah laku ini.

Semasa menjalankan Spark dalam mod tempatan, UI aplikasi tersedia di // localhost: 4040. UI induk dan pekerja tidak tersedia semasa berjalan dalam mod tempatan.