Avro vs. Parquet


92

Planuję użyć jednego z formatów pliku hadoop dla mojego projektu związanego z hadoopem. Rozumiem, że parkiet jest skuteczny w przypadku zapytań opartych na kolumnach i avro dla pełnego skanowania lub gdy potrzebujemy wszystkich danych z kolumn!

Zanim przejdę dalej i wybiorę jeden z formatów plików, chcę zrozumieć, jakie są wady / wady jednego z nich. Czy ktoś może mi to wyjaśnić w prostych słowach?

Odpowiedzi:


53

Jeśli jeszcze nie zdecydowałeś, napiszę schematy Avro dla twoich danych. Gdy to zrobisz, wybór między plikami kontenerów Avro i plikami Parquet jest tak prosty, jak wymiana, np.

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

dla

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

Wydaje się, że format Parquet wymaga nieco większej mocy obliczeniowej po stronie zapisu - np. Wymaga pamięci RAM do buforowania i procesora do zamawiania danych itp., Ale powinien zmniejszyć koszty we / wy, przechowywania i transferu, a także zapewnić wydajne czyta szczególnie w przypadku zapytań podobnych do SQL (np. Hive lub SparkSQL), które dotyczą tylko części kolumn.

W jednym projekcie w końcu powróciłem z kontenerów Parquet do Avro, ponieważ schemat był zbyt obszerny i zagnieżdżony (pochodzący z pewnych dość hierarchicznych klas obiektowych) i zaowocował tysiącami kolumn Parquet. Z kolei nasze grupy wierszy były naprawdę szerokie i płytkie, co oznaczało, że zajęło nam to wieki, zanim mogliśmy przetworzyć niewielką liczbę wierszy w ostatniej kolumnie każdej grupy.

Nie miałem jeszcze okazji używać Parquet do bardziej znormalizowanych / rozsądnych danych, ale rozumiem, że jeśli jest dobrze używany, pozwala na znaczną poprawę wydajności.


2
Parquet obsługuje również zagnieżdżone zestawy danych / kolekcje.
Tagar

@Ruslan: Tak, technicznie obsługiwał zagnieżdżone struktury. Problemem była bardzo duża liczba kolumn wynikająca z rozległej dekormalizacji danych. Działało, ale było bardzo wolne.
parowiec 25

4
Tak, zapis danych w parkiecie jest droższy. Odczyty są odwrotne, zwłaszcza jeśli zapytania normalnie odczytują podzbiór kolumn.
Tagar

4
Myślę, że Parquet jest odpowiedni dla większości przypadków użycia, z wyjątkiem tego, że dane w tej samej kolumnie są bardzo różne i zawsze analizowane w prawie wszystkich kolumnach.
Rockie Yang

Apache Arrow również nie obsługuje jeszcze zagnieżdżania mieszanego (listy ze słownikami lub słowniki z listami). Więc jeśli chcesz pracować ze złożonym zagnieżdżaniem w Parquet, utkniesz w Spark, Hive itp. I takich narzędziach, które nie polegają na Arrow do czytania i pisania Parquet.
jozja

49

Avro to format oparty na wierszach. Jeśli chcesz odzyskać dane jako całość, możesz użyć Avro

Parkiet to format oparty na kolumnach. Jeśli Twoje dane składają się z wielu kolumn, ale interesuje Cię podzbiór kolumn, możesz użyć Parquet

HBase jest przydatna w przypadku częstych aktualizacji danych. Avro jest szybki w wyszukiwaniu, Parquet jest znacznie szybszy.


7
Popraw 2 ostatnie zdania w ostatnim akapicie. Są wręcz niezrozumiałe.
Cbhihe,

39

Avro

  • Szeroko stosowany jako platforma serializacji
  • Oparty na wierszach, oferuje kompaktowy i szybki format binarny
  • Schemat jest zakodowany w pliku, więc dane mogą być nieoznaczone
  • Pliki obsługują kompresję blokową i można je podzielić
  • Obsługuje ewolucję schematu

Parkiet

  • Binarny format pliku zorientowany na kolumny
  • Używa algorytmu niszczenia i składania rekordów opisanego w artykule Dremel
  • Każdy plik danych zawiera wartości dla zestawu wierszy
  • Wydajne pod względem dyskowych operacji we / wy, gdy trzeba odpytać określone kolumny

Od wyboru formatu przechowywania danych HDFS - Avro vs. Parquet i nie tylko


30

Zarówno Avro, jak i Parquet to „samoopisujące się” formaty przechowywania, co oznacza, że ​​podczas przechowywania danych w pliku osadzają dane, informacje o metadanych i schemat. Użycie któregokolwiek z formatów przechowywania zależy od przypadku użycia. Trzy aspekty stanowią podstawę, na której możesz wybrać, który format będzie optymalny w Twoim przypadku:

  1. Operacja odczytu / zapisu : Parquet to format pliku oparty na kolumnach. Obsługuje indeksowanie. Z tego powodu nadaje się do jednokrotnego zapisu i intensywnego odczytu, złożonych lub analitycznych zapytań, zapytań o dane o małych opóźnieniach. Jest to zwykle używane przez użytkowników końcowych / naukowców zajmujących się danymi.
    Tymczasem Avro, jako format pliku oparty na wierszach, najlepiej nadaje się do operacji intensywnego zapisu. Jest to zwykle używane przez inżynierów danych. Oba obsługują formaty serializacji i kompresji, chociaż robią to na różne sposoby.

  2. Narzędzia : Parkiet dobrze pasuje do Impali. (Impala to silnik zapytań SQL RDBM typu Massive Parallel Processing (MPP), który wie, jak operować na danych znajdujących się w jednym lub kilku zewnętrznych silnikach pamięci masowej). ) przesyła dane w formacie HDFS. Jest to obsługiwane przez CDH (Cloudera Distribution Hadoop). Hadoop obsługuje formaty Apache Optimized Row Columnar (ORC) (wybór zależy od dystrybucji Hadoop), podczas gdy Avro najlepiej nadaje się do przetwarzania Spark.

  3. Ewolucja schematu : Ewolucja schematu bazy danych oznacza zmianę struktury bazy danych, a tym samym jej danych, a tym samym przetwarzania zapytań.
    Zarówno Parquet, jak i Avro obsługują ewolucję schematu, ale w różnym stopniu.
    Parkiet jest dobry do operacji „dołączania”, np. Dodawania kolumn, ale nie do zmiany nazw kolumn, chyba że „odczyt” jest wykonywany przez indeks.
    Avro lepiej nadaje się do dołączania, usuwania i generalnie mutowania kolumn niż Parquet. Z historycznego punktu widzenia Avro dostarczyło bogatszy zestaw możliwości ewolucji schematu niż Parquet i chociaż ich możliwości ewolucji schematów mają tendencję do rozmywania się, Avro nadal świeci w tym obszarze, w porównaniu z Parkietem.


5
Część „Narzędzia” jest nieco myląca. Parquet jest efektywnie używany przez wiele innych frameworków, takich jak Spark, Presto, Hive itp. Avro nie jest specyficzne dla Spark, jest szeroko stosowane jako format przechowywania HDFS i scenariusze przekazywania wiadomości, takie jak Kafka.
ᐅ devrimbaris,

2
Aakash Aggarwal: Czy możesz wyjaśnić, co masz na myśli w akapicie 2, mówiąc: „Avro najlepiej nadaje się do przetwarzania Spark”? Jak wspomniał devrimbaris, Parquet jest również bardzo dobrze zintegrowany ze środowiskiem przetwarzania Spark. o_O?!?
Cbhihe,

11

Twoje zrozumienie jest prawidłowe. W rzeczywistości napotkaliśmy podobną sytuację podczas migracji danych w naszej DWH. Wybraliśmy Parquet zamiast Avro, ponieważ oszczędność dysku była prawie dwukrotnie większa niż w przypadku AVro. Ponadto czas przetwarzania zapytań był znacznie lepszy niż w Avro. Ale tak, nasze zapytania były oparte na agregacji, operacjach opartych na kolumnach itp., Dlatego Parquet był przewidywalnym zwycięzcą.

Używamy Hive 0.12 z dystrybucji CDH. Wspomniałeś, że masz problemy z Hive + Parquet, co to jest? Nie spotkaliśmy żadnego.


3

Silver Blaze ładnie ułożył opis na przykładzie przypadku użycia i opisał, w jaki sposób Parquet był dla niego najlepszym wyborem. W zależności od wymagań warto rozważyć jedno nad drugim. Przedstawiam również krótki opis różnych innych formatów plików wraz z porównaniem złożoności czasowo-przestrzennej. Mam nadzieję, że to pomoże.

Istnieje wiele formatów plików, których można używać w gałęzi. Godne uwagi wzmianki to AVRO, Parquet. RCFile i ORC. W Internecie dostępnych jest kilka dobrych dokumentów, do których możesz się odwołać, jeśli chcesz porównać wydajność i wykorzystanie miejsca w tych formatach plików. Podąża za przydatnymi linkami, które pomogą Ci zacząć.

Ten post na blogu

Ten link z MapR [nie omawiają Parkietu]

Ten link z Inquidii

Powyższe linki pomogą Ci zacząć. Mam nadzieję, że to odpowiedź na twoje pytanie.

Dzięki!


0

Tylko opis dotyczący Parkietu można znaleźć tutaj: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

Zamierzam wkrótce napisać o Avro oraz o porównaniu między dwoma. Po zakończeniu opublikuje to tutaj.


Czekam na porównanie. Obecnie wybrałem Avro dla mojego projektu, jak parkiet ma problemy comptibility z ula :)
Abhishek

1
@Abshinek, czy możesz podać jakieś informacje na temat problemów ze zgodnością z ulem i avro
EB,

@EB Nie powinno być żadnych problemów, jeśli wystąpią, zostaną wspomniane na stronie cwiki.apache.org/confluence/display/Hive/AvroSerDe
OneCricketeer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.