Apache Spark adalah sistem komputasi terdistribusi. Ini terdiri dari master dan satu atau lebih budak, di mana master mendistribusikan pekerjaan di antara para budak, sehingga memberikan kemampuan untuk menggunakan banyak komputer kami untuk mengerjakan satu tugas. Orang bisa menebak bahwa ini memang alat yang ampuh di mana tugas-tugas membutuhkan perhitungan besar untuk diselesaikan, tetapi dapat dipecah menjadi potongan-potongan kecil dari langkah-langkah yang dapat didorong ke budak untuk dikerjakan. Setelah cluster kami aktif dan berjalan, kami dapat menulis program untuk dijalankan di dalamnya dengan Python, Java, dan Scala.
Dalam tutorial ini kita akan bekerja pada satu mesin yang menjalankan Red Hat Enterprise Linux 8, dan akan menginstal master dan slave Spark ke mesin yang sama, tetapi perlu diingat bahwa langkah-langkah yang menjelaskan pengaturan slave dapat diterapkan ke sejumlah komputer, sehingga menciptakan cluster nyata yang dapat memproses beban kerja yang berat. Kami juga akan menambahkan file unit yang diperlukan untuk pengelolaan, dan menjalankan contoh sederhana terhadap cluster yang dikirimkan dengan paket terdistribusi untuk memastikan sistem kami beroperasi.
Dalam tutorial ini Anda akan mempelajari:
- Cara menginstal master dan slave Spark
- Cara menambahkan file unit systemd
- Cara memverifikasi koneksi master-slave yang berhasil
- Cara menjalankan tugas contoh sederhana di cluster
Spark shell dengan pyspark.
Persyaratan dan Konvensi Perangkat Lunak yang Digunakan
Kategori | Persyaratan, Konvensi, atau Versi Perangkat Lunak yang Digunakan |
---|---|
Sistem | Red Hat Enterprise Linux 8 |
Perangkat Lunak | Apache Spark 2.4.0 |
Lainnya | Akses istimewa ke sistem Linux Anda sebagai root atau melalui sudo perintah. |
Konvensi | # – membutuhkan perintah linux yang diberikan untuk dieksekusi dengan hak akses root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah$ – membutuhkan perintah linux yang diberikan untuk dieksekusi sebagai pengguna biasa yang tidak memiliki hak istimewa |
Cara memasang percikan di Redhat 8 petunjuk langkah demi langkah
Apache Spark berjalan pada JVM (Java Virtual Machine), jadi instalasi Java 8 yang berfungsi diperlukan agar aplikasi dapat berjalan. Selain itu, ada beberapa shell yang dikirimkan dalam paket, salah satunya adalah pyspark
, shell berbasis python. Untuk mengatasinya, Anda juga perlu menginstal dan menyiapkan python 2.
- Untuk mendapatkan URL paket terbaru Spark, kita perlu mengunjungi situs unduhan Spark. Kita perlu memilih cermin yang paling dekat dengan lokasi kita, dan menyalin URL yang disediakan oleh situs unduhan. Ini juga berarti bahwa URL Anda mungkin berbeda dari contoh di bawah ini. Kami akan menginstal paket di bawah
/opt/
, jadi kita masuk ke direktori sebagairoot
:# cd /opt
Dan masukkan URL yang diperoleh ke
wget
untuk mendapatkan paketnya:# wget https://www-eu.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
- Kami akan membongkar tarball:
# tar -xvf spark-2.4.0-bin-hadoop2.7.tgz
- Dan buat symlink untuk membuat jalur kita lebih mudah diingat di langkah selanjutnya:
# ln -s /opt/spark-2.4.0-bin-hadoop2.7 /opt/spark
- Kami membuat pengguna yang tidak memiliki hak istimewa yang akan menjalankan aplikasi, master dan slave:
# useradd spark
Dan atur sebagai pemilik seluruh
/opt/spark
direktori, secara rekursif:# chown -R spark:spark /opt/spark*
- Kami membuat
systemd
file unit/etc/systemd/system/spark-master.service
untuk layanan master dengan konten berikut:[Unit] Description=Apache Spark Master After=network.target [Service] Type=forking User=spark Group=spark ExecStart=/opt/spark/sbin/start-master.sh ExecStop=/opt/spark/sbin/stop-master.sh [Install] WantedBy=multi-user.target
Dan juga satu untuk layanan budak yang akan menjadi
/etc/systemd/system/spark-slave.service.service
dengan isi di bawah ini:[Unit] Description=Apache Spark Slave After=network.target [Service] Type=forking User=spark Group=spark ExecStart=/opt/spark/sbin/start-slave.sh spark://rhel8lab.linuxconfig.org:7077 ExecStop=/opt/spark/sbin/stop-slave.sh [Install] WantedBy=multi-user.target
Perhatikan URL percikan yang disorot. Ini dibuat dengan
spark://<hostname-or-ip-address-of-the-master>:7077
, dalam hal ini mesin lab yang akan menjalankan master memiliki hostnamerhel8lab.linuxconfig.org
. Nama tuanmu akan berbeda. Setiap slave harus dapat menyelesaikan hostname ini, dan mencapai master pada port yang ditentukan, yaitu port7077
secara default. - Dengan file layanan di tempat, kita perlu menanyakan
systemd
untuk membacanya kembali:# systemctl daemon-reload
- Kita dapat memulai master Spark kita dengan
systemd
:# systemctl start spark-master.service
- Untuk memverifikasi master kita berjalan dan berfungsi, kita dapat menggunakan status systemd:
# systemctl status spark-master.service spark-master.service - Apache Spark Master Loaded: loaded (/etc/systemd/system/spark-master.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2019-01-11 16:30:03 CET; 53min ago Process: 3308 ExecStop=/opt/spark/sbin/stop-master.sh (code=exited, status=0/SUCCESS) Process: 3339 ExecStart=/opt/spark/sbin/start-master.sh (code=exited, status=0/SUCCESS) Main PID: 3359 (java) Tasks: 27 (limit: 12544) Memory: 219.3M CGroup: /system.slice/spark-master.service 3359 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181.b13-9.el8.x86_64/jre/bin/java -cp /opt/spark/conf/:/opt/spark/jars/* -Xmx1g org.apache.spark.deploy.master.Master --host [...] Jan 11 16:30:00 rhel8lab.linuxconfig.org systemd[1]: Starting Apache Spark Master... Jan 11 16:30:00 rhel8lab.linuxconfig.org start-master.sh[3339]: starting org.apache.spark.deploy.master.Master, logging to /opt/spark/logs/spark-spark-org.apache.spark.deploy.master.Master-1[...]
Baris terakhir juga menunjukkan file log utama master, yang ada di
logs
direktori di bawah direktori dasar Spark,/opt/spark
dalam kasus kami. Dengan melihat ke file ini, kita akan melihat garis di akhir yang mirip dengan contoh di bawah ini:2019-01-11 14:45:28 INFO Master:54 - I have been elected leader! New state: ALIVE
Kita juga harus menemukan baris yang memberi tahu kita di mana antarmuka Master mendengarkan:
2019-01-11 16:30:03 INFO Utils:54 - Successfully started service 'MasterUI' on port 8080
Jika kita mengarahkan browser ke port mesin host
Laman status master Spark tanpa pekerja yang dilampirkan.8080
, kita akan melihat halaman status master, tanpa ada pekerja yang terpasang saat ini.Perhatikan baris URL di halaman status master Spark. Ini adalah URL yang sama yang perlu kita gunakan untuk setiap file unit budak yang kita buat di
step 5
.
Jika kami menerima pesan kesalahan "koneksi ditolak" di browser, kami mungkin perlu membuka port di firewall:# firewall-cmd --zone=public --add-port=8080/tcp --permanent success # firewall-cmd --reload success
- Tuan kita sedang berjalan, kita akan memasang budak padanya. Kami memulai layanan budak:
# systemctl start spark-slave.service
- Kami dapat memverifikasi bahwa slave kami berjalan dengan systemd:
# systemctl status spark-slave.service spark-slave.service - Apache Spark Slave Loaded: loaded (/etc/systemd/system/spark-slave.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2019-01-11 16:31:41 CET; 1h 3min ago Process: 3515 ExecStop=/opt/spark/sbin/stop-slave.sh (code=exited, status=0/SUCCESS) Process: 3537 ExecStart=/opt/spark/sbin/start-slave.sh spark://rhel8lab.linuxconfig.org:7077 (code=exited, status=0/SUCCESS) Main PID: 3554 (java) Tasks: 26 (limit: 12544) Memory: 176.1M CGroup: /system.slice/spark-slave.service 3554 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181.b13-9.el8.x86_64/jre/bin/java -cp /opt/spark/conf/:/opt/spark/jars/* -Xmx1g org.apache.spark.deploy.worker.Worker [...] Jan 11 16:31:39 rhel8lab.linuxconfig.org systemd[1]: Starting Apache Spark Slave... Jan 11 16:31:39 rhel8lab.linuxconfig.org start-slave.sh[3537]: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark-spar[...]
Output ini juga menyediakan path ke logfile dari slave (atau worker), yang akan berada di direktori yang sama, dengan nama “worker” di dalamnya. Dengan memeriksa file ini, kita akan melihat sesuatu yang mirip dengan output di bawah ini:
2019-01-11 14:52:23 INFO Worker:54 - Connecting to master rhel8lab.linuxconfig.org:7077... 2019-01-11 14:52:23 INFO ContextHandler:781 - Started o.s.j.s.ServletContextHandler@62059f4a{/metrics/json,null,AVAILABLE,@Spark} 2019-01-11 14:52:23 INFO TransportClientFactory:267 - Successfully created connection to rhel8lab.linuxconfig.org/10.0.2.15:7077 after 58 ms (0 ms spent in bootstraps) 2019-01-11 14:52:24 INFO Worker:54 - Successfully registered with master spark://rhel8lab.linuxconfig.org:7077
Ini menunjukkan bahwa pekerja berhasil terhubung ke master. Dalam file log yang sama ini, kita akan menemukan baris yang memberi tahu kita URL yang didengarkan pekerja:
2019-01-11 14:52:23 INFO WorkerWebUI:54 - Bound WorkerWebUI to 0.0.0.0, and started at http://rhel8lab.linuxconfig.org:8081
Kami dapat mengarahkan browser kami ke halaman status pekerja, di mana masternya terdaftar.
Laman status pekerja percikan, terhubung ke master.Di file log master, baris verifikasi akan muncul:
2019-01-11 14:52:24 INFO Master:54 - Registering worker 10.0.2.15:40815 with 2 cores, 1024.0 MB RAM
Jika kita memuat ulang halaman status master sekarang, pekerja juga akan muncul di sana, dengan tautan ke halaman statusnya.
Percikan halaman status master dengan satu pekerja terlampir.Sumber-sumber ini memverifikasi bahwa kluster kami terpasang dan siap bekerja.
- Untuk menjalankan tugas sederhana di cluster, kami menjalankan salah satu contoh yang dikirimkan bersama paket yang kami unduh. Perhatikan file teks sederhana berikut
/opt/spark/test.file
:line1 word1 word2 word3 line2 word1 line3 word1 word2 word3 word4
Kami akan menjalankan
wordcount.py
contoh di atasnya yang akan menghitung kemunculan setiap kata dalam file. Kita dapat menggunakanspark
pengguna, tanparoot
hak istimewa yang dibutuhkan.$ /opt/spark/bin/spark-submit /opt/spark/examples/src/main/python/wordcount.py /opt/spark/test.file 2019-01-11 15:56:57 INFO SparkContext:54 - Submitted application: PythonWordCount 2019-01-11 15:56:57 INFO SecurityManager:54 - Changing view acls to: spark 2019-01-11 15:56:57 INFO SecurityManager:54 - Changing modify acls to: spark [...]
Saat tugas dijalankan, output panjang disediakan. Mendekati akhir output, hasilnya ditampilkan, cluster menghitung informasi yang dibutuhkan:
2019-01-11 15:57:05 INFO DAGScheduler:54 - Job 0 finished: collect at /opt/spark/examples/src/main/python/wordcount.py:40, took 1.619928 s line3: 1 line2: 1 line1: 1 word4: 1 word1: 3 word3: 2 word2: 2 [...]
Dengan ini kami telah melihat Apache Spark kami beraksi. Node slave tambahan dapat dipasang dan dilampirkan untuk menskalakan kekuatan komputasi cluster kami.