За последние несколько лет Netflix внес много очень успешных проектов с открытым исходным кодом в сообщество открытого исходного кода. Основные компоненты стека микросервисных технологий Netflix в основном имеют открытый исходный код.Теперь все знакомы с шлюзом Zuul, реестром обнаружения служб Eureka, ограничением тока предохранителя Hystrix, конфигурацией Archaius и другими компонентами. Сегодня Netflix открыла свою платформу службы обнаружения больших данных Metacat, чтобы упростить обнаружение, обработку и управление данными. Metacat подробно представлен в технологическом блоге официального веб-сайта Netflix, и передовая линия ИИ компилирует контент следующим образом.
Для более качественного контента, пожалуйста, обратите внимание на паблик WeChat "AI Frontline", (ID: ai-front)
Многие крупные компании имеют большое количество источников данных, их форматы данных неодинаковы, а объем огромен. В Netflix наше хранилище данных состоит из множества больших наборов данных, хранящихся в Amazon S3, Druid, Elasticsearch, Redshift, Snowflake и MySql. Наша платформа поддерживает Spark, Presto, Pig и Hive, которые мы используем для потребления, обработки и создания наборов данных. Из-за разнообразия источников данных мы разработали Metacat, чтобы наша платформа данных могла объединять эти наборы данных в «единое» хранилище данных. Metacat — это служба метаданных, которая позволяет нам обнаруживать, обрабатывать и управлять данными.
Базовая архитектура платформы больших данных Netflix включает три ключевых сервиса: Execution Service (Genie), Metadata Service и Event Service. Эти идеи не уникальны для Netflix, и такая архитектура необходима при построении инфраструктуры данных, которая может масштабироваться сейчас и в будущем.
Когда мы начали создавать эту платформу много лет назад, мы использовали Pig в качестве языка ETL и Hive в качестве специализированного языка запросов. Поскольку у самой Pig нет системы метаданных, нам казалось идеальным построить схему, которая бы взаимодействовала между ними.
Так родилась Metacat, система, которая действует как уровень доступа к метаданным для всех хранилищ данных и централизованная служба, которую различные вычислительные механизмы могут использовать для доступа к различным наборам данных. Три основные цели Metacat:
Объединенное представление системы метаданных
Единый API для метаданных набора данных
Произвольное хранилище деловых и пользовательских метаданных для наборов данных
Другие компании с большими распределенными наборами данных сталкиваются с аналогичными проблемами. Apache Atlas, слой абстракции данных Twitter и Linkedin’s WhereHows (служба обнаружения данных Linkedin), и это лишь некоторые из них, — все они были созданы для решения схожих проблем, только с их собственными архитектурными решениями.
Metacat — это служба объединения, которая предоставляет унифицированный интерфейс REST/Thrift для доступа к метаданным различных хранилищ данных. Хранилище метаданных по-прежнему является источником достоверных данных для метаданных схемы, поэтому Metacat не сохраняет эту часть метаданных. Metacat хранит только метаданные, связанные с бизнесом и определяемые пользователем. Он также публикует всю информацию о наборе данных в Elasticsearch для полнотекстового поиска и обнаружения.
Функции Metacat можно разделить на следующие категории:
Абстракция данных и интероперабельность
Хранилище деловых и определяемых пользователем метаданных
обнаружение данных
Аудит изменения данных и уведомление
Оптимизация хранилища метаданных Hive
Netflix использует несколько механизмов запросов, таких как Pig, Spark, Presto и Hive, для обработки и использования данных.Внедряя общий уровень абстракции, различные механизмы могут интерактивно обращаться к этим наборам данных.Например: скрипт Pig, который считывает данные из Hive, может считывать данные из таблицы типа столбца Hive и преобразовывать их в тип Pig. При перемещении данных из одного хранилища данных в другое Metacat упрощает процесс, создавая таблицу целевого типа в целевом хранилище данных. Metacat предоставляет набор предопределенных типов данных, которые можно сопоставить с типами данных в различных хранилищах данных. Например, наши инструменты перемещения данных используют описанные выше возможности для перемещения данных из Hive в Redshift или Snowflake.
Сервис Metacat Thrift поддерживает интерфейс Thrift Hive для простой интеграции со Spark и Presto. Таким образом, мы можем агрегировать все изменения метаданных в одной системе и публиковать уведомления об этих изменениях, что позволяет использовать ETL на основе данных. При поступлении новых данных Metacat может уведомить связанные задания о начале работы.
Metacat также хранит бизнес- и пользовательские метаданные для наборов данных. В настоящее время мы используем бизнес-метаданные для хранения информации о подключении (например, источников данных RDS), информации о конфигурации, метрик (разделы и таблицы Hive/S3), а также TTL (время жизни) для таблиц данных и т. д. Как следует из названия, определяемые пользователем метаданные — это метаданные произвольной формы, которые пользователь может определить для своих целей.
Бизнес-метаданные также можно условно разделить на логические метаданные и физические метаданные. Бизнес-метаданные о логических структурах, таких как таблицы, считаются логическими метаданными. Мы используем метаданные для классификации данных и для стандартизации нашей обработки ETL. Владелец таблицы данных может предоставить информацию аудита для таблицы данных в бизнес-метаданных. Они также могут предоставлять значения по умолчанию и правила проверки для столбцов, которые используются при записи данных.
Метаданные фактических данных, хранящихся в таблице или разделе, считаются физическими метаданными. Наш процесс ETL сохраняет метрики данных после выполнения задания для последующей проверки. Эту же метрику можно использовать для анализа стоимости и объема данных. Поскольку две таблицы могут указывать на одно и то же место (например, Hive), важно различать логические и физические метаданные. Две таблицы могут иметь одни и те же физические метаданные, но должны иметь разные логические метаданные.
Как потребители данных, мы должны иметь возможность легко находить и просматривать различные наборы данных. Metacat публикует метаданные схемы, а также деловые и пользовательские метаданные в Elasticsearch для полнотекстового поиска. Таким образом, наш SQL-редактор Big Data Portal позволяет использовать автоматические предложения и автозаполнение операторов SQL. Организация наборов данных в каталоги помогает потребителям просматривать информацию, классифицируя данные с помощью тегов в соответствии с различными темами. Мы также используем теги для идентификации таблиц для управления жизненным циклом данных.
Как центральный шлюз для хранения данных, Metacat будет фиксировать все изменения метаданных и обновления данных. Мы также разработали систему push-уведомлений об изменениях таблиц данных и разделов. В настоящее время мы используем этот механизм для публикации событий в нашем собственном конвейере данных (Keystone), чтобы лучше понять использование данных и тенденции. Мы также публикуем события в Amazon SNS. Мы развиваем архитектуру нашей платформы данных, чтобы она основывалась на событиях. Публикация событий в SNS позволяет другим системам нашей платформы данных «реагировать» на эти метаданные или изменения данных. Например, когда таблица данных удаляется, наша служба администратора хранилища данных S3 может подписаться на эти события и соответствующим образом очистить данные на S3.
Hive Metastore, поддерживаемый RDS, плохо работает при высокой нагрузке. Мы заметили множество проблем с записью и чтением разделов с помощью API хранилища метаданных. По этой причине мы больше не используем эти API. Мы внесли улучшения в коннектор Hive, который напрямую взаимодействует с RDS при чтении и записи разделов. Раньше вызовы Hive Metastore для добавления тысяч разделов часто истекали по тайм-ауту, с новой реализацией это больше не проблема.
Мы прошли долгий путь в создании Metacat, но мы еще не достигли цели. Вот некоторые функции, над которыми нам еще нужно поработать, чтобы улучшить их.
Управление версиями схем и метаданных для предоставления истории таблиц данных. Например, отслеживайте изменения метаданных для определенного столбца или просматривайте тенденции изменения размера таблицы с течением времени. Возможность видеть информацию о метаданных в какой-то момент в прошлом очень полезна для аудита, отладки, а также для повторной обработки и отката.
Предоставляет контекстную информацию для таблицы данных службе происхождения данных. Например, метаданные, такие как частота доступа к таблицам данных, агрегируются в Metacat и публикуются в службе наследования данных для ранжирования критичности таблиц данных.
Добавьте поддержку хранилищ данных, таких как Elasticsearch и Kafka.
Подключаемая проверка метаданных. Поскольку деловые и пользовательские метаданные имеют произвольную форму, для обеспечения целостности метаданных нам необходимо их проверить. Metacat должен иметь подключаемую архитектуру, которая обеспечивает соблюдение политик проверки перед сохранением метаданных.
Адрес Metacat GitHub:
https://github.com/Netflix/metacat
Оригинальная ссылка:
https://medium.com/netflix-techblog/metacat-making-big-data-discoverable-and-meaningful-at-netflix-56fb36a53520