Apa itu Apache Spark? Platform data besar yang menghancurkan Hadoop

Apache Spark ditakrifkan

Apache Spark adalah kerangka pemprosesan data yang dapat dengan cepat melakukan tugas pemrosesan pada set data yang sangat besar, dan juga dapat mengedarkan tugas pemprosesan data di beberapa komputer, baik sendiri atau bersamaan dengan alat pengkomputeran terdistribusi lain. Kedua-dua kualiti ini merupakan kunci bagi dunia data besar dan pembelajaran mesin, yang memerlukan pengumpulan kekuatan pengkomputeran besar-besaran untuk melalui kedai data besar. Spark juga mengambil beberapa beban pengaturcaraan dari tugas-tugas ini dari bahu pemaju dengan API yang mudah digunakan yang menyingkirkan sebahagian besar kerja kasar pengkomputeran yang diedarkan dan pemprosesan data yang besar.

Sejak permulaannya yang sederhana di AMPLab di UC Berkeley pada tahun 2009, Apache Spark telah menjadi salah satu kerangka pemprosesan diedarkan data besar utama di dunia. Spark dapat digunakan dalam berbagai cara, menyediakan pengikatan asli untuk bahasa pemrograman Java, Scala, Python, dan R, dan mendukung SQL, streaming data, pembelajaran mesin, dan pemrosesan grafik. Anda akan menggunakannya digunakan oleh bank, syarikat telekomunikasi, syarikat permainan, kerajaan, dan semua gergasi teknologi utama seperti Apple, Facebook, IBM, dan Microsoft.

Senibina Apache Spark

Pada peringkat asas, aplikasi Apache Spark terdiri dari dua komponen utama: pemacu, yang mengubah kod pengguna menjadi beberapa tugas yang dapat diedarkan di simpul pekerja, dan pelaksana, yang berjalan pada node tersebut dan melaksanakan tugas yang diberikan kepada mereka. Beberapa bentuk pengurus kluster diperlukan untuk menjadi orang tengah antara keduanya.

Di luar kotak, Spark dapat berjalan dalam mod cluster mandiri yang hanya memerlukan kerangka Apache Spark dan JVM pada setiap mesin di kluster anda. Namun, kemungkinan besar anda ingin memanfaatkan sistem pengurusan sumber atau kluster yang lebih mantap untuk mengurus memperuntukkan pekerja berdasarkan permintaan untuk anda. Di perusahaan, ini biasanya bermaksud berjalan di Hadoop YARN (ini adalah bagaimana pengedaran Cloudera dan Hortonworks menjalankan pekerjaan Spark), tetapi Apache Spark juga dapat berjalan di Apache Mesos, Kubernetes, dan Docker Swarm.

Sekiranya anda mencari penyelesaian yang dikendalikan, maka Apache Spark dapat dijumpai sebagai sebahagian dari Amazon EMR, Google Cloud Dataproc, dan Microsoft Azure HDInsight. Databricks, syarikat yang menggunakan pengasas Apache Spark, juga menawarkan Databricks Unified Analytics Platform, yang merupakan perkhidmatan terkelola yang komprehensif yang menawarkan kelompok Apache Spark, sokongan streaming, pengembangan notebook berasaskan web bersepadu, dan prestasi cloud I / O yang dioptimumkan sebaran Apache Spark standard.

Apache Spark membina arahan pemprosesan data pengguna ke dalam Graf Acyclic Directed , atau DAG. DAG adalah lapisan penjadualan Apache Spark; ia menentukan tugas apa yang dilaksanakan pada nod apa dan mengikut urutan apa.  

Spark vs Hadoop: Mengapa menggunakan Apache Spark?

Perlu dinyatakan bahawa Apache Spark vs Apache Hadoop adalah sedikit keliru. Anda akan dapati Spark termasuk dalam sebilangan besar pengedaran Hadoop hari ini. Tetapi kerana dua kelebihan besar, Spark telah menjadi kerangka pilihan ketika memproses data besar, mengatasi paradigma MapReduce lama yang membawa Hadoop menjadi terkenal.

Kelebihan pertama ialah kelajuan. Mesin data dalam memori Spark bermaksud bahawa ia dapat melakukan tugas hingga seratus kali lebih cepat daripada MapReduce dalam situasi tertentu, terutama jika dibandingkan dengan pekerjaan multi-tahap yang memerlukan penulisan keadaan kembali ke cakera antara tahap. Pada dasarnya, MapReduce membuat grafik pelaksanaan dua peringkat yang terdiri dari pemetaan data dan pengurangan, sedangkan DAG Apache Spark mempunyai beberapa tahap yang dapat diedarkan dengan lebih efisien. Bahkan pekerjaan Apache Spark di mana data tidak dapat sepenuhnya terkandung dalam memori cenderung sekitar 10 kali lebih cepat daripada rakan MapReduce mereka.

Kelebihan kedua ialah Spark API yang mesra pemaju. Sama pentingnya dengan kecepatan Spark, seseorang dapat berpendapat bahawa keramahan Spark API lebih penting lagi.

Teras Spark

Sebagai perbandingan dengan MapReduce dan komponen Apache Hadoop yang lain, Apache Spark API sangat ramah kepada pemaju, menyembunyikan banyak kerumitan mesin pemprosesan yang diedarkan di sebalik panggilan kaedah mudah. Contoh kanonik ini adalah bagaimana hampir 50 baris kod MapReduce untuk mengira perkataan dalam dokumen dapat dikurangkan menjadi hanya beberapa baris Apache Spark (di sini ditunjukkan dalam Scala):

val textFile = sparkSession.sparkContext.textFile ("hdfs: /// tmp / kata-kata")

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

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

                      .reduceByKey (_ + _)

counts.saveAsTextFile ("hdfs: /// tmp / words_agg")

Dengan memberikan ikatan ke bahasa yang popular untuk analisis data seperti Python dan R, serta Java dan Scala yang lebih mesra perusahaan, Apache Spark membolehkan semua orang dari pemaju aplikasi hingga saintis data memanfaatkan skalabilitas dan kecepatannya dengan cara yang mudah diakses.

Spark RDD

Di tengah-tengah Apache Spark adalah konsep Resilient Distributed Dataset (RDD), abstraksi pengaturcaraan yang mewakili kumpulan objek yang tidak dapat diubah yang dapat dibagi di sekumpulan komputer. Operasi pada RDD juga dapat dibagi di seluruh kelompok dan dilaksanakan dalam proses kumpulan selari, yang mengarah ke pemprosesan selari yang cepat dan berskala.

RDD boleh dibuat dari fail teks mudah, pangkalan data SQL, kedai NoSQL (seperti Cassandra dan MongoDB), baldi Amazon S3, dan banyak lagi. Sebilangan besar API Teras Spark dibangun berdasarkan konsep RDD ini, memungkinkan peta tradisional dan mengurangkan fungsi, tetapi juga memberikan sokongan terbina dalam untuk menggabungkan set data, penyaringan, pengambilan sampel, dan agregasi.

Spark berjalan dengan cara yang diedarkan dengan menggabungkan proses inti pemacu yang membahagikan aplikasi Spark menjadi tugas dan menyebarkannya di antara banyak proses pelaksana yang melakukan kerja. Pelaksana ini dapat ditingkatkan ke atas dan ke bawah sesuai dengan keperluan aplikasi.

Spark SQL

Asalnya dikenali sebagai Shark, Spark SQL telah menjadi semakin penting untuk projek Apache Spark. Kemungkinan antara muka yang paling biasa digunakan oleh pemaju masa kini semasa membuat aplikasi. Spark SQL difokuskan pada pemrosesan data berstruktur, menggunakan pendekatan kerangka data yang dipinjam dari R dan Python (di Pandas). Tetapi seperti namanya, Spark SQL juga menyediakan antarmuka yang sesuai dengan SQL2003 untuk meminta data, membawa kekuatan Apache Spark kepada para penganalisis dan juga pengembang.

Di samping sokongan SQL standard, Spark SQL menyediakan antara muka standard untuk membaca dari dan menulis ke kedai data lain termasuk JSON, HDFS, Apache Hive, JDBC, Apache ORC, dan Apache Parquet, semuanya disokong di luar kotak. Kedai popular lain - Apache Cassandra, MongoDB, Apache HBase, dan banyak lagi - boleh digunakan dengan menarik penyambung yang terpisah dari ekosistem Spark Packages.

Memilih beberapa lajur dari kerangka data semudah baris ini:

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

