Avro vs. Parket

92

Saya berencana menggunakan salah satu format file hadoop untuk proyek terkait hadoop saya. Saya memahami parket efisien untuk kueri berbasis kolom dan avro untuk pemindaian penuh atau ketika kita membutuhkan semua data kolom!

Sebelum saya melanjutkan dan memilih salah satu format file, saya ingin memahami apa saja kekurangan / kekurangan salah satu dari yang lain. Adakah yang bisa menjelaskan kepada saya secara sederhana?

Abhishek
sumber

Jawaban:

53

Jika Anda belum memutuskan, saya akan melanjutkan dan menulis skema Avro untuk data Anda. Setelah selesai, memilih antara file kontainer Avro dan file Parquet semudah menukar, misalnya,

job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());

untuk

job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());

Format Parket tampaknya sedikit lebih intensif secara komputasi di sisi penulisan - misalnya, membutuhkan RAM untuk buffering dan CPU untuk memesan data, dll. Tetapi harus mengurangi I / O, biaya penyimpanan dan transfer serta membuatnya efisien membaca terutama dengan kueri seperti SQL (mis., Hive atau SparkSQL) yang hanya menangani sebagian kolom.

Dalam satu proyek, saya akhirnya kembali dari Parquet ke kontainer Avro karena skemanya terlalu luas dan bersarang (diturunkan dari beberapa kelas berorientasi objek yang cukup hierarkis) dan menghasilkan 1000-an kolom Parquet. Pada gilirannya, grup baris kami sangat lebar dan dangkal yang berarti butuh waktu lama sebelum kami dapat memproses sejumlah kecil baris di kolom terakhir setiap grup.

Saya belum memiliki banyak kesempatan untuk menggunakan Parquet untuk data yang lebih dinormalisasi / waras tetapi saya mengerti bahwa jika digunakan dengan baik, ini memungkinkan peningkatan kinerja yang signifikan.

kapal uap25
sumber
2
Parket mendukung kumpulan data / koleksi bertingkat juga.
Tagar
@Ruslan: Ya, itu secara teknis mendukung struktur bersarang. Masalahnya adalah jumlah kolom yang sangat tinggi karena de-normalisasi data yang ekstensif. Ini berhasil tetapi sangat lambat.
kapal uap25
4
Ya, menulis data di parket lebih mahal. Pembacaan adalah sebaliknya, terutama jika kueri Anda biasanya membaca subset kolom.
Tagar
4
Menurut saya Parket cocok untuk sebagian besar kasus penggunaan kecuali, data di kolom yang sama sangat bervariasi, dan selalu dianalisis di hampir semua kolom.
Rockie Yang
Apache Arrow juga belum mendukung penumpukan campuran (daftar dengan kamus atau kamus dengan daftar). Jadi jika Anda ingin bekerja dengan penumpukan kompleks di Parket, Anda terjebak dengan Spark, Hive, dll. Dan alat semacam itu yang tidak bergantung pada Panah untuk membaca dan menulis Parket.
Yosia
49

Avro adalah format berbasis Baris. Jika Anda ingin mengambil data secara keseluruhan Anda dapat menggunakan Avro

Parket adalah format berbasis Kolom. Jika data Anda terdiri dari banyak kolom tetapi Anda tertarik pada subset kolom, Anda dapat menggunakan Parket

HBase berguna ketika sering memperbarui data. Avro cepat dalam pengambilan, Parket jauh lebih cepat.

Aravind Krishnakumar
sumber
7
Harap perbaiki 2 kalimat terakhir Anda di paragraf terakhir. Mereka benar-benar tidak bisa dimengerti.
Cbhihe
39

Avro

  • Banyak digunakan sebagai platform serialisasi
  • Berbasis baris, menawarkan format biner yang ringkas dan cepat
  • Skema dikodekan pada file sehingga data dapat tidak diberi tag
  • File mendukung kompresi blok dan dapat dipisahkan
  • Mendukung evolusi skema

Parket

  • Format file biner berorientasi kolom
  • Menggunakan algoritma penghancuran dan perakitan rekaman yang dijelaskan dalam makalah Dremel
  • Setiap file data berisi nilai untuk satu set baris
  • Efisien dalam hal I / O disk ketika kolom tertentu perlu dipertanyakan

Dari Memilih format penyimpanan data HDFS- Avro vs. Parquet dan lainnya

secfree
sumber
30

Baik Avro dan Parquet adalah format penyimpanan yang "mendeskripsikan sendiri", yang berarti keduanya menyematkan data, informasi metadata, dan skema saat menyimpan data dalam file. Penggunaan salah satu format penyimpanan tergantung pada kasus penggunaan. Tiga aspek merupakan dasar di mana Anda dapat memilih format mana yang akan optimal dalam kasus Anda:

  1. Operasi Baca / Tulis : Parket adalah format file berbasis kolom. Ini mendukung pengindeksan. Oleh karena itu, kueri ini cocok untuk kueri data sekali tulis dan intensif baca, kompleks atau analitis, dengan latensi rendah. Ini biasanya digunakan oleh pengguna akhir / ilmuwan data.
    Sementara Avro, sebagai format file berbasis baris, paling baik digunakan untuk operasi intensif tulis. Ini biasanya digunakan oleh insinyur data. Keduanya mendukung format serialisasi dan kompresi, meskipun mereka melakukannya dengan cara yang berbeda.

  2. Alat : Parket sangat cocok untuk Impala. (Impala adalah mesin kueri SQL Massive Parallel Processing (MPP) RDBM yang tahu cara mengoperasikan data yang berada di satu atau beberapa mesin penyimpanan eksternal.) Sekali lagi Parquet cocok untuk kueri kompleks / interaktif dan cepat (latensi rendah ) mengeluarkan data dalam HDFS. Ini didukung oleh CDH (Cloudera Distribution Hadoop). Hadoop mendukung format Apache's Optimized Row Columnar (ORC) (pilihan bergantung pada distribusi Hadoop), sedangkan Avro paling cocok untuk pemrosesan Spark.

  3. Evolusi Skema : Mengembangkan skema DB berarti mengubah struktur DB, datanya, dan dengan demikian pemrosesan kuerinya.
    Baik Parquet dan Avro mendukung evolusi skema tetapi pada tingkat yang berbeda-beda.
    Parket bagus untuk operasi 'tambahkan', misalnya menambahkan kolom, tetapi tidak untuk mengganti nama kolom kecuali 'baca' dilakukan oleh indeks.
    Avro lebih cocok untuk menambahkan, menghapus dan umumnya mengubah kolom daripada Parquet. Secara historis, Avro telah memberikan serangkaian kemungkinan evolusi skema yang lebih kaya daripada Parquet, dan meskipun kemampuan evolusi skema mereka cenderung kabur, Avro masih bersinar di area itu, jika dibandingkan dengan Parquet.

Aakash Aggarwal
sumber
5
Bagian "Alat" agak menyesatkan. Parket secara efisien digunakan oleh banyak framework lain seperti Spark, Presto, Hive, dll. Avro tidak spesifik untuk Spark, ia banyak digunakan sebagai format penyimpanan HDFS dan skenario pengiriman pesan seperti di Kafka.
ᐅ devrimbaris
2
Aakash Aggarwal: Bisakah Anda menjelaskan apa yang Anda maksud di paragraf 2 dengan "Avro paling cocok untuk pemrosesan Spark"? Seperti yang disebutkan oleh devrimbaris, Parquet juga terintegrasi dengan sangat baik dalam lingkungan pemrosesan Spark. o_O?!?
Cbhihe
11

Pemahaman Anda benar. Faktanya, kami mengalami situasi serupa selama migrasi data di DWH kami. Kami memilih Parquet daripada Avro karena penghematan disk yang kami dapatkan hampir dua kali lipat daripada yang kami dapatkan dengan AVro. Selain itu, waktu pemrosesan kueri jauh lebih baik daripada Avro. Tapi ya, kueri kami didasarkan pada agregasi, operasi berbasis kolom, dll. Oleh karena itu, Parquet dapat diprediksi sebagai pemenang yang jelas.

Kami menggunakan Hive 0.12 dari distro CDH. Anda menyebutkan bahwa Anda mengalami masalah dengan Hive + Parquet, apa itu? Kami tidak menemukan satupun.

Silver Blaze
sumber
3

Silver Blaze memberikan deskripsi yang bagus dengan contoh kasus penggunaan dan menjelaskan bagaimana Parket adalah pilihan terbaik untuknya. Masuk akal untuk mempertimbangkan satu sama lain tergantung pada kebutuhan Anda. Saya juga memberikan deskripsi singkat tentang format file lain yang berbeda bersama dengan perbandingan kompleksitas ruang waktu. Semoga membantu.

Ada banyak format file yang dapat Anda gunakan di Hive. Sebutan penting adalah AVRO, Parket. RCFile & ORC. Ada beberapa dokumen bagus yang tersedia secara online yang dapat Anda rujuk jika Anda ingin membandingkan kinerja dan pemanfaatan ruang dari format file ini. Mengikuti beberapa tautan berguna yang akan membantu Anda melanjutkan.

Posting Blog ini

Tautan ini dari MapR [Mereka tidak membahas Parket]

Link ini dari Inquidia

Tautan yang diberikan di atas akan membantu Anda. Saya harap ini menjawab pertanyaan Anda.

Terima kasih!

Rahul
sumber
0

Sekadar penjelasan tentang Parket, Anda dapat merujuk di sini: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

Saya bermaksud untuk segera menulis di Avro dan perbandingan antara keduanya juga. Akan mempostingnya di sini setelah selesai.

Abhishek Jain
sumber
Menunggu perbandingan. Saat ini saya memilih Avro untuk proyek saya karena parket memiliki masalah kompatibilitas dengan sarang :)
Abhishek
1
@Abshinek, dapatkah Anda memberikan beberapa info tentang masalah kompatibilitas dengan sarang dan avro
EB
@EB Tidak boleh masalah apapun, jika ada, mereka akan disebutkan di cwiki.apache.org/confluence/display/Hive/AvroSerDe
OneCricketeer