Apa itu Apache Spark? Platform data besar yang menghancurkan Hadoop

Apache Spark ditentukan

Apache Spark adalah kerangka kerja pemrosesan data yang dapat dengan cepat melakukan tugas pemrosesan pada kumpulan data yang sangat besar, dan juga dapat mendistribusikan tugas pemrosesan data ke banyak komputer, baik sendiri atau bersama-sama dengan alat komputasi terdistribusi lainnya. Kedua kualitas ini adalah kunci dunia big data dan pembelajaran mesin, yang membutuhkan penyusunan daya komputasi besar-besaran untuk mengolah penyimpanan data yang besar. Spark juga mengambil beberapa beban pemrograman dari tugas-tugas ini dari pundak pengembang dengan API yang mudah digunakan yang mengabstraksi banyak pekerjaan kasar dari komputasi terdistribusi dan pemrosesan data besar.

Dari permulaannya yang sederhana di AMPLab di UC Berkeley pada tahun 2009, Apache Spark telah menjadi salah satu kerangka kerja pemrosesan terdistribusi data besar yang penting di dunia. Spark dapat diterapkan dalam berbagai cara, menyediakan binding asli untuk bahasa pemrograman Java, Scala, Python, dan R, serta mendukung SQL, streaming data, pembelajaran mesin, dan pemrosesan grafik. Anda akan menemukannya digunakan oleh bank, perusahaan telekomunikasi, perusahaan game, pemerintah, dan semua raksasa teknologi besar seperti Apple, Facebook, IBM, dan Microsoft.

Arsitektur Apache Spark

Pada tingkat fundamental, aplikasi Apache Spark terdiri dari dua komponen utama: driver, yang mengubah kode pengguna menjadi beberapa tugas yang dapat didistribusikan ke seluruh node pekerja, dan eksekutor, yang berjalan di node tersebut dan menjalankan tugas yang ditugaskan kepada mereka. Beberapa bentuk manajer cluster diperlukan untuk menengahi keduanya.

Di luar kotak, Spark dapat berjalan dalam mode cluster mandiri yang hanya memerlukan framework Apache Spark dan JVM di setiap mesin dalam cluster Anda. Namun, kemungkinan besar Anda ingin memanfaatkan sumber daya yang lebih kuat atau sistem manajemen klaster untuk mengurus pengalokasian pekerja sesuai permintaan untuk Anda. Di perusahaan, ini biasanya berarti berjalan di Hadoop YARN (begitulah distribusi Cloudera dan Hortonworks menjalankan tugas Spark), tetapi Apache Spark juga dapat berjalan di Apache Mesos, Kubernetes, dan Docker Swarm.

Jika Anda mencari solusi terkelola, Apache Spark dapat ditemukan sebagai bagian dari Amazon EMR, Google Cloud Dataproc, dan Microsoft Azure HDInsight. Databricks, perusahaan yang mempekerjakan para pendiri Apache Spark, juga menawarkan Platform Analisis Terpadu Databricks, yang merupakan layanan terkelola komprehensif yang menawarkan klaster Apache Spark, dukungan streaming, pengembangan notebook berbasis web terintegrasi, dan kinerja I / O cloud yang dioptimalkan selama distribusi Apache Spark standar.

Apache Spark membuat perintah pemrosesan data pengguna menjadi Grafik Acyclic Terarah , atau DAG. DAG adalah lapisan penjadwalan Apache Spark; itu menentukan tugas apa yang dijalankan pada node apa dan dalam urutan apa.  

Spark vs. Hadoop: Mengapa menggunakan Apache Spark?

Perlu diketahui bahwa Apache Spark vs. Apache Hadoop adalah istilah yang keliru. Anda akan menemukan Spark termasuk dalam sebagian besar distribusi Hadoop hari ini. Namun karena dua keunggulan besar, Spark telah menjadi kerangka kerja pilihan saat memproses data besar, menyalip paradigma MapReduce lama yang membuat Hadoop menonjol.

Keuntungan pertama adalah kecepatan. Mesin data dalam memori Spark berarti bahwa Spark dapat melakukan tugas hingga seratus kali lebih cepat daripada MapReduce dalam situasi tertentu, terutama jika dibandingkan dengan pekerjaan multi-tahap yang memerlukan penulisan status kembali ke disk antar tahapan. Intinya, MapReduce membuat grafik eksekusi dua tahap yang terdiri dari pemetaan dan pengurangan data, sedangkan DAG Apache Spark memiliki beberapa tahap yang dapat didistribusikan dengan lebih efisien. Bahkan pekerjaan Apache Spark di mana datanya tidak dapat sepenuhnya terkandung dalam memori cenderung sekitar 10 kali lebih cepat daripada rekan MapReduce mereka.

Keuntungan kedua adalah Spark API yang ramah pengembang. Sama pentingnya dengan percepatan Spark, orang dapat berargumen bahwa keramahan Spark API bahkan lebih penting.

Spark Core

Dibandingkan dengan MapReduce dan komponen Apache Hadoop lainnya, Apache Spark API sangat ramah bagi pengembang, menyembunyikan banyak kerumitan mesin pemroses terdistribusi di balik panggilan metode sederhana. Contoh kanonik dari ini adalah bagaimana hampir 50 baris kode MapReduce untuk menghitung kata dalam dokumen dapat dikurangi menjadi hanya beberapa baris Apache Spark (di sini ditunjukkan di Scala):

val textFile = sparkSession.sparkContext.textFile (“hdfs: /// tmp / words”)

val counts = textFile.flatMap (line => line.split (““))

                      .map (kata => (kata, 1))

                      .reduceByKey (_ + _)

counts.saveAsTextFile (“hdfs: /// tmp / words_agg”)

Dengan menyediakan binding ke bahasa populer untuk analisis data seperti Python dan R, serta Java dan Scala yang lebih ramah perusahaan, Apache Spark memungkinkan semua orang mulai dari pengembang aplikasi hingga ilmuwan data untuk memanfaatkan skalabilitas dan kecepatannya dengan cara yang dapat diakses.

Spark RDD

Inti dari Apache Spark adalah konsep Resilient Distributed Dataset (RDD), abstraksi pemrograman yang mewakili kumpulan objek yang tidak dapat diubah yang dapat dibagi di seluruh cluster komputasi. Operasi pada RDD juga dapat dibagi di seluruh cluster dan dijalankan dalam proses batch paralel, yang mengarah ke pemrosesan paralel yang cepat dan skalabel.

RDD dapat dibuat dari file teks sederhana, database SQL, penyimpanan NoSQL (seperti Cassandra dan MongoDB), bucket Amazon S3, dan banyak lagi lainnya. Sebagian besar Spark Core API dibangun di atas konsep RDD ini, memungkinkan peta tradisional dan mengurangi fungsionalitas, tetapi juga menyediakan dukungan bawaan untuk menggabungkan kumpulan data, pemfilteran, pengambilan sampel, dan agregasi.

Spark berjalan secara terdistribusi dengan menggabungkan proses inti driver yang membagi aplikasi Spark menjadi tugas dan mendistribusikannya di antara banyak proses eksekutor yang melakukan pekerjaan tersebut. Pelaksana ini dapat ditingkatkan dan diturunkan sesuai kebutuhan aplikasi.

Spark SQL

Awalnya dikenal sebagai Shark, Spark SQL telah menjadi semakin penting untuk proyek Apache Spark. Ini kemungkinan merupakan antarmuka yang paling umum digunakan oleh pengembang saat ini saat membuat aplikasi. Spark SQL difokuskan pada pemrosesan data terstruktur, menggunakan pendekatan kerangka data yang dipinjam dari R dan Python (dalam Pandas). Tapi seperti namanya, Spark SQL juga menyediakan antarmuka yang sesuai dengan SQL2003 untuk meminta data, membawa kekuatan Apache Spark untuk analis serta pengembang.

Di samping dukungan SQL standar, Spark SQL menyediakan antarmuka standar untuk membaca dari dan menulis ke datastore lain termasuk JSON, HDFS, Apache Hive, JDBC, Apache ORC, dan Apache Parquet, yang semuanya didukung secara langsung. Toko populer lainnya — Apache Cassandra, MongoDB, Apache HBase, dan banyak lainnya — dapat digunakan dengan menarik konektor terpisah dari ekosistem Paket Spark.

Memilih beberapa kolom dari kerangka data sesederhana baris ini:

CitiesDF.select ("nama", "pop")

Menggunakan antarmuka SQL, kami mendaftarkan dataframe sebagai tabel sementara, setelah itu kami dapat mengeluarkan kueri SQL terhadapnya:

CitiesDF.createOrReplaceTempView ("kota")

spark.sql ("PILIH nama, pop DARI kota")

Di balik layar, Apache Spark menggunakan pengoptimal kueri yang disebut Catalyst yang memeriksa data dan kueri untuk menghasilkan rencana kueri yang efisien untuk lokalitas data dan komputasi yang akan melakukan penghitungan yang diperlukan di seluruh kluster. Di era Apache Spark 2.x, antarmuka Spark SQL dari kerangka data dan kumpulan data (pada dasarnya kerangka data yang diketik yang dapat diperiksa pada waktu kompilasi untuk mengetahui kebenaran dan memanfaatkan memori lebih lanjut dan pengoptimalan komputasi pada waktu berjalan) adalah pendekatan yang direkomendasikan untuk pengembangan . Antarmuka RDD masih tersedia, tetapi disarankan hanya jika kebutuhan Anda tidak dapat dipenuhi dalam paradigma Spark SQL.

Spark 2.4 memperkenalkan satu set fungsi tingkat tinggi bawaan untuk memanipulasi array dan tipe data tingkat tinggi lainnya secara langsung.

Percikan MLlib

Apache Spark juga menggabungkan pustaka untuk menerapkan pembelajaran mesin dan teknik analisis grafik ke data dalam skala besar. Spark MLlib menyertakan framework untuk membuat pipeline machine learning, yang memungkinkan implementasi ekstraksi fitur, pilihan, dan transformasi dengan mudah pada set data terstruktur apa pun. MLlib hadir dengan implementasi terdistribusi dari algoritma pengelompokan dan klasifikasi seperti pengelompokan k-means dan hutan acak yang dapat ditukar masuk dan keluar dari pipeline kustom dengan mudah. Model dapat dilatih oleh data scientist di Apache Spark menggunakan R atau Python, disimpan menggunakan MLlib, lalu diimpor ke pipeline berbasis Java atau Scala untuk penggunaan produksi.

Perhatikan bahwa sementara Spark MLlib mencakup pembelajaran mesin dasar termasuk klasifikasi, regresi, pengelompokan, dan pemfilteran, itu tidak termasuk fasilitas untuk pemodelan dan pelatihan jaringan neural dalam (untuk detailnya lihat ulasan Spark MLlib). Namun, Deep Learning Pipelines sedang dalam pengerjaan.

Spark GraphX

Spark GraphX ​​hadir dengan pilihan algoritma terdistribusi untuk memproses struktur grafik termasuk implementasi PageRank Google. Algoritme ini menggunakan pendekatan RDD Spark Core untuk memodelkan data; paket GraphFrames memungkinkan Anda melakukan operasi grafik pada dataframe, termasuk memanfaatkan pengoptimal Catalyst untuk kueri grafik.

Spark Streaming

Spark Streaming adalah tambahan awal untuk Apache Spark yang membantunya mendapatkan daya tarik di lingkungan yang membutuhkan pemrosesan waktu nyata atau hampir waktu nyata. Sebelumnya, pemrosesan batch dan streaming di dunia Apache Hadoop adalah hal yang terpisah. Anda akan menulis kode MapReduce untuk kebutuhan pemrosesan batch Anda dan menggunakan sesuatu seperti Apache Storm untuk persyaratan streaming real-time Anda. Ini jelas mengarah pada basis kode yang berbeda yang perlu disinkronkan untuk domain aplikasi meskipun didasarkan pada kerangka kerja yang sama sekali berbeda, membutuhkan sumber daya yang berbeda, dan melibatkan masalah operasional yang berbeda untuk menjalankannya.

Spark Streaming memperluas konsep Apache Spark dari pemrosesan batch menjadi streaming dengan memecah aliran menjadi serangkaian mikrobatch berkelanjutan, yang kemudian dapat dimanipulasi menggunakan Apache Spark API. Dengan cara ini, kode dalam operasi batch dan streaming dapat berbagi (sebagian besar) kode yang sama, berjalan pada framework yang sama, sehingga mengurangi overhead developer dan operator. Semua orang menang.

Kritik terhadap pendekatan Spark Streaming adalah bahwa microbatching, dalam skenario di mana respons latensi rendah untuk data yang masuk diperlukan, mungkin tidak dapat menyamai kinerja kerangka kerja berkemampuan streaming lainnya seperti Apache Storm, Apache Flink, dan Apache Apex, semuanya menggunakan metode streaming murni daripada microbatch.

Streaming Terstruktur

Streaming Terstruktur (ditambahkan di Spark 2.x) adalah untuk Spark Streaming seperti halnya Spark SQL ke Spark Core API: API tingkat yang lebih tinggi dan abstraksi yang lebih mudah untuk menulis aplikasi. Dalam kasus Structure Streaming, API level yang lebih tinggi pada dasarnya memungkinkan pengembang membuat dataframe dan set data streaming tanpa batas. Ini juga memecahkan beberapa masalah yang sangat nyata yang dialami pengguna dalam kerangka kerja sebelumnya, terutama yang berkaitan dengan agregasi waktu-acara dan pengiriman pesan yang terlambat. Semua kueri pada aliran terstruktur melalui pengoptimal kueri Catalyst, dan bahkan dapat dijalankan secara interaktif, memungkinkan pengguna untuk melakukan kueri SQL terhadap data streaming langsung.

Streaming Terstruktur awalnya mengandalkan skema microbatching Spark Streaming dalam menangani data streaming. Namun di Spark 2.3, tim Apache Spark menambahkan Mode Pemrosesan Kontinu latensi rendah ke Streaming Terstruktur, memungkinkannya menangani respons dengan latensi serendah 1 ms, yang sangat mengesankan. Mulai Spark 2.4, Pemrosesan Berkelanjutan masih dianggap eksperimental. Sementara Streaming Terstruktur dibangun di atas mesin Spark SQL, Streaming Berkelanjutan hanya mendukung sekumpulan kueri terbatas.

Streaming Terstruktur adalah masa depan aplikasi streaming dengan platform ini, jadi jika Anda membuat aplikasi streaming baru, Anda harus menggunakan Streaming Terstruktur. Spark Streaming API lama akan terus didukung, tetapi proyek merekomendasikan porting ke Streaming Terstruktur, karena metode baru membuat penulisan dan pemeliharaan kode streaming jauh lebih dapat ditanggung.

Pipelines Pembelajaran Mendalam

Apache Spark mendukung pembelajaran mendalam melalui Deep Learning Pipelines. Dengan menggunakan struktur pipeline MLlib yang ada, Anda dapat memanggil ke library deep learning tingkat yang lebih rendah dan membuat pengklasifikasi hanya dalam beberapa baris kode, serta menerapkan grafik TensorFlow kustom atau model Keras ke data yang masuk. Grafik dan model ini bahkan dapat didaftarkan sebagai Spark SQL UDF (fungsi yang ditentukan pengguna) sehingga model pembelajaran yang mendalam dapat diterapkan ke data sebagai bagian dari pernyataan SQL.

Tutorial Apache Spark

Siap untuk menyelami dan mempelajari Apache Spark? Kami sangat merekomendasikan Panduan A Neanderthal untuk Apache Spark dari Evan Heitman dengan Python, yang tidak hanya menjabarkan dasar-dasar cara kerja Apache Spark dalam istilah yang relatif sederhana, tetapi juga memandu Anda melalui proses penulisan aplikasi Python sederhana yang menggunakan kerangka kerja . Artikel ini ditulis dari sudut pandang ilmuwan data, yang masuk akal karena ilmu data adalah dunia di mana data besar dan pembelajaran mesin semakin penting.

Jika Anda mencari beberapa contoh Apache Spark untuk memberi Anda gambaran tentang apa yang dapat dilakukan platform dan bagaimana cara melakukannya, lihat Spark By {Contoh}. Ada banyak kode contoh di sini untuk sejumlah tugas dasar yang membentuk blok bangunan pemrograman Spark, sehingga Anda dapat melihat komponen yang menyusun tugas-tugas besar yang dibuat untuk Apache Spark.

Perlu lebih dalam? DZone memiliki apa yang secara sederhana disebut sebagai Koleksi Apache Spark Lengkap, yang terdiri dari banyak tutorial bermanfaat tentang banyak topik Apache Spark. Selamat belajar!