Dengan menggunakan antara muka SQL, kami mendaftarkan kerangka data sebagai jadual sementara, setelah itu kami dapat mengeluarkan pertanyaan SQL terhadapnya:

cityDF.createOrReplaceTempView ("bandar")

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

Di belakang tabir, Apache Spark menggunakan pengoptimum pertanyaan yang disebut Catalyst yang memeriksa data dan pertanyaan untuk menghasilkan rancangan pertanyaan yang efisien untuk lokasi data dan pengiraan yang akan melakukan pengiraan yang diperlukan di seluruh kluster. Pada era Apache Spark 2.x, antaramuka Spark SQL dari kerangka data dan set data (pada dasarnya kerangka data yang ditaip yang dapat diperiksa pada waktu kompilasi untuk mendapatkan kebenaran dan memanfaatkan memori dan pengoptimuman komputasi lebih lanjut pada waktu berjalan) adalah pendekatan yang disarankan untuk pembangunan . Antara muka RDD masih tersedia, tetapi disyorkan hanya jika keperluan anda tidak dapat ditangani dalam paradigma Spark SQL.

Spark 2.4 memperkenalkan sekumpulan fungsi pesanan tinggi terbina dalam untuk memanipulasi tatasusunan dan jenis data pesanan tinggi yang lain secara langsung.

Spark MLlib

Apache Spark juga menggabungkan perpustakaan untuk menerapkan pembelajaran mesin dan teknik analisis grafik pada data dalam skala besar. Spark MLlib merangkumi kerangka kerja untuk membuat saluran pembelajaran mesin, yang memungkinkan pelaksanaan mudah pengekstrakan fitur, pilihan, dan transformasi pada set data terstruktur. MLlib dilengkapi dengan implementasi algoritma pengelompokan dan klasifikasi yang diedarkan seperti pengelompokan k-means dan hutan rawak yang dapat ditukar masuk dan keluar dari saluran paip khusus dengan mudah. Model dapat dilatih oleh para saintis data di Apache Spark menggunakan R atau Python, disimpan menggunakan MLlib, dan kemudian diimport ke saluran pipa berbasis Java atau Scala untuk penggunaan produksi.

Perhatikan bahawa walaupun Spark MLlib merangkumi pembelajaran mesin asas termasuk klasifikasi, regresi, pengelompokan, dan penyaringan, ini tidak termasuk kemudahan untuk pemodelan dan latihan jaringan saraf dalam (untuk perinciannya lihat tinjauan Spark MLlib). Walau bagaimanapun, Saluran Pembelajaran Dalam sedang dalam proses.

Spark GrafikX

Spark GraphX ​​dilengkapi dengan pilihan algoritma yang diedarkan untuk memproses struktur grafik termasuk pelaksanaan PageRank Google. Algoritma ini menggunakan pendekatan RDD Spark Core untuk pemodelan data; pakej GraphFrames membolehkan anda melakukan operasi grafik pada kerangka data, termasuk memanfaatkan pengoptimum Catalyst untuk pertanyaan grafik.

Pengaliran Spark

Streaming Spark adalah tambahan awal untuk Apache Spark yang membantunya mendapatkan daya tarikan dalam persekitaran yang memerlukan pemprosesan masa nyata atau hampir masa nyata. Sebelum ini, pemprosesan kumpulan dan aliran di dunia Apache Hadoop adalah perkara yang terpisah. Anda akan menulis kod MapReduce untuk keperluan pemprosesan kumpulan anda dan menggunakan sesuatu seperti Apache Storm untuk keperluan streaming masa nyata anda. Ini jelas membawa kepada perbezaan pangkalan data yang perlu diselaraskan untuk domain aplikasi walaupun berdasarkan pada kerangka kerja yang sama sekali berbeza, memerlukan sumber yang berbeza, dan melibatkan masalah operasi yang berbeza untuk menjalankannya.

Spark Streaming memperluas konsep Apache Spark pemrosesan kumpulan menjadi streaming dengan memecah aliran menjadi rangkaian mikrob yang berterusan, yang kemudian dapat dimanipulasi menggunakan Apache Spark API. Dengan cara ini, kod dalam operasi kumpulan dan penstriman dapat berkongsi (kebanyakan) kod yang sama, berjalan pada kerangka yang sama, sehingga dapat mengurangkan overhead pengembang dan pengendali. Semua orang menang.

Kritikan terhadap pendekatan Spark Streaming adalah bahawa microbatching, dalam senario di mana respons latensi rendah terhadap data masuk diperlukan, mungkin tidak dapat menandingi prestasi kerangka kerja streaming lain seperti Apache Storm, Apache Flink, dan Apache Apex, semuanya menggunakan kaedah streaming murni dan bukannya kumpulan mikro.

Penstriman Berstruktur

Streaming Berstruktur (ditambahkan dalam Spark 2.x) adalah untuk Spark Streaming seperti apa Spark SQL ke API Spark Core: API tahap lebih tinggi dan pengambilan yang lebih mudah untuk menulis aplikasi. Dalam kes Struktur Streaming, API peringkat lebih tinggi pada dasarnya membolehkan pemaju membuat bingkai data dan set data streaming tanpa batas. Ini juga dapat menyelesaikan beberapa masalah yang sangat sukar yang pengguna hadapi dalam kerangka sebelumnya, terutama mengenai menangani agregat waktu acara dan pengiriman pesanan yang lewat. Semua pertanyaan pada aliran berstruktur melalui pengoptimum permintaan Catalyst, dan bahkan dapat dijalankan secara interaktif, yang memungkinkan pengguna untuk melakukan pertanyaan SQL terhadap data streaming langsung.

Streaming Berstruktur pada asalnya bergantung pada skema microbatching Spark Streaming dalam mengendalikan data streaming. Tetapi dalam Spark 2.3, pasukan Apache Spark menambahkan Mod Pemrosesan Berterusan latensi rendah ke Streaming Berstruktur, yang memungkinkannya menangani respons dengan latensi serendah 1ms, yang sangat mengagumkan. Setakat Spark 2.4, Pemprosesan Berterusan masih dianggap eksperimental. Walaupun Struktur Berstruktur dibangun di atas mesin Spark SQL, Streaming Berterusan hanya menyokong sekumpulan pertanyaan terhad.

Streaming Berstruktur adalah masa depan aplikasi streaming dengan platform, jadi jika anda membuat aplikasi streaming baru, anda harus menggunakan Streaming Berstruktur. API Streaming Spark lama akan terus disokong, tetapi projek ini mengesyorkan untuk menghantar ke Streaming Berstruktur, kerana kaedah baru menjadikan penulisan dan pemeliharaan kod streaming jauh lebih dapat ditanggung.

Saluran Pembelajaran Dalam

Apache Spark menyokong pembelajaran mendalam melalui Saluran Pembelajaran Dalam. Dengan menggunakan struktur saluran paip MLlib yang ada, anda dapat memanggil perpustakaan pembelajaran mendalam tingkat bawah dan membina pengklasifikasi hanya dalam beberapa baris kod, serta menerapkan grafik TensorFlow khusus atau model Keras pada data masuk. Grafik dan model ini bahkan dapat didaftarkan sebagai UDF Spark SQL khusus (fungsi yang ditentukan pengguna) sehingga model pembelajaran mendalam dapat diterapkan pada data sebagai bagian dari pernyataan SQL.

Tutorial Apache Spark

Bersedia untuk menyelam dan belajar Apache Spark? Kami sangat mengesyorkan Evan Heitman's A Neanderthal's Guide to Apache Spark di Python, yang tidak hanya mengemukakan asas-asas bagaimana Apache Spark berfungsi dalam istilah yang agak mudah, tetapi juga membimbing anda melalui proses penulisan aplikasi Python sederhana yang memanfaatkan rangka kerja . Artikel ini ditulis dari perspektif saintis data, yang masuk akal kerana sains data adalah dunia di mana data besar dan pembelajaran mesin semakin kritikal.

Sekiranya anda mencari beberapa contoh Apache Spark untuk memberi anda gambaran tentang apa yang dapat dilakukan oleh platform dan bagaimana ia melakukannya, periksa Spark Oleh {Contoh}. Terdapat banyak contoh kod di sini untuk sejumlah tugas asas yang membentuk blok pengaturcaraan Spark, jadi anda dapat melihat komponen yang membentuk tugas yang lebih besar yang dibuat oleh Apache Spark.

Perlu pergi lebih mendalam? DZone memiliki apa yang disebut sebagai Koleksi Apache Spark Lengkap, yang terdiri dari banyak tutorial bermanfaat mengenai banyak topik Apache Spark. Selamat belajar!