Saya menjalankan beberapa tes pada format penyimpanan yang tersedia dengan Hive dan menggunakan Parquet dan ORC sebagai opsi utama. Saya memasukkan ORC sekali dengan kompresi default dan sekali dengan Snappy.
Saya telah membaca banyak dokumen yang menyatakan Parquet menjadi lebih baik dalam kompleksitas ruang / waktu dibandingkan dengan ORC tetapi pengujian saya berlawanan dengan dokumen yang saya lalui.
Mengikuti beberapa detail data saya.
Table A- Text File Format- 2.5GB
Table B - ORC - 652MB
Table C - ORC with Snappy - 802MB
Table D - Parquet - 1.9 GB
Parket adalah yang terburuk sejauh kompresi untuk meja saya diperhatikan.
Pengujian saya dengan tabel di atas menghasilkan hasil sebagai berikut.
Operasi penghitungan baris
Text Format Cumulative CPU - 123.33 sec
Parquet Format Cumulative CPU - 204.92 sec
ORC Format Cumulative CPU - 119.99 sec
ORC with SNAPPY Cumulative CPU - 107.05 sec
Jumlah operasi kolom
Text Format Cumulative CPU - 127.85 sec
Parquet Format Cumulative CPU - 255.2 sec
ORC Format Cumulative CPU - 120.48 sec
ORC with SNAPPY Cumulative CPU - 98.27 sec
Rata-rata operasi kolom
Text Format Cumulative CPU - 128.79 sec
Parquet Format Cumulative CPU - 211.73 sec
ORC Format Cumulative CPU - 165.5 sec
ORC with SNAPPY Cumulative CPU - 135.45 sec
Memilih 4 kolom dari rentang tertentu menggunakan klausa where
Text Format Cumulative CPU - 72.48 sec
Parquet Format Cumulative CPU - 136.4 sec
ORC Format Cumulative CPU - 96.63 sec
ORC with SNAPPY Cumulative CPU - 82.05 sec
Apakah itu berarti ORC lebih cepat dari Parquet? Atau ada sesuatu yang dapat saya lakukan untuk membuatnya bekerja lebih baik dengan waktu respons kueri dan rasio kompresi?
Terima kasih!
Jawaban:
Menurut saya, kedua format ini memiliki kelebihannya masing-masing.
Parket mungkin lebih baik jika Anda memiliki data yang sangat bertingkat, karena ia menyimpan elemennya sebagai pohon seperti yang dilakukan Google Dremel ( Lihat di sini ).
Apache ORC mungkin lebih baik jika struktur file Anda diratakan.
Dan sejauh yang saya tahu parket belum mendukung Indeks. ORC hadir dengan Indeks berbobot ringan dan sejak Sarang 0,14, Bloom Filter tambahan yang mungkin membantu waktu respons kueri yang lebih baik terutama ketika menyangkut operasi penjumlahan.
Kompresi default Parquet adalah SNAPPY. Apakah Tabel A - B - C dan D memiliki Set Data yang sama? Jika ya, sepertinya ada sesuatu yang mencurigakan tentangnya, ketika itu hanya dikompres menjadi 1,9 GB
sumber
Anda melihat ini karena:
Sarang memiliki pembaca ORC vektor tetapi tidak ada pembaca parket vektor.
Spark memiliki pembaca parket vektor dan tidak ada pembaca ORC vektor.
Spark berkinerja terbaik dengan parket, sarang berkinerja terbaik dengan ORC.
Saya telah melihat perbedaan serupa saat menjalankan ORC dan Parquet dengan Spark.
Vektorisasi berarti bahwa baris didekodekan dalam batch, secara dramatis meningkatkan lokalitas memori dan pemanfaatan cache.
(benar pada Hive 2.0 dan Spark 2.1)
sumber
Baik Parket maupun ORC memiliki kelebihan dan kekurangan masing-masing. Tapi saya hanya mencoba untuk mengikuti aturan praktis sederhana - "Bagaimana data Anda bersarang dan berapa banyak kolom yang ada" . Jika Anda mengikuti Google Dremel Anda dapat menemukan bagaimana parket dirancang. Mereka menggunakan struktur seperti pohon hierarki untuk menyimpan data. Lebih banyak sarang di dalam pohon.
Tetapi ORC dirancang untuk penyimpanan file yang diratakan. Jadi jika Data Anda diratakan dengan lebih sedikit kolom, Anda dapat menggunakan ORC, jika tidak, parket akan baik-baik saja untuk Anda. Kompresi pada Data yang diratakan bekerja dengan luar biasa di ORC.
Kami melakukan beberapa benchmarking dengan file pipih yang lebih besar, mengubahnya menjadi spark Dataframe dan menyimpannya dalam format parket dan ORC di S3 dan melakukan kueri dengan ** Redshift-Spectrum **.
Segera kami akan melakukan beberapa benchmarking untuk Data bersarang dan memperbarui hasilnya di sini.
sumber
Kami melakukan beberapa benchmark yang membandingkan format file yang berbeda (Avro, JSON, ORC, dan Parquet) dalam kasus penggunaan yang berbeda.
https://www.slideshare.net/oom65/file-format-benchmarks-avro-json-orc-parquet
Semua data tersedia untuk umum dan kode tolok ukur semuanya open source di:
https://github.com/apache/orc/tree/branch-1.4/java/bench
sumber
Keduanya memiliki kelebihan. Kami menggunakan Parquet saat bekerja bersama dengan Hive dan Impala, tetapi hanya ingin menunjukkan beberapa keuntungan ORC dibandingkan Parquet: selama kueri yang dijalankan lama, saat kueri Hive tabel ORC GC dipanggil sekitar 10 kali lebih jarang . Mungkin bukan apa-apa untuk banyak proyek, tetapi mungkin penting untuk proyek lainnya.
ORC juga membutuhkan lebih sedikit waktu, ketika Anda hanya perlu memilih beberapa kolom dari tabel. Beberapa kueri lain, terutama dengan gabungan, juga membutuhkan waktu lebih sedikit karena eksekusi kueri vektor, yang tidak tersedia untuk Parquet
Selain itu, kompresi ORC terkadang sedikit acak, sedangkan kompresi Parket jauh lebih konsisten. Sepertinya tabel ORC memiliki banyak kolom angka - tabel ini juga tidak dapat dikompres. Ini mempengaruhi kompresi zlib dan tajam
sumber