Формати на файлове в големи данни: кратко обучение

Формати на файлове в големи данни: кратко обучение
Божество на времето от Ремарин

Команда Mail.ru Cloud Solutions предлага превод на статия инженерът Рахул Бхати от компанията Clairvoyant за това какви формати на файлове съществуват в големите данни, какви са най-разпространените функции на формати Hadoop и кой формат е най-добре да се използва.

Защо са необходими различни формати на файлове

Сериозно ограничение в производителността на приложения, поддържащи HDFS, като MapReduce и Spark — времето за търсене, четене, а също и запис на данни. Тези проблеми се усложняват от трудностите в управлението на големи набори от данни, ако имаме не фиксирана, а еволюираща схема или има определени ограничения за съхранение.

Обработката на големи данни увеличава натоварването на подсистемата за съхранение — Hadoop съхранява данни излишно, за да осигури отказоустойчивост. Освен дисковете, натоварват се процесорът, мрежата, системата за вход-изход и т.н. С увеличаване на обема на данните растат и разходите за тяхната обработка и съхранение.

Различни формати на файлове в Hadoop са създадени за решаване точно на тези проблеми. Изборът на подходящ формат на файла може да донесе съществени предимства:

  1. По-бързо време за четене.
  2. По-бързо време за запис.
  3. Споделени файлове.
  4. Подкрепа за еволюция на схемите.
  5. Разширена поддръжка на компресия.

Някои формати на файлове са предназначени за общо ползване, други за по-специфични приложения, а трети са проектирани с оглед на конкретни характеристики на данните. Така че изборът наистина е доста голям.

Формат на файлове Avro

За сериализация на данни широко се използва Avro — това е основаващ се на редове, тоест редов формат на съхранение на данни в Hadoop. Той държи схемата в JSON формат, улеснявайки нейното четене и интерпретация от която и да е програма. Самите данни са в двоичен формат, компактен и ефективен.

Системата за сериализация Avro е неутрална спрямо езика. Файловете могат да се обработват с различни езици, в момента това са C, C++, C#, Java, Python и Ruby.

Основната характеристика на Avro е надеждната поддръжка на схеми с данни, които се променят с времето, т.е. еволюират. Avro разбира промените в схемата — премахване, добавяне или модификация на полета.

Avro поддържа разнообразни структури на данни. Например, може да създадете запис, който съдържа масив, избираем тип и подзапис.

Формати на файлове в големи данни: кратко обучение
Този формат е идеален за запис в зона за акостиране (преходна) на езерото с данни (езеро със данни, или data lake — колекция от инстанции за съхранение на различни типове данни в допълнение непосредствено към източниците на данни).

Така че, за запис в целевата зона на езерото със данни, този формат най-добре отговаря по следните причини:

  1. Данните от тази зона обикновено се четат изцяло за последваща обработка от долните системи — и форматът на базата на редове в този случай е по-ефективен.
  2. Долните системи могат лесно да извлекат таблици на схемата от файловете — не е необходимо да се съхраняват схемите отделно във външно мета-склад.
  3. Всяка промяна в оригиналната схема лесно се обработва (еволюция на схемата).

Формат на файловете Parquet

Parquet — отворен формат на файлове за Hadoop, който съхранява вложени структури от данни в плосък колонен формат.

В сравнение с традиционния редови подход, Parquet е по-ефективен по отношение на съхранение и производителност.

Това е особено полезно за запитвания, които четат конкретни колони от широка (с много колони) таблица. Благодарение на формата на файловете се четат само необходимите колони, така че входно-изходните операции се минимизират.

Небольшо отклонение-обяснение: за по-добро разбиране на формата на файла Parquet в Hadoop, нека да разгледаме какво е основан на колони — т.е. колонен — формат. В такъв формат заедно се съхраняват еднотипни стойности за всяка колона.

Например, записът включва полета ID, Name и Department. В този случай всички стойности на колоната ID ще се съхраняват заедно, както и стойностите на колоната Name и т.н. Таблицата ще има приблизително такъв вид:

ID
Name
Department

1
emp1
d1

2
emp2
d2

3
emp3
d3

В редовия формат данните ще се съхраняват по следния начин:

1
emp1
d1
2
emp2
d2
3
emp3
d3

В колонен формат на файловете същите данни ще се съхраняват така:

1
2
3
emp1
emp2
emp3
d1
d2
d3

Колонният формат е по-ефективен, когато ви трябва да запитате от таблицата няколко колони. Той ще прочете само необходимите колони, защото те се намират в съседство. По този начин, входно-изходните операции се минимизират.

Например, ви е нужна само колоната NAME. В редовия формат всяка запис в набор от данни трябва да бъде зареден, анализиран по полета и след това извлечени данните NAME. Колонният формат позволява да се премине веднага до колоната Name, тъй като всички стойности за тази колона се съхраняват заедно. Няма нужда да се сканира целият запис.

По този начин, стълбовият формат увеличава производителността на заявките, тъй като за преминаване към необходимите колони отнема по-малко време за търсене и се намалява броят на входно-изходните операции, тъй като се прочитат само нужните колони.

Една от уникалните характеристики Parquet е, че в този формат той може да съхранява данни с вложени структури. Това означава, че в Parquet файл дори вложените полета могат да се четат поотделно, без да е необходимо да се четат всички полета във вложената структура. За съхранение на вложените структури Parquet използва алгоритъм за раздробяване и сглобяване (shredding and assembly).

Формати на файлове в големи данни: кратко обучение
За да разберем формата на файла Parquet в Hadoop, е необходимо да се знаят следните термини:

  1. Група редове (row group): логическо хоризонтално разделение на данните на редове. Групата редове се състои от фрагмент от всяка колона в наборa от данни.
  2. Фрагмент на колона (column chunk): фрагмент на конкретна колона. Тези фрагменти на колони живеят в определена група редове и ще са гарантирано съседни в файла.
  3. Страница (page): фрагментите на колоните се разделят на страници, записани една след друга. Страниците имат общ заглавие, така че при четене могат да се пропуснат ненужните.

Формати на файлове в големи данни: кратко обучение
Тук заглавието просто съдържа магическото число PAR1 (4 байта), което идентифицира файла като файл от формата Parquet.

В края е записано следното:

  1. Метаданни за файла, които съдържат начални координати на метаданните на всяка колона. При четене е необходимо първо да се прочетат метаданните на файла, за да се намерят всички интересуващи фрагменти от колоните. След това фрагментите на колоните трябва да се четат последователно. Освен това метаданните включват версия на формата, схема и всякакви допълнителни двойки ключ-стойност.
  2. Дължина на метаданните (4 байта).
  3. Магическо число PAR1 (4 байта).

Форматът на файловете ORC

Оптимизиран стълбовидно-редов формат на файлове (Optimized Row Columnar, ORC) предлага много ефективен начин за съхранение на данни и е създаден, за да преодолее ограниченията на други формати. Съхранява данни в идеално компактна форма, позволяваща пропускане на ненужни детайли — без да изисква изграждане на големи, сложни или обслужвани ръчно индекси.

Предимства на формата ORC:

  1. Един файл на изхода на всяка задача, което намалява натоварването на NameNode (именното узел).
  2. Поддръжка на типове данни Hive, включително DateTime, десетични и сложни типове данни (struct, list, map и union).
  3. Паралелно четене на един и същ файл от различни процеси RecordReader.
  4. Възможност за разделяне на файлове без сканиране за наличието на маркери.
  5. Оценка за максимално възможно заделяне на паметта на купчината за процеси на четене/запис въз основа на информацията във футера на файла.
  6. Метаданните се съхраняват в бинарен формат на сериализация на Protocol Buffers, който позволява добавяне и премахване на полета.

Формати на файлове в големи данни: кратко обучение
ORC съхранява колекции от редове в един файл, а вътре в колекцията редовите данни се съхраняват в колонов формат.

Файлът ORC съхранява групи от редове, наречени ивици (stripes), и спомагателна информация във футера на файла. Постскриптът в края на файла съдържа параметри за компресия и размер на компресирания футер.

По подразбиране размерът на ивицата е 250 MB. Поради ивици с такъв голям размер, четенето от HDFS е по-ефективно: с големи непрекъснати блокове.

В футера на файла е записан списък с ивиците във файла, брой редове на ивица и тип данни на всяка колона. Там също са записани стойностите за count, min, max и sum за всяка колона.

Футерът на ивицата съдържа каталог на местоположенията на потока.

Редовете данни се използват при сканиране на таблици.

Индексните данни включват минималните и максималните стойности за всяка колона и позициите на редовете във всяка колона. Индексите ORC се използват само за избор на ивици и групи от редове, а не за отговор на заявки.

Сравнение на различни формати на файлове

Avro в сравнение с Parquet

  1. Avro е формат за съхранение по редове, докато Parquet съхранява данни по колони.
  2. Parquet е по-подходящ за аналитични заявки, тоест операциите по четене и заявка на данни са много по-ефективни от тези по запис.
  3. Записните операции в Avro се извършват по-ефикасно, отколкото в Parquet.
  4. Avro по-добре работи с еволюцията на схеми. Parquet поддържа само добавяне на схеми, а в Avro е реализирана многофункционална еволюция, тоест добавяне или промяна на колони.
  5. Parquet е идеален за заявки върху подмножество от колони в много колоночна таблица. Avro е подходящ за ETL операции, където запитваме всички колони.

ORC в сравнение с Parquet

  1. Parquet по-добре съхранява вложени данни.
  2. ORC е по-добре адаптиран за натиск на предикати (predicate pushdown).
  3. ORC поддържа свойства на ACID.
  4. ORC по-добре компресира данни.

Какво още да прочетете по темата:

  1. Анализ на големи данни в облак: как компаниите да станат ориентирани към данни.
  2. Скромно ръководство по структури на бази данни.
  3. Нашият канал в Телеграм за цифрова трансформация.

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster