Artikel ini akan melihat beberapa kemajuan signifikan yang dibuat dalam memanfaatkan kekuatan database relasional, tetapi “dalam skala besar”, menggunakan beberapa komponen terbaru dari Apache Spark – Spark SQL dan DataFrames. Pertama-tama, kita akan membahas topik-topik berikut.
- Motivasi dan tantangan dengan penskalaan basis data relasional
- Memahami Spark SQL & DataFrames
- Objectives
- Arsitektur dan fitur
- Performa
Database relasional ada di sini untuk tetap ada, terlepas dari hype dan munculnya yang lebih baru yang disebut database NoSQL. Alasan sederhananya adalah bahwa database relasional menerapkan struktur dan batasan dasar dan menyediakan bahasa deklaratif yang ramah untuk kueri data.
Kita akan melihat tantangan dan motivasi utama bagi mereka yang bekerja sangat keras dan menginvestasikan waktu untuk membangun komponen baru di Apache Spark untuk melakukan SQL dalam skala besar. Kita juga akan menjelajahi arsitektur terkemuka, antarmuka, fitur, dan tolok ukur kinerja untuk Spark SQL dan DataFrames. Terakhir, kita akan membahas studi kasus dunia nyata tentang analisis serangan pelanggaran berbasis Data KDD 99 Cup menggunakan Spark SQL dan DataFrames menggunakan Platform Cloud Databricks untuk Spark.
Motivasi dan Tantangan Untuk Menskalakan Database Relasional Untuk Data Besar
Penyimpanan data relasional mudah dibuat dan dikueri. Pengguna dan pengembang juga sering lebih suka menulis kueri deklaratif yang dapat ditafsirkan dengan cepat dalam bahasa yang dapat dibaca manusia seperti SQL. Namun, seiring bertambahnya volume dan variasi data, pendekatan relasional tidak cukup terukur untuk membangun aplikasi big data dan sistem analitik.
Ini adalah beberapa tantangan. Bekerja dengan berbagai jenis dan sumber data, yang dapat terstruktur, semi-terstruktur, dan tidak terstruktur
- Membangun jalur pipa ETL ke dan dari berbagai sumber data dapat mengarah pada pengembangan sejumlah besar kode kustom tertentu, yang meningkatkan hutang teknis dari waktu ke waktu
- Kemampuan untuk melakukan analitik berbasis kecerdasan bisnis tradisional (BI) dan analitik lanjutan (pembelajaran mesin, pemodelan statistik, dll.), menantang untuk dicapai dalam sistem relasional.
Analisis data yang ekstensif bukanlah sesuatu yang ditemukan kemarin! Kita telah sukses di bidang ini dengan paradigma Hadoop dan MapReduce. Ini kuat tetapi sering lambat dan memberi pengguna antarmuka pemrograman prosedural tingkat rendah yang mengharuskan orang untuk menulis banyak kode bahkan untuk transformasi data dasar.
Namun, begitu Spark dirilis, itu benar-benar merevolusi cara analisis data ekstensif dilakukan, berfokus pada komputasi dalam memori, toleransi kesalahan, abstraksi tingkat tinggi, dan kemudahan penggunaan.
Namun, di dunia nyata sebagian besar saluran data dan analitik mungkin melibatkan campuran kode relasional dan prosedural. Memaksa pengguna untuk memilih di antara mereka menyebabkan kerumitan dan meningkatkan upaya pengguna dalam mengembangkan, membangun, dan memelihara berbagai aplikasi dan sistem.
Daripada memaksa pengguna untuk memilih antara API relasional atau prosedural, Spark SQL bertujuan untuk memungkinkan pengguna menggabungkannya dengan mulus untuk melakukan kueri, pengambilan, dan analisis data dalam skala besar pada data besar.
Memahami Spark SQL dan DataFrames
Spark SQL mencoba menjembatani kesenjangan antara dua model yang kami sebutkan sebelumnya. Model relasional dan prosedural dengan dua komponen utama. Ini menyediakan API DataFrame yang memungkinkan Anda melakukan operasi relasional skala besar pada sumber data eksternal dan koleksi terdistribusi bawaan Spark.
Untuk mendukung berbagai sumber data dan algoritma yang berbeda dalam Big Data, Spark SQL memperkenalkan pengoptimal baru yang dapat diperluas yang disebut Catalyst, yang memudahkan penambahan sumber data, aturan pengoptimalan, dan tipe data untuk analitik lanjutan seperti pembelajaran mesin.
Pada dasarnya, Spark SQL memanfaatkan kekuatan Spark untuk melakukan komputasi terdistribusi, kuat, dalam memori dalam skala besar pada Big Data. Spark SQL memberikan kinerja superior sambil mempertahankan kompatibilitas dengan semua kerangka kerja dan komponen yang ada yang didukung oleh Apache Hive (kerangka kerja gudang data populer yang luas), termasuk format data, fungsi yang ditentukan pengguna (UDF), dan megastore.
Selain itu, ini juga membantu dalam menerima berbagai macam format data dari sumber data yang signifikan dan gudang data perusahaan seperti JSON, Hive, Parquet, dan sebagainya, dan melakukan kombinasi operasi relasional dan prosedural untuk analitik yang lebih kompleks dan canggih.
Baca Juga
Tujuan
Mari kita lihat beberapa fakta menarik tentang Spark SQL, termasuk penggunaan, adopsi, dan tujuannya, beberapa di antaranya tanpa malu-malu saya salin sekali lagi dari artikel yang sangat bagus dan asli tentang “Pemrosesan Data Relasional di Spark”.
Spark SQL pertama kali dirilis pada Mei 2014 dan sekarang mungkin merupakan salah satu komponen yang paling aktif dikembangkan di Spark. Selain itu, Apache Spark adalah proyek big data open source paling aktif dengan ratusan kontributor.’ Selain menjadi proyek sumber terbuka, Spark SQL telah mulai diadopsi oleh industri arus utama.
Itu telah dikerahkan di lingkungan besar. Misalnya, Facebook memiliki studi kasus yang sangat baik tentang “Apache Spark @Scale: Kasus Penggunaan Produksi 60 TB+”. Perusahaan sedang menyiapkan data untuk pemeringkatan entitas, dan pekerjaan Hive-nya memakan waktu berhari-hari dan mengalami banyak masalah, tetapi Facebook dapat mengukur dan meningkatkan kinerja dengan Spark.
Lihatlah tantangan menarik yang mereka hadapi di sepanjang jalan! Fakta menarik lainnya adalah bahwa dua pertiga pelanggan Databricks Cloud (layanan yang dihosting yang menjalankan Spark) menggunakan Spark SQL dalam bahasa pemrograman lain.
Oleh karena itu, di bagian kedua seri ini, kami juga akan menyajikan studi kasus praktis menggunakan Spark SQL di Databricks. Tujuan utama Spark SQL, seperti yang didefinisikan oleh pembuatnya, adalah:
Dukungan untuk pemrosesan relasional, baik dalam program Spark (pada RDD asli) maupun pada sumber data eksternal menggunakan API pemrogram.
- Memberikan kinerja tinggi menggunakan teknik DBMS yang sudah mapan
- Dukung sumber data baru dengan mudah, termasuk data semi-terstruktur dan database eksternal untuk federasi kueri
- Aktifkan ekstensi dengan algoritme analisis lanjutan seperti pemrosesan grafik dan pembelajaran mesin
Arsitektur dan Fitur
Kita sekarang akan melihat fitur dan arsitektur utama di sekitar Spark SQL dan DataFrames. Beberapa konsep kunci yang perlu diingat terkait dengan ekosistem Spark, yang terus berkembang.
Ekosistem Spark
RDD (Resilient Distributed Dataset) mungkin merupakan kontributor paling signifikan untuk semua kisah sukses Spark. Ini pada dasarnya adalah struktur data, atau abstraksi memori terdistribusi, yang memungkinkan pemrogram untuk melakukan komputasi dalam memori pada kluster terdistribusi besar sambil mempertahankan aspek seperti toleransi kesalahan.
Arsitektur DataFrames DataFrame setara dengan tabel dalam database relasional (tetapi dengan lebih banyak pengoptimalan di bawah tenda) dan juga dapat dimanipulasi dengan cara yang mirip dengan koleksi terdistribusi (RDD) “asli” Spark. Tidak seperti RDD, bingkai data biasanya mengikuti skema mereka dan mendukung berbagai operasi relasional, yang menghasilkan eksekusi yang lebih optimal.
- DataFrames dapat dibuat dari tabel, seperti tabel Hive yang ada di infrastruktur Big Data Anda, atau bahkan dari RDD yang ada.
- DataFrames dapat dimanipulasi menggunakan kueri SQL langsung dan DataFrame DSL (bahasa khusus domain), di mana kita dapat menggunakan berbagai operator relasional dan transformer seperti where dan groupBy.
- Setiap DataFrame juga dapat mewakili RDD objek baris, yang memungkinkan pengguna memanggil API Spark prosedural seperti peta.
- Terakhir, diberikan, tetapi selalu ingat, tidak seperti API bingkai data tradisional (Panda), bingkai data Spark malas karena setiap objek DataFrame mewakili rencana logis untuk menghitung kumpulan data. Tetap saja, tidak ada eksekusi yang terjadi hingga pengguna memanggil “operasi keluaran” khusus seperti penyimpanan.
Ini akan memberi Anda wawasan yang cukup tentang Spark SQL, DataFrames, fitur inti, konsep, arsitektur, dan antarmuka. Terakhir, kami akan menutup bagian ini dengan melihat tolok ukur kinerja.
Baca Juga
Performa
Merilis fitur baru tanpa pengoptimalan yang tepat bisa mematikan, dan orang-orang yang membangun Spark melakukan banyak pengujian dan pembandingan kinerja! Jadi mari kita lihat hasil yang menarik. Gambar pertama yang menunjukkan beberapa hasil ditunjukkan di bawah ini.
Perbandingan performa dalam percobaan ini, mereka membandingkan performa Spark SQL dengan Shark dan Impala menggunakan benchmark AMPLab Big Data, yang menggunakan beban kerja analitik web yang dikembangkan oleh Pavle et al.
Model ini mencakup empat jenis kueri dengan parameter berbeda yang melakukan pemindaian, agregasi, penggabungan, dan pekerjaan MapReduce berbasis UDF.
Dataset berisi 110 GB data setelah kompresi menggunakan format kolom Parquet. Kami melihat bahwa di semua kueri, Spark SQL jauh lebih cepat daripada Shark dan secara umum bersaing dengan Impala.
Kesenjangan paling signifikan dari Impala ada di Query 3a, di mana Impala memilih rencana bergabung yang lebih baik karena selektivitas kueri membuat salah satu tabel menjadi sangat kecil.