Avro ve Parke


92

Hadoop ile ilgili projem için hadoop dosya formatlarından birini kullanmayı planlıyorum. Parkenin sütun tabanlı sorgulama için ve tam tarama için veya tüm sütun verilerine ihtiyacımız olduğunda avro için verimli olduğunu anlıyorum !

Devam etmeden ve dosya formatlarından birini seçmeden önce, birinin diğerine göre dezavantajlarının / dezavantajlarının neler olduğunu anlamak istiyorum. Bunu bana basit terimlerle açıklayan var mı?

Yanıtlar:


53

Henüz karar vermediyseniz, devam edip verileriniz için Avro şemaları yazardım. Tamamlandıktan sonra, Avro konteyner dosyaları ve Parquet dosyaları arasında seçim yapmak, değiştirmek kadar basittir; örneğin,

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

için

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

Parquet formatı, yazma tarafında biraz daha hesaplama açısından yoğun görünmektedir - örneğin, arabelleğe alma için RAM ve verileri sipariş etmek için CPU gerektirir, ancak G / Ç, depolama ve aktarım maliyetlerini azaltmalı ve verimli hale getirmelidir. özellikle sütunların yalnızca bir bölümünü ele alan SQL benzeri (örneğin, Hive veya SparkSQL) sorgularla okur.

Bir projede, şema çok kapsamlı ve iç içe (oldukça hiyerarşik bazı nesne yönelimli sınıflardan türetilmiş) ve 1000'lerce Parke sütunuyla sonuçlandığı için Parquet'ten Avro konteynerlerine geri döndüm. Buna karşılık, satır gruplarımız gerçekten geniş ve sığdı, bu da her grubun son sütunundaki az sayıda satırı işlemeden önce sonsuza kadar sürdüğü anlamına geliyordu.

Daha normalize / mantıklı veriler için henüz Parquet kullanma şansım olmadı, ancak iyi kullanıldığında önemli performans iyileştirmelerine izin verdiğini anlıyorum.


2
Parquet, iç içe geçmiş veri kümelerini / koleksiyonları da destekler.
Tagar

@Ruslan: Evet, iç içe geçmiş yapıları teknik olarak destekledi. Sorun, verilerin kapsamlı bir şekilde normalleştirilmesinden kaynaklanan çok yüksek sütun sayısıydı. İşe yaradı ama çok yavaştı.
steamer25

4
Evet, parkeye veri yazmak daha pahalıdır. Okumalar, özellikle sorgularınız normalde bir sütun alt kümesini okuyorsa, tam tersidir.
Tagar

4
Bence Parquet, aynı sütundaki veriler çok farklılık gösterir ve hemen hemen tüm sütunlarda her zaman analiz edilir dışında çoğu kullanım durumu için uygundur.
Rockie Yang

Apache Arrow, karma yerleştirmeyi de desteklemiyor (sözlük içeren listeler veya listeler içeren sözlükler). Dolayısıyla, Parquet'te karmaşık yerleştirme ile çalışmak istiyorsanız, Spark, Hive vb. Ve Parke okumak ve yazmak için Arrow'a güvenmeyen bu tür araçlara takılı kalırsınız.
josiah

49

Avro, Satır tabanlı bir formattır. Verileri bir bütün olarak almak istiyorsanız, Avro'yu kullanabilirsiniz.

Parke, Sütun tabanlı bir formattır. Verileriniz çok sayıda sütundan oluşuyorsa ancak bir sütun alt kümesiyle ilgileniyorsanız, Parquet'i kullanabilirsiniz.

HBase, verilerin sık sık güncellenmesi söz konusu olduğunda yararlıdır. Avro geri çağırmada hızlı, Parquet çok daha hızlı.


7
Lütfen son paragrafta son 2 cümlenizi düzeltin. Düpedüz anlaşılmazlar.
Cbhihe

39

Avro

  • Yaygın olarak bir serileştirme platformu olarak kullanılır
  • Satır tabanlı, kompakt ve hızlı bir ikili format sunar
  • Şema dosyada kodlanmıştır, böylece veriler etiketlenmemiş olabilir
  • Dosyalar blok sıkıştırmayı destekler ve bölünebilir
  • Şema gelişimini destekler

Parke

  • Sütun odaklı ikili dosya biçimi
  • Dremel kağıdında açıklanan kayıt parçalama ve montaj algoritmasını kullanır
  • Her veri dosyası bir dizi satırın değerlerini içerir
  • Belirli sütunların sorgulanması gerektiğinde disk G / Ç açısından verimli

Gönderen bir HDF'ler veri depolama Format- Avro vs Parke ve daha Seçimi


30

Hem Avro hem de Parquet, "kendi kendini tanımlayan" depolama formatlarıdır, yani verileri bir dosyada depolarken hem verileri hem meta veri bilgilerini hem de şemayı katıştırır. Her iki depolama biçiminin kullanımı kullanım durumuna bağlıdır. Sizin durumunuzda hangi formatın en uygun olacağını seçebileceğiniz temeli üç husus oluşturur:

  1. Okuma / Yazma işlemi : Parquet, sütun tabanlı bir dosya formatıdır. İndekslemeyi destekler. Bu nedenle, bir kez yazma ve okuma yoğun, karmaşık veya analitik sorgulama, düşük gecikmeli veri sorguları için uygundur. Bu genellikle son kullanıcılar / veri bilimcileri tarafından kullanılır.
    Bu arada, satır tabanlı bir dosya formatı olan Avro, en iyi yazma yoğun işlemler için kullanılır. Bu genellikle veri mühendisleri tarafından kullanılır. Her ikisi de farklı şekillerde yapsalar da serileştirme ve sıkıştırma formatlarını destekler.

  2. Araçlar : Parke, Impala için çok uygundur. (Impala, bir veya birkaç harici depolama motorunda bulunan veriler üzerinde nasıl çalışılacağını bilen bir Massive Parallel Processing (MPP) RDBM SQL sorgu motorudur.) Yine Parquet, karmaşık / etkileşimli sorgulama ve hızlı (düşük gecikme süresi) ) HDFS'de veri üzerinden çıktı verir. Bu, CDH (Cloudera Distribution Hadoop) tarafından desteklenmektedir. Hadoop, Apache'nin Optimize Edilmiş Sütun Sütun (ORC) formatlarını destekler (seçimler Hadoop dağıtımına bağlıdır), Avro ise Spark işleme için en uygunudur.

  3. Şema Evrimi : Bir DB şemasını geliştirmek, DB'nin yapısını, dolayısıyla verilerini ve dolayısıyla sorgu işlemesini değiştirmek anlamına gelir.
    Hem Parquet hem de Avro, şema evrimini farklı derecelerde destekler.
    Parquet, örneğin sütun eklemek gibi "ekleme" işlemleri için iyidir, ancak dizin tarafından "okuma" yapılmadıkça sütunları yeniden adlandırmak için uygun değildir.
    Avro, Sütunları eklemek, silmek ve genellikle değiştirmek için Parquet'e göre daha uygundur. Tarihsel olarak Avro, Parquet'e göre daha zengin bir şema evrimi olanakları sağlamıştır ve şema evrim yetenekleri bulanıklaşma eğiliminde olmasına rağmen, Avro, Parquet ile karşılaştırıldığında bu alanda hala parlamaktadır.


5
"Araçlar" kısmı biraz yanıltıcıdır. Parquet, Spark, Presto, Hive vb. Gibi diğer birçok çerçeve tarafından verimli bir şekilde kullanılır. Avro, Spark'a özgü değildir, Kafka'da olduğu gibi bir HDFS depolama formatı ve mesaj geçirme senaryoları olarak yaygın olarak kullanılmaktadır.
ᐅ devrimbaris

2
Aakash Aggarwal: 2. paragrafta ne demek istediğinizi "Avro, Spark işleme için en uygunudur" ile açıklayabilir misiniz? Devrimbaris'in bahsettiği gibi, Parke Spark işleme ortamına da çok iyi entegre edilmiştir. o_O?!?
Cbhihe

11

Anlayışınız doğru. Hatta DWH'mizde veri geçişi sırasında benzer bir durumla karşılaştık. Elimizdeki disk tasarrufu AVro ile elde ettiğimizin neredeyse iki katı olduğu için Avro yerine Parquet'i seçtik. Ayrıca, sorgu işleme süresi Avro'dan çok daha iyiydi. Ancak evet, sorgularımız toplama, sütun tabanlı işlemler vb. Temelliydi, bu nedenle Parke tahmin edilebileceği gibi açık bir kazanan oldu.

CDH dağıtımından Hive 0.12 kullanıyoruz. Hive + Parquet ile ilgili sorunlar yaşadığınızı söylediniz, bunlar nedir? Hiç karşılaşmadık.


3

Silver Blaze, örnek bir kullanım durumu ile güzel bir açıklama yaptı ve Parke'nin kendisi için en iyi seçim olduğunu açıkladı. Gereksinimlerinize bağlı olarak birini diğerinin üzerinde düşünmek mantıklıdır. Zaman uzayı karmaşıklığı karşılaştırması ile birlikte farklı diğer dosya formatlarının kısa bir açıklamasını da yapıyorum. Umarım yardımcı olur.

Hive'da kullanabileceğiniz birçok dosya biçimi vardır. Dikkate değer sözler AVRO, Parquet'dir. RCFile ve ORC. Bu dosya biçimlerinin performansını ve alan kullanımını karşılaştırmak isterseniz başvurabileceğiniz çevrimiçi olarak kullanabileceğiniz bazı iyi belgeler vardır. Sizi harekete geçirecek bazı yararlı bağlantıları takip eder.

Bu Blog Yazısı

MapR'den gelen bu bağlantı [Yine de Parke konusunu tartışmıyorlar]

Inquidia'dan bu bağlantı

Yukarıda verilen bağlantılar sizi harekete geçirecek. Umarım bu, sorgunuza cevap verir.

Teşekkürler!


0

Sadece Parke hakkında bir açıklama için, buraya bakabilirsiniz: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

Çok yakında Avro ve 2 arasında bir karşılaştırma yazmayı planlıyorum. Bittiğinde buraya gönderecek.


Karşılaştırmayı bekliyorum. Parkenin kovanla uyum sorunları olduğu için şu anda projem için Avro'yu seçtim :)
Abhishek

1
@Abshinek, hive ve avro ile uyumluluk sorunları hakkında biraz bilgi verebilir misiniz
EB

@EB Herhangi bir sorun olmamalı, varsa cwiki.apache.org/confluence/display/Hive/AvroSerDe
OneCricketeer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.