Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini membahas strategi untuk mengoptimalkan penyimpanan data untuk eksekusi pekerjaan Apache Spark yang efisien di Azure HDInsight.
Ikhtisar
Spark mendukung banyak format, seperti csv, json, xml, parquet, orc, dan avro. Spark dapat diperluas untuk mendukung lebih banyak format dengan sumber data eksternal - untuk informasi selengkapnya, lihat paket Apache Spark.
Format terbaik untuk kinerja adalah parquet dengan kompresi snappy, yang merupakan default dalam Spark 2.x. Parquet menyimpan data dalam format kolom, dan sangat dioptimalkan di Spark.
Pilih abstraksi data
Versi Spark sebelumnya menggunakan RDD untuk mengabstraksi data, Spark 1.3, dan 1.6 yang masing-masing memperkenalkan DataFrames dan Himpunan Data. Pertimbangkan manfaat relatif berikut:
-
DataFrame
- Pilihan terbaik dalam sebagian besar situasi.
- Menyediakan pengoptimalan kueri melalui Catalyst.
- Pembuatan kode berbasis seluruh tahap.
- Akses memori langsung.
- Rendah overhead pengumpulan sampah (GC).
- Tidak ramah pengembang sebagai Himpunan Data, karena tidak ada pemeriksaan waktu kompilasi atau pemrograman objek domain.
-
DataSets
- Baik dalam alur ETL kompleks di mana dampak performa dapat diterima.
- Tidak baik dalam agregasi di mana dampak performa dapat cukup besar.
- Menyediakan pengoptimalan kueri melalui Catalyst.
- Ramah pengembang dengan menyediakan pemrograman objek domain dan pemeriksaan waktu kompilasi.
- Menambahkan overhead serialisasi/deserialisasi.
- Overhead GC tinggi.
- Menghentikan generasi kode seluruh tahap.
-
RDDs
- Anda tidak perlu menggunakan RDD, kecuali Anda perlu membangun RDD kustom baru.
- Tidak ada pengoptimalan kueri melalui Catalyst.
- Tidak ada pembuatan kode seluruh tahap.
- Overhead GC tinggi.
- Harus menggunakan API warisan Spark 1.x.
Pilih penyimpanan default
Saat membuat kluster Spark baru, Anda dapat memilih Azure Blob Storage atau Azure Data Lake Storage sebagai penyimpanan default kluster Anda. Kedua opsi memberi Anda manfaat penyimpanan jangka panjang untuk kluster sementara. Jadi data Anda tidak dihapus secara otomatis saat Anda menghapus kluster Anda. Anda dapat membuat ulang kluster sementara dan masih mengakses data Anda.
| Jenis Toko | Sistem Berkas | Kecepatan | Transient | Kasus Penggunaan |
|---|---|---|---|---|
| Azure Blob Storage | wasb://url/ | Standar | Yes | Kluster sementara |
| Azure Blob Storage (terjamin keamanannya) | wasbs://url/ | Standar | Yes | Kluster sementara |
| Azure Data Lake Storage Gen 2 | abfs://url/ | Cepat | Yes | Kluster sementara |
| Azure Data Lake Storage Gen 1 | adl://url/ | Cepat | Yes | Kluster sementara |
| HDFS Lokal | hdfs://url/ | tercepat | No | Kluster interaktif 24/7 |
Untuk deskripsi lengkap opsi penyimpanan, lihat Membandingkan opsi penyimpanan untuk digunakan dengan kluster Azure HDInsight.
Menggunakan cache
Spark menyediakan mekanisme penembolokan aslinya sendiri, yang dapat digunakan melalui metode yang berbeda seperti .persist(), .cache(), dan CACHE TABLE. Penyimpanan sementara ini efektif dengan himpunan data kecil dan dalam alur ETL di mana Anda perlu mencache hasil perantara. Namun, native caching Spark saat ini tidak berfungsi dengan baik dengan partisi, karena tabel yang di-cache tidak menyimpan data partisi. Teknik cache yang lebih umum dan andal adalah cache pada lapisan penyimpanan.
Penembolokan Spark asli (tidak disarankan)
- Baik untuk himpunan data kecil.
- Tidak berfungsi dengan pemartisian, yang dapat berubah dalam rilis Spark di masa mendatang.
Penembolokan tingkat penyimpanan (disarankan)
- Dapat diimplementasikan pada HDInsight menggunakan fitur IO Cache .
- Menggunakan caching dalam memori dan SSD.
HDFS lokal (disarankan)
-
hdfs://myclusterJalan. - Menggunakan caching SSD.
- Data yang di-cache akan hilang saat Anda menghapus kluster, memerlukan pembangunan kembali cache.
-
Mengoptimalkan serialisasi data
Pekerjaan Spark didistribusikan, jadi serialisasi data yang sesuai penting untuk performa terbaik. Ada dua opsi serialisasi untuk Spark:
- Serialisasi Java adalah default.
-
Kryoserialisasi adalah format yang lebih baru dan dapat menghasilkan serialisasi yang lebih cepat dan lebih ringkas daripada Java.Kryomengharuskan Anda mendaftarkan kelas dalam program Anda, dan belum mendukung semua tipe Serializable.
Menggunakan pengelompokan
Bucketing mirip dengan pemartisian data. Tetapi setiap wadah dapat menyimpan sekumpulan nilai kolom daripada hanya satu. Metode ini berfungsi dengan baik untuk pemartisian pada jumlah nilai besar (dalam jutaan atau lebih), seperti pengidentifikasi produk. Bucket ditentukan dengan melakukan hashing pada kunci bucket baris. Tabel bucket menawarkan pengoptimalan unik karena mereka menyimpan metadata tentang bagaimana tabel tersebut di-bucket dan diurutkan.
Beberapa fitur bucketing tingkat lanjut adalah:
- Pengoptimalan kueri berdasarkan meta-informasi pengelompokan.
- Agregasi yang dioptimalkan.
- Gabungan yang dioptimalkan.
Anda dapat menggunakan partisi dan bucketing secara bersamaan.