Diterbitkan: 26 Februari 2024
Kontributor: Dave Bergmann
Apache Iceberg adalah format sumber terbuka berkinerja tinggi untuk tabel analitik besar, memfasilitasi penggunaan tabel SQL untuk big data dan integrasi yang aman dari tabel tersebut dengan mesin seperti Apache Spark, Trino, Flink, Presto, Hive, dan Impala.
Selain spesifikasi format tabel terbuka, Iceberg juga terdiri atas seperangkat API dan pustaka yang memungkinkan mesin penyimpanan, mesin kueri, dan mesin eksekusi untuk berinteraksi dengan lancar dengan tabel yang mengikuti format tersebut.
Format tabel Iceberg telah menjadi bagian integral dari ekosistem big data, sebagian besar karena kemampuannya untuk menyediakan fungsi yang biasanya tidak tersedia dengan format tabel lainnya. Menggunakan sejumlah metadata yang disimpan di setiap tabel, Iceberg memungkinkan evolusi skema, evolusi partisi, dan rollback versi tabel tanpa perlu penulisan ulang tabel atau migrasi tabel yang mahal. Ini sepenuhnya agnostik sistem penyimpanan, dengan dukungan untuk beberapa sumber data dan tanpa dependensi sistem file.
Awalnya dibuat oleh para insinyur data di Netflix dan Apple pada tahun 2017 untuk mengatasi kekurangan Apache Hive, Iceberg dibuat sebagai sumber terbuka dan disumbangkan ke Apache Software Foundation pada tahun berikutnya. Ini menjadi proyek Apache tingkat atas pada tahun 2020.
Kecepatan, efisiensi, keandalan, dan keramahan pengguna Apache Iceberg secara keseluruhan membantu menyederhanakan dan mengoordinasikan pemrosesan data dalam skala apa pun. Kekuatan ini telah menjadikannya format tabel pilihan untuk sejumlah gudang data, data lake dan data lakehouse terkemuka, termasuk IBM watsonx.data, Netezza dan Db2 warehouse.
Iceberg adalah salah satu dari beberapa format tabel sumber terbuka yang memungkinkan transaksi ACID: pertukaran data yang menjaga keakuratan dengan menjamin atomisitas, konsistensi, isolasi, dan daya tahan.
Awalnya, Iceberg merupakan upaya untuk mengatasi keterbatasan praktis tabel Apache Hive di lingkungan datalake yang besar. Menurut Ryan Blue, Ketua PMC proyek Apache Iceberg dan (sebelumnya) insinyur senior di Netflix, “banyak layanan dan mesin yang berbeda menggunakan tabel Hive. Tapi masalahnya adalah, kami tidak memiliki jaminan kebenaran itu. Kami tidak memiliki transaksi atom,” katanya dalam sebuah konferensi tahun 2021. “Terkadang perubahan dari satu sistem menyebabkan sistem lain mendapatkan data yang salah dan masalah semacam itu menyebabkan kami tidak pernah menggunakan layanan ini, tidak melakukan perubahan pada tabel kami, hanya untuk berjaga-jaga.”1
Apache Hive sendiri berasal sebagai sarana untuk membuat kluster Apache Hadoop beroperasi mirip dengan basis data relasional yang dapat diakses SQL. Meskipun bekerja secara efektif untuk data statis, namun kurang beradaptasi dengan perubahan dataset: perubahan harus dikoordinasikan secara manual di berbagai aplikasi dan pengguna, atau berisiko menimbulkan kerusakan dan ketidakakuratan pada kumpulan data yang besar.
Untuk menjamin akurasi dalam lingkungan yang dinamis, Iceberg dirancang untuk memastikan bahwa setiap transaksi data menunjukkan keempat sifat ACID:
Semua perubahan pada data dilakukan seolah-olah merupakan operasi tunggal—yaitu, semua perubahan dieksekusi, atau tidak ada yang dieksekusi. Misalnya, dalam transaksi data keuangan, atomisitas memastikan bahwa setiap debit yang dilakukan dari satu akun memiliki kredit yang sesuai yang dibuat ke akun lainnya.
Tidak ada kontradiksi antara status data keseluruhan sebelum transaksi dan status data setelah transaksi. Melanjutkan contoh transaksi keuangan, konsistensi memastikan bahwa dana gabungan yang ada antara kedua rekening adalah sama setelah transaksi sebelum transaksi.
Status perantara dari setiap transaksi tidak terlihat oleh transaksi lainnya; transaksi konkuren—transaksi yang beroperasi secara bersamaan pada kumpulan data yang sama—diperlakukan seolah-olah transaksi tersebut diserialisasikan. Dalam transaksi keuangan ini, isolasi memastikan bahwa transaksi lain dapat melihat dana yang ditransfer di akun yang didebit atau di akun yang dikredit, tetapi tidak di keduanya (atau tidak juga di keduanya).
Setelah transaksi berhasil, perubahan data apa pun akan tetap ada bahkan jika terjadi kegagalan sistem. Dalam contoh keuangan kami, ini berarti bahwa transaksi akan tetap selesai bahkan jika ada pemadaman listrik di seluruh sistem tidak lama setelah itu.
Format tabel Apache Iceberg sering dibandingkan dengan dua teknologi data sumber terbuka lainnya yang menawarkan transaksi ACID: Delta Lake, lapisan penyimpanan yang dioptimalkan yang awalnya dibuat oleh Databricks yang memperluas file data Parquet dengan log transaksi berbasis file dan penanganan metadata yang dapat diskalakan, dan Apache Hudi—singkatandari “Hadoop Upserts Deletes and Incrementals”—yang pada awalnya dikembangkan oleh Uber pada tahun 2016.
Sebuah studi tahun 2022 yang dilakukan oleh Synvert menghasilkan data acak dan menyimpannya dalam format JSON dalam bucket AWS S3 untuk digunakan untuk membandingkan ketiga teknologi tersebut. Pengujian teknologi ini pada akhirnya menunjukkan bahwa format tabel yang dioptimalkan dari Iceberg menghasilkan kinerja yang lebih unggul daripada Delta Lake dan Apache Hudi di semua metrik yang diuji.2
Penyimpanan: Ukuran file yang dihasilkan dari tabel Iceberg secara signifikan lebih kecil daripada Delta Lake atau Hudi, yang memberikan keuntungan besar untuk pengoptimalan penyimpanan.
Operasi penyisipan: Untuk operasi penyisipan, Iceberg juga memiliki kinerja tercepat—yaitu, waktu proses terpendek. Both Iceberg dan Delta Lake secara signifikan lebih cepat dibandingkan Hudi.
Operasi pembaruan: Untuk operasi pembaruan, Iceberg secara drastis lebih cepat dibandingkan Delta Lake dan Hudi. Khususnya, tidak seperti rekan-rekannya, waktu proses Iceberg tidak meningkat secara signifikan dengan jumlah total rekaman: pada beban kerja maksimum yang diuji dalam penelitian—500 juta rekaman—Iceberg hampir 10 kali lebih cepat daripada Delta Lake.
Operasi pemindahan: Demikian pula, Iceberg beberapa kali lebih cepat dibandingkan kedua alternatif pada operasi pemindahan.
Iceberg mengimplementasikan hierarki tiga lapis file metadata untuk memastikan ketepatan dan koordinasi data tabel di berbagai format file dan perubahan yang konstan.
Ditulis dalam Java dan Python dan juga ditawarkan pada Scala API, Iceberg mendukung berbagai format file big data, termasuk Apache Parquet, Apache Avro, dan Apache ORC. Solusi ini menawarkan fungsionalitas yang mirip dengan tabel SQL dalam basis data tradisional dengan cara format-agnostik dan vendor-agnostik, memungkinkan beberapa mesin untuk beroperasi pada kumpulan data yang sama.
Arsitektur tabel Iceberg terdiri atas tiga lapisan: katalog Iceberg, lapisan metadata, dan lapisan data.
Katalog Iceberg itu sendiri berada di atas lapisan metadata dan data kemudian, seperti puncak gunung es yang berada di atas permukaan air. Katalog ini menyimpan petunjuk metadata terbaru (atau “saat ini”) yang memetakan nama tabel yang diberikan ke lokasi file metadata saat ini. Selain katalog bawaannya, Iceberg mendukung kerangka kerja katalog lain seperti Hive MetaStore atau AWS Glue.
Operasi di tingkat katalog Iceberg sangat penting, karena langkah ini sangat penting untuk memastikan kebenaran transaksi yang sedang berjalan.
Mesin kueri dengan demikian memulai kueri SELECT di katalog Iceberg, yang menyediakan lokasi file metadata saat ini untuk tabel yang ingin dibaca oleh mesin kueri.
Lapisan metadata gunung es terdiri—dalam urutan menurun—file metadata, daftar manifes, dan file manifes.
File metadata
File metadata menyimpan metadata suatu tabel, termasuk skema tabel, informasi partisi, cuplikan tabel saat ini, dan cuplikan status sebelumnya. Setelah diarahkan ke file metadata saat ini dari entri tabel di katalog Iceberg, mesin kueri menggunakan nilai[current-snapshot-id] untuk menemukan entri tersebut di rangkaian[snapshots]. Dari sana, solusi ini dapat menemukan dan membuka daftar manifes tabel.
Daftar manifes
Daftar manifes hanyalah daftar file manifes dan informasi penting untuk setiap file data di dalamnya, seperti lokasinya, snapshot yang terkait dengannya, dan partisi yang dimilikinya. Optimasi dan fungsi penyaringan tertentu tersedia pada tahap ini.
File manifes
File manifes melacak file data dan detail, metadata, dan statistik terkait. Solusi ini mendorong salah satu keunggulan mendasar dari format tabel Iceberg dibandingkan format tabel Hive: kemampuannya untuk melacak data pada tingkat file. Pada tahap ini, nilai [file-path] untuk setiap objek [data-file] dapat digunakan untuk menemukan dan membuka file tersebut.
Lapisan data, seperti namanya, berada di bawah lapisan metadata dan berisi file utama itu sendiri.
Apache Iceberg menawarkan sejumlah fitur bermanfaat untuk meningkatkan dan menyederhanakan manajemen data.
Partisi tersembunyi
Iceberg menangani semua detail partisi dan kueri yang tersembunyi. Partisi tersembunyi Iceberg menghemat pekerjaan pengguna untuk menyediakan informasi tata letak partisi saat menanyakan tabel. Pengguna tidak perlu memelihara kolom partisi sendiri, atau bahkan memahami tata letak tabel fisik, untuk mendapatkan hasil kueri yang akurat.
Hal ini tidak hanya membuat partisi Iceberg menjadi sangat mudah digunakan—tetapi juga memungkinkan tata letak partisi diubah dari waktu ke waktu tanpa merusak kueri yang telah ditulis sebelumnya. Ketika spesifikasi partisi berkembang, data dalam tabel (dan metadatanya) tidak terpengaruh. Hanya data baru, yang ditulis ke tabel setelah evolusi, yang dipartisi dengan spesifikasi baru, dan metadata untuk data baru ini disimpan secara terpisah.
Evolusi skema
Iceberg memberikan dukungan asli untuk evolusi skema. Hal ini memungkinkan pengguna untuk memodifikasi skema tabel tanpa perlu migrasi data yang rumit, sehingga sangat menyederhanakan adaptasi terhadap struktur data yang terus berkembang.
Perjalanan waktu
Iceberg memungkinkan pengguna untuk melakukan perjalanan waktu kembali melalui cuplikan data Iceberg di berbagai titik waktu. Ini berharga untuk berbagai contoh penggunaan, termasuk audit, debugging, dan pemeriksaan kepatuhan.
Pemadatan dan penyaringan data
Iceberg menawarkan sejumlah kemampuan pengindeksan yang membantu mengoptimalkan kinerja kueri, seperti opsi pemadatan untuk menggabungkan file yang lebih kecil menjadi file yang lebih besar guna mengurangi overhead metadata dan filter Bloom untuk mengurangi pembacaan data yang tidak perlu selama eksekusi kueri.
Akses data Anda dan optimalkan beban kerja yang mahal dengan watsonx.data, penyimpanan data sesuai tujuan yang dibangun di atas arsitektur data lakehouse terbuka untuk menskalakan beban kerja AI, untuk semua data Anda, di mana saja.
Jalankan analitik misi yang sangat penting dan beban kerja AI dengan semua jenis data, di mana saja: IBM Db2 Warehouse memenuhi tujuan harga dan kinerja Anda untuk beban kerja yang selalu aktif, menyediakan akses sederhana dan terkendali ke semua data Anda dan menghilangkan silo data Anda di hybrid cloud.
Skalakan analitik dan AI dengan gudang data cloud yang terpadu, terkendali, dan hemat biaya. Dengan dukungan untuk format terbuka seperti Parquet dan Apache Iceberg, ditambah integrasi asli dengan data lake Anda dan IBM watsonx.data lakehouse, Netezza memberdayakan insinyur data, ilmuwan data, dan analis data untuk menjalankan beban kerja yang kompleks tanpa ETL tambahan atau pergerakan data melalui cloud object storage.
Memberdayakan aplikasi, analitik, dan AI Anda dengan data apa pun dalam data lakehouse terbuka. Tidak seperti data warehouse tradisional, data lakehouse dapat memproses video, audio, log, teks, media sosial, data sensor, dan dokumen untuk memberi daya pada aplikasi, analitik, dan AI. Mereka dapat dibangun sebagai bagian dari arsitektur struktur data guna menyediakan data yang tepat, pada waktu yang tepat, di mana pun data itu berada.
Semua tautan berada di luar ibm.com.
1 "Apache Iceberg: Pusat dari Ekosistem Layanan Data yang Sedang Berkembang?" (tautan berada di luar ibm.com), Datanami, 8 Februari 2021
2 "Benturan Data Lake ACID: Membandingkan Format Data Lakehouse" (tautan berada di luar ibm.com), Data Insights, 9 Agustus 2022