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.
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.
źródło
Avro
Parkiet
Od wyboru formatu przechowywania danych HDFS - Avro vs. Parquet i nie tylko
źródło
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:
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.
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.
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.
źródło
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.
źródło
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!
źródło
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.
źródło