Из Субд, Загруженной Mpp — Энергичного Озера Данных С Аналитическими Инструментами: Делимся Подробностями Создания

Все организации, имеющие хоть какое-то отношение к данным, рано или поздно сталкиваются с проблемой хранения реляционных и неструктурированных баз данных.

Найти удобный, эффективный и недорогой одновременно подход к этой проблеме непросто.

А также убедитесь, что ученые, работающие с данными, могут успешно работать с моделями машинного обучения на данных.

Нам это удалось – и хотя пришлось повозиться, итоговая прибыль оказалась даже больше, чем ожидалось.

Все подробности мы расскажем ниже.



Из СУБД, загруженной MPP — энергичного озера данных с аналитическими инструментами: делимся подробностями создания

Со временем любой банк накапливает невероятные объемы корпоративных данных.

Сопоставимый объем хранится только в интернет-компаниях и телекоммуникациях.

Это произошло из-за высоких требований контролирующих органов.

Эти данные не лежат без дела – руководители финансовых учреждений уже давно придумали, как получить на них прибыль.

Для нас все началось с управленческой и финансовой отчетности.

На основе этих данных мы научились принимать бизнес-решения.

Часто возникала необходимость получения данных из нескольких информационных систем банка, для чего мы создавали консолидированные базы данных и системы отчетности.

Из этого постепенно сформировалось то, что сейчас называется хранилищем данных.

Вскоре на базе этого хранилища заработали и другие наши системы:

  • аналитическая CRM, позволяющая предлагать клиенту более удобные продукты;
  • кредитные конвейеры, которые помогают быстро и точно принимать решения о выдаче кредита;
  • системы лояльности, рассчитывающие кэшбэк или бонусные баллы по механикам различной сложности.

Все эти проблемы решают аналитические приложения, использующие модели машинного обучения.

Чем больше информации модели смогут взять из хранилища, тем точнее они будут. Их потребность в данных растет в геометрической прогрессии.

Примерно к такой ситуации мы пришли два или три года назад. На тот момент у нас было хранилище на базе СУБД MPP Teradata с использованием ELT-инструмента SAS Data Integration Studio. Это хранилище мы строим с 2011 года совместно с Glowbyte Consulting. В нее были интегрированы более 15 крупных банковских систем и одновременно аккумулированы достаточный объем данных для внедрения и развития аналитических приложений.

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

И наши ученые, работающие с данными, стремились поддержать это.

В целом, звезды сошлись правильно для создания Платформы исследования данных.



Планирование решения

Здесь необходимо уточнить: промышленное ПО и серверы стоят дорого даже для крупного банка.

Не каждая организация может позволить себе хранить большие объемы данных в топовых СУБД MPP. Всегда приходится делать выбор между ценой и скоростью, надежностью и объемом.

Чтобы максимально использовать имеющиеся возможности, мы решили сделать следующее:

  • Оставьте нагрузку ELT и наиболее востребованную часть исторических данных на СУБД Teradata;
  • загрузить полную историю в Hadoop, что позволяет хранить информацию гораздо дешевле.

Примерно в это же время экосистема Hadoop стала не только модной, но и достаточно надежной и удобной для корпоративного использования.

Осталось выбрать дистрибутив.

Вы можете создать свой собственный или использовать Apache Hadoop с открытым исходным кодом.

Но среди корпоративных решений на базе Hadoop лучше себя зарекомендовали готовые дистрибутивы других вендоров — Cloudera и Hortonworks. Поэтому мы тоже решили использовать готовый дистрибутив.

Поскольку нашей основной задачей было хранение структурированных больших данных, в стеке Hadoop нас интересовали решения, максимально приближенные к классическим СУБД SQL. Лидерами здесь являются Импала и Улей.

Cloudera разрабатывает и интегрирует решения Impala, Hortonworks – Hive. Для углубленного изучения мы организовали нагрузочное тестирование обеих СУБД с учетом нагрузки нашего профиля.

Надо сказать, что механизмы обработки данных в Impala и Hive существенно отличаются — Hive вообще представляет несколько разных вариантов.

Однако выбор пал на Импалу — и соответственно дистрибутив от Cloudera.

Почему вам понравилась Импала?

  • Высокая скорость выполнения аналитических запросов из-за альтернативного подхода к MapReduce. Промежуточные результаты вычислений не сбрасываются в HDFS, что существенно ускоряет обработку данных.

  • Ээффективная работа со столбчатым хранилищем данных в Паркет .

    Для аналитических задач часто используются так называемые широкие таблицы с множеством столбцов.

    Все столбцы используются редко — возможность поднимать из HDFS только нужные для работы экономит оперативную память и значительно ускоряет запрос.

  • Элегантное решение с фильтры времени выполнения , включая фильтрацию цветения.

    И Hive, и Impala существенно ограничены в использовании индексов, общих для классических СУБД, из-за особенностей файловой системы хранения HDFS. Следовательно, для оптимизации выполнения SQL-запроса механизм СУБД должен эффективно использовать преимущества доступного секционирования, даже если оно явно не указано в условиях запроса.

    Кроме того, ему необходимо попытаться предсказать, какой минимальный объем данных из HDFS необходимо поднять, чтобы обеспечить обработку всех строк.

    Это очень хорошо работает в Импале.

  • Импала использует LLVM — компилятор на виртуальной машине с RISC-подобными инструкциями — для генерации оптимального кода для выполнения SQL-запроса.

  • Поддерживаются интерфейсы ODBC и JDBC. Это позволяет интегрировать данные Impala с аналитическими инструментами и приложениями практически «из коробки».

  • Можно использовать Куду — для обхода некоторых ограничений HDFS и, в частности, записи конструкций UPDATE и DELETE в SQL-запросах.



Sqoop и остальная архитектура

Следующим по важности для нас инструментом в стеке Hadoop был Sqoop. Он позволяет передавать данные между реляционными СУБД (нас, конечно, интересовала Teradata) и HDFS в кластере Hadoop в разных форматах, включая Parquet. В тестах Sqoop показал высокую гибкость и производительность, поэтому мы решили использовать его вместо разработки собственных инструментов для захвата данных через ODBC/JDBC и сохранения их в HDFS. Для обучения моделей и связанных с ними задач Data Science, которые удобнее выполнять непосредственно на кластере Hadoop, мы использовали Искра от Апача.

Оно стало стандартным решением в своей области – и не зря:

  • библиотеки машинного обучения Spark ML;
  • поддержка четырех языков программирования (Scala, Java, Python, R);
  • интеграция с аналитическими инструментами;
  • Обработка данных в памяти обеспечивает превосходную производительность.

В качестве аппаратной платформы были приобретены серверы Oracle Big Data Appliance. Мы начали с шести узлов в продуктивной схеме с 2x24-ядерным процессором и 256 ГБ памяти на каждом.

Текущая конфигурация содержит 18 таких же узлов с памятью, расширенной до 512 ГБ.



Из СУБД, загруженной MPP — энергичного озера данных с аналитическими инструментами: делимся подробностями создания

На схеме показана архитектура верхнего уровня платформы исследования данных и связанных с ней систем.

Центральное звено — кластер Hadoop на базе дистрибутива Cloudera (CDH).

Он используется как для получения с помощью Sqoop, так и для хранения данных QCD в HDFS — в столбчатом формате Parquet, позволяющем использовать кодеки сжатия, например, Snappy. Кластер также обрабатывает данные: Impala используется для ELT-подобных преобразований, Spark — для задач Data Science. Sentry используется для разделения доступа к данным.

Impala имеет интерфейсы практически для всех современных инструментов корпоративной аналитики.

Кроме того, в качестве клиентов можно подключать произвольные инструменты, поддерживающие интерфейсы ODBC/JDBC. Для работы с SQL мы считаем Hue и TOAD для Hadoop нашими основными клиентами.

Для управления всеми потоками, которые обозначены на схеме стрелками, спроектирована подсистема ETL, состоящая из инструментов SAS (Сервер метаданных, Data Integration Studio), а также ETL-фреймворка, написанного на основе SAS и скриптов оболочки, использующих базу данных для хранение метаданных ETL-процессов.

Руководствуясь правилами, указанными в метаданных, подсистема ETL запускает процессы обработки данных как на КХД, так и на Платформе исследования данных.

В результате мы имеем комплексную систему мониторинга и управления потоками данных независимо от используемой среды (Teradata, Impala, Spark и т.д., при необходимости).



Через грабли к звездам

Кажется, выгрузить QCD легко.

Вход и выход — реляционные СУБД, принимают и передают данные через Sqoop. Судя по описанию выше, у нас все прошло очень гладко, но, конечно, не обошлось и без приключений, и это, пожалуй, самая интересная часть всего проекта.



Из СУБД, загруженной MPP — энергичного озера данных с аналитическими инструментами: делимся подробностями создания

С нашим объёмом не было никакой надежды передавать все данные целиком каждый день.

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

Для решения этой проблемы мы систематизировали объекты в зависимости от способов загрузки и ведения истории.

Затем для каждого типа мы определили правильный предикат для Sqoop и способ его загрузки в приемник.

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

Sqoop — очень качественный инструмент, но он не работает абсолютно надежно во всех случаях и сочетаниях систем.

На наших томах коннектор к Teradata работал не оптимально.

Мы воспользовались открытостью кода Sqoop и внесли изменения в библиотеки коннекторов.

Повышена стабильность соединения при перемещении данных.

По какой-то причине, когда Sqoop вызывает Teradata, предикаты не совсем корректно преобразуются в условия WHERE. Из-за этого Sqoop иногда пытается вытащить огромную таблицу и потом отфильтровать ее.

Пропатчить коннектор здесь не удалось, но мы нашли другой выход: для каждого выгружаемого объекта принудительно создаём временную таблицу с наложенным предикатом и просим Sqoop перезагрузить её.

Все MPP, и в частности Teradata, имеют функцию, связанную с параллельным хранением данных и выполнением инструкций.

Если не учесть эту особенность, то может оказаться, что всю работу возьмет на себя один логический узел кластера, из-за чего выполнение запросов станет значительно медленнее, возможно, в 100-200 раз медленнее.

Мы, конечно, не могли этого допустить, поэтому написали специальный движок, который использует ETL-метаданные QCD-таблиц и выбирает оптимальную степень распараллеливания Sqoop-задач.

Историчность хранения – дело тонкое, особенно если использовать СКД2 , несмотря на то, что Импала не поддерживает ОБНОВЛЕНИЕ и УДАЛЕНИЕ.

Мы, конечно, хотим, чтобы исторические таблицы в Data Research Platform выглядели точно так же, как в Teradata. Этого можно достичь путем комбинирования увеличения с помощью Sqoop, выделения обновленных бизнес-ключей и удаления разделов в Impala. Чтобы каждому разработчику не приходилось писать эту навороченную логику, мы упаковали ее в специальную библиотеку (на нашем ETL-сленге — «загрузчик»).

Наконец, возникает вопрос о типах данных.

Impala достаточно бесплатна в плане преобразования типов, поэтому с некоторыми трудностями мы столкнулись только с типами TIMESTAMP и CHAR/VARCHAR. Что касается даты и времени, мы решили хранить данные в Impala в текстовом формате (STRING) ГГГГ-ММ-ДД ЧЧ:ММ:СС.

Этот подход, как оказалось, позволяет использовать функции преобразования даты и времени.

Для строковых данных заданной длины оказалось, что хранение в формате STRING в Impala им ничем не уступает, поэтому мы тоже использовали его.

Обычно для организации Data Lake исходные данные копируются в полуструктурированных форматах в специальную область этапа Hadoop, после чего с помощью Hive или Impala устанавливается схема десериализации этих данных для использования в SQL-запросах.

Мы пошли по тому же пути.

Важно отметить, что не всегда имеет смысл тащить все в хранилище данных, поскольку разработка процессов копирования файлов и установки схемы обходится гораздо дешевле, чем загрузка бизнес-атрибутов в модель QCD с помощью ETL-процессов.

Когда еще неясно, в каком объеме, за какой период и с какой периодичностью необходимы исходные данные, Data Lake в описанном подходе является простым и дешевым решением.

Теперь мы регулярно загружаем в Data Lake в первую очередь источники, генерирующие пользовательские события: данные анализа приложений, логи и сценарии перехода для автодозвона и автоответчика Avaya, транзакции по картам.



Инструментарий аналитика

Мы не забыли еще об одной цели всего проекта — дать возможность аналитикам использовать все это богатство.

Вот основные принципы, которыми мы руководствовались здесь:

  • Простота использования и поддержка инструмента
  • Применимость в задачах Data Science
  • Максимальное использование вычислительных ресурсов кластера Hadoop вместо серверов приложений или компьютера исследователя.

И тут мы остановились:
  • Питон + Анаконда.

    Среда — iPython/Jupyter.

  • Р + Блестящий.

    Исследователь работает в настольной или веб-версии R Studio, Shiny используется для разработки веб-приложений, предназначенных для использования алгоритмов, разработанных в R.

  • Искра.

    Для работы с данными используются интерфейсы Python (pyspark) и R, настроенные в средах разработки, указанных в предыдущих пунктах.

    Оба интерфейса позволяют использовать библиотеку Spark ML, которая позволяет обучать модели ML в кластере Hadoop/Spark.

  • Данные в Impala доступны через Hue, Spark и из сред разработки с использованием стандартного интерфейса ODBC и специальных библиотек, таких как implyr.
В настоящее время Data Lake содержит около 100 ТБ данных из розничного хранилища, а также около 50 ТБ из ряда источников OLTP. Озеро обновляется ежедневно в инкрементном режиме.

В дальнейшем мы планируем улучшить взаимодействие с пользователем, перенести рабочие нагрузки ELT в Impala, увеличить количество источников, загружаемых в Data Lake, и расширить возможности расширенной аналитики.

В заключение хотелось бы дать несколько общих советов коллегам, которые только начинают свой путь в создании крупных хранилищ:

  • Используйте лучшие практики.

    Если бы у нас не было ETL-подсистемы, метаданных, версионного хранилища и четкой архитектуры, мы бы не смогли выполнить эту задачу.

    Лучшие практики окупаются, хотя и не сразу.

  • Помните об объемах данных.

    Большие данные могут создавать технические проблемы в неожиданных местах.

  • Следите за новыми технологиями.

    Новые решения появляются часто, не все из них полезны, но иногда встречаются настоящие бриллианты.

  • Больше экспериментируйте.

    Не доверяйте только маркетинговым описаниям решений – попробуйте сами.

Кстати, о том, как наши аналитики использовали машинное обучение и банковские данные для работы с кредитными рисками, вы можете прочитать в отдельном разделе.

почта .

Теги: #Машинное обучение #Хранилища данных #Хранение данных #Большие данные #озеро данных #vtb

Вместе с данным постом часто просматривают: