Formaty plików w big data: krótki przewodnik

Formaty plików w big data: krótki przewodnik
Bóstwo pogody autorstwa Remarin

Zespół Mail.ru Cloud Solutions oferując tłumaczenie artykułu inżyniera Rahula Bhatia z firmy Clairvoyant o tym, jakie są formaty plików w big data, jakie są najczęściej używane funkcje formatów Hadoop oraz jaki format najlepiej wykorzystać.

Po co potrzebne są różne formaty plików

Poważnym wąskim gardłem w wydajności aplikacji obsługujących HDFS, takich jak MapReduce i Spark, jest czas wyszukiwania, odczytu i zapisu danych. Problemy te zaostrzają trudności w zarządzaniu dużymi zbiorami danych, jeśli mamy do czynienia z ewolucyjnym schematem, a także gdy występują pewne ograniczenia dotyczące przechowywania.

Przetwarzanie big data zwiększa obciążenie systemu magazynowania — Hadoop przechowuje dane redundandtne dla zapewnienia odporności na awarie. Oprócz dysków, obciążony jest procesor, sieć, system wejścia-wyjścia itd. Wraz ze wzrostem objętości danych rośnie również koszt ich przetwarzania i przechowywania.

Różne formaty plików w Hadoop zostały wymyślone, aby rozwiązać te problemy. Wybór odpowiedniego formatu pliku może przynieść istotne korzyści:

  1. Szybszy czas odczytu.
  2. Szybszy czas zapisu.
  3. Pliki współdzielone.
  4. Wsparcie dla ewolucji schem.
  5. Rozszerzone wsparcie kompresji.

Niektóre formaty plików są przeznaczone do ogólnego użytku, inne do bardziej specyficznych zastosowań, a niektóre są zaprojektowane z uwzględnieniem konkretnych cech danych. Wybór jest więc rzeczywiście dość duży.

Format plików Avro

Dla serializacji danych jest szeroko używanym Avro — to format przechowywania danych oparty na wierszach, czyli tekstowy, w Hadoop. Przechowuje schemat w formacie JSON, co ułatwia jego odczyt i interpretację przez jakikolwiek program. Same dane są przechowywane w formacie binarnym, kompaktowo i efektywnie.

System serializacji Avro jest neutralny wobec języka. Pliki można przetwarzać różnymi językami, obecnie są to C, C++, C#, Java, Python i Ruby.

Kluczową cechą Avro jest solidne wsparcie dla schematów danych, które zmieniają się z upływem czasu, to znaczy ewoluują. Avro rozumie zmiany schematu — usuwanie, dodawanie lub modyfikowanie pól.

Avro obsługuje różnorodne struktury danych. Na przykład można utworzyć rekord, który zawiera tablicę, typ wyliczeniowy i pod-rekord.

Formaty plików w big data: krótki przewodnik
Ten format idealnie nadaje się do zapisywania w obszarze przejrzystym jeziora danych (jezioro danych, czyli data lake — kolekcja instancji do przechowywania różnych typów danych w dodatku do bezpośrednich źródeł danych).

Tak więc do zapisywania w strefie przesiadkowej jeziora danych ten format jest najlepszy z następujących powodów:

  1. Dane z tej strefy zwykle są odczytywane w całości w celu dalszego przetwarzania przez niższe systemy — w tym przypadku format oparty na wierszach jest bardziej efektywny.
  2. Niższe systemy mogą łatwo wydobywać tabele schematów z plików — nie ma potrzeby przechowywania schematów oddzielnie w zewnętrznej meta-przechowalni.
  3. Każda zmiana w pierwotnym schemacie jest łatwa do obsługi (ewolucja schematu).

Format plików Parquet

Parquet to otwartoźródłowy format plików dla Hadoop, który przechowuje zagnieżdżone struktury danych w płaskim formacie kolumnowym.

W porównaniu do tradycyjnego podejścia opartego na wierszach, Parquet jest bardziej efektywny pod względem przechowywania i wydajności.

Jest to szczególnie przydatne dla zapytań, które odczytują określone kolumny z szerokiej (z wieloma kolumnami) tabeli. Dzięki formatowi plików odczytywane są tylko potrzebne kolumny, co minimalizuje operacje wejścia-wyjścia.

Małe wyjaśnienie: aby lepiej zrozumieć format pliku Parquet w Hadoop, spójrzmy, co oznacza format oparty na kolumnach — to znaczy format kolumnowy. W takim formacie razem przechowywane są jednorodne wartości każdej kolumny.

Na przykład, zapis obejmuje pola ID, Name i Department. W takim przypadku wszystkie wartości kolumny ID będą przechowywane razem, tak samo jak wartości kolumny Name i tak dalej. Tabela będzie miała mniej więcej taki wygląd:

ID
Nazwa
Department

1
emp1
d1

2
emp2
d2

3
emp3
d3

W formacie wierszowym dane będą przechowywane w następujący sposób:

1
emp1
d1
2
emp2
d2
3
emp3
d3

W kolumnowym formacie plików te same dane będą przechowywane tak:

1
2
3
emp1
emp2
emp3
d1
d2
d3

Format kolumnowy jest bardziej efektywny, gdy potrzebujesz zapytać o kilka kolumn z tabeli. Odczyta tylko potrzebne kolumny, ponieważ znajdują się one blisko siebie. W ten sposób operacje wejścia-wyjścia są minimalizowane.

Na przykład potrzebujesz tylko kolumny NAME. W formacie wierszowym Każdy wpis w zestawie danych musi zostać załadowany, rozdzielony na pola, a następnie wyodrębnione muszą być dane NAME. Format kolumnowy pozwala przejść bezpośrednio do kolumny Name, ponieważ wszystkie wartości dla tej kolumny są przechowywane razem. Nie trzeba przeszukiwać całego wpisu.

W ten sposób format kolumnowy zwiększa wydajność zapytań, ponieważ przejście do wymaganych kolumn wymaga mniej czasu wyszukiwania i zmniejsza liczbę operacji wejścia/wyjścia, ponieważ odczytywane są tylko potrzebne kolumny.

Jedną z unikalnych cech Parquet jest to, że w tym formacie może przechowywać dane z zagnieżdżonymi strukturami. Oznacza to, że w pliku Parquet nawet zagnieżdżone pola można odczytywać oddzielnie, bez konieczności odczytywania wszystkich pól w zagnieżdżonej strukturze. Aby przechowywać zagnieżdżone struktury, Parquet korzysta z algorytmu rozdrabniania i składania (shredding and assembly).

Formaty plików w big data: krótki przewodnik
Aby zrozumieć format pliku Parquet w Hadoop, należy znać następujące terminy:

  1. Grupa wierszy (row group): logiczne poziome podzielenie danych na wiersze. Grupa wierszy składa się z fragmentu każdego kolumny w zestawie danych.
  2. Fragment kolumny (column chunk): fragment konkretnej kolumny. Te fragmenty kolumn żyją w określonej grupie wierszy i będą gwarantowanie sąsiadujące w pliku.
  3. Strona (page): fragmenty kolumn dzielą się na strony, zapisywane jedna po drugiej. Strony mają wspólny nagłówek, więc przy odczycie można pominąć niepotrzebne.

Formaty plików w big data: krótki przewodnik
Tutaj nagłówek zawiera po prostu magiczną liczbę PAR1 (4 bajty), która identyfikuje plik jako plik formatu Parquet.

W stopce zapisano następujące:

  1. Metadane pliku, które zawierają startowe współrzędne metadanych każdej kolumny. Przy odczycie należy najpierw odczytać metadane pliku, aby znaleźć wszystkie interesujące fragmenty kolumn. Następnie fragmenty kolumn należy odczytywać sekwencyjnie. Dodatkowo metadane zawierają wersję formatu, schemat oraz wszystkie dodatkowe pary klucz-wartość.
  2. Długość metadanych (4 bajty).
  3. Magiczna liczba PAR1 (4 bajty).

Format plików ORC

Optymalizowany format plików wierszowo-kolumnowy (Optimized Row Columnar, ORC) oferuje bardzo skuteczny sposób przechowywania danych i został zaprojektowany, aby przezwyciężyć ograniczenia innych formatów. Przechowuje dane w idealnie kompaktowej formie, pozwalając na pominięcie niepotrzebnych szczegółów — jednocześnie nie wymaga tworzenia dużych, skomplikowanych lub ręcznie zarządzanych indeksów.

Zalety formatu ORC:

  1. Jedna plik na wyjściu każdego zadania, co zmniejsza obciążenie NameNode'a (węzeł nazw).
  2. Wsparcie dla typów danych Hive, w tym DateTime, typy dziesiętne i złożone (struct, list, map i union).
  3. Jednoczesne odczytywanie tego samego pliku przez różne procesy RecordReader.
  4. Możliwość dzielenia plików bez skanowania w poszukiwaniu znaczników.
  5. Oszałamiająca ocena maksymalnego przydziału pamięci stosu do procesów odczytu/zapisu na podstawie informacji w stopce pliku.
  6. Metadane są przechowywane w binarnym formacie serializacji Protocol Buffers, co umożliwia dodawanie i usuwanie pól.

Formaty plików w big data: krótki przewodnik
ORC przechowuje kolekcje wierszy w jednym pliku, a w ramach kolekcji dane wierszy są przechowywane w formacie kolumnowym.

Plik ORC przechowuje grupy wierszy, które nazywane są pasmami (stripes) oraz dodatkowe informacje w stopce pliku. Postscript na końcu pliku zawiera parametry kompresji oraz rozmiar skompresowanej stopki.

Domyślny rozmiar pasa wynosi 250 MB. Dzięki tak dużym pasmom odczyt z HDFS jest bardziej efektywny: dużymi ciągłymi blokami.

W stopce pliku zapisano listę pasów w pliku, liczbę wierszy na pas oraz typ danych każdej kolumny. Tam także zapisano wartości wyniki count, min, max i sum dla każdej kolumny.

Stopka pasa zawiera katalog lokalizacji strumienia.

Dane wierszowe są używane podczas skanowania tabel.

Dane indeksowe obejmują minimalne i maksymalne wartości dla każdej kolumny i pozycje wierszy w każdej kolumnie. Indeksy ORC są wykorzystywane tylko do wyboru pasów i grup wierszy, a nie do odpowiadania na zapytania.

Porównanie różnych formatów plików

Avro w porównaniu z Parquet

  1. Avro to format przechowywania wierszy, podczas gdy Parquet przechowuje dane w kolumnach.
  2. Parquet jest lepiej przystosowany do zapytań analitycznych, co oznacza, że operacje odczytu i zapytania danych są znacznie bardziej efektywne niż zapisy.
  3. Operacje zapisu w Avro są realizowane efektywniej niż w Parquet.
  4. Avro działa bardziej dojrzało, jeśli chodzi o ewolucję schematów. Parquet obsługuje jedynie dodawanie schematu, a w Avro zrealizowano wielofunkcyjną ewolucję, co oznacza dodawanie lub modyfikację kolumn.
  5. Parquet idealnie nadaje się do zapytań o podzestawy kolumn w tabeli wielokolumnowej. Avro sprawdza się w operacjach ETL, gdzie żądamy wszystkich kolumn.

ORC w porównaniu do Parquet

  1. Parquet lepiej przechowuje dane zagnieżdżone.
  2. ORC lepiej przystosowuje się do pchania predykatów (predicate pushdown).
  3. ORC obsługuje właściwości ACID.
  4. ORC lepiej kompresuje dane.

Co jeszcze przeczytać na ten temat:

  1. Analiza dużych danych w chmurze: jak firmy mogą stać się zorientowane na dane.
  2. Skromny przewodnik po schematach baz danych.
  3. Nasz kanał Telegram o transformacji cyfrowej.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster