Pull to refresh

Impala vs Hive vs Spark SQL: Выбор правильного SQL движка для правильной работы в Cloudera Data Warehouse

Reading time 7 min
Views 15K
Original author: Sagar Kewalramani


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

Я приведу пример из жизни, чтобы вы лучше понимали, что я имею в виду. Примерно два года назад данные спасли жизнь дочери моего друга. Когда она родилась ей диагностировали семь пороков сердца. Благодаря новым технологиям, таким как интерактивная 3D графика, виртуальное моделирование, более интеллектуальный анализ ЭКГ, современные решения для мониторинга пациентов соблюдающих постельный режим и благодаря другим усовершенствованным медицинским процедурам, основанных на данных, она сумела пережить две операции на открытом сердце и сейчас живет здоровой жизнью. Данные спасли ей жизнь. Именно это и подталкивает меня каждый день к поиску новых инновационных решений и способов более быстрой передачи данных тем, кто в них нуждается больше остальных.

Я горжусь тем, что являюсь частью команды Cloudera Data Warehouse (CDW) работающей на платформе Cloudera Data Platform (CDP). CDP был создан с нуля как корпоративное облако данных или Enterprise Data Cloud (EDC). EDC это многофункциональный инструмент для реализации многих задач на одной платформе. Благодаря использованию гибридных и мульти-облачных систем, CDP может работать где угодно — как на платформе без операционной системы, так и в частном и публичном облаке. По мере внедрения большего количества облачных решений в рамках нашего плана развития цифровых технологий, мы видим, что гибридные и мульти-облачные решения становятся новой нормой. Однако эти комбинированные решения создают проблемы в управлении ими, что в свою очередь порождает новые риски в области безопасности, вероятность возникновения слежки за пользователем и впоследствии нарушение закона. Для решения этих проблем CDP обладает расширенными возможностями для обеспечения безопасности и контроля, которые позволят сделать доступ к данным открытым без риска нарушить чью либо политику безопасности или даже закона.

CDW on CDP — это новый сервис позволяющий создать self-service хранилища данных для команд BI аналитиков. Вы можете быстро создавать новые хранилища данных и пользоваться ими самостоятельно или предоставить к ним доступ группе лиц и пользоваться единой базой вместе c ними. Помните ли вы времена, когда можно было самостоятельно управлять хранилищем данных? Управлять им без участия платформ и необходимой для его работы инфраструктуры? Такого никогда не было. CDW сделал это возможным.

Благодаря CDW стали доступны различные движки SQL, однако с предоставлением больших возможностей выбора возникает и путаница. Давайте рассмотрим движки SQL доступные в CDW on CDP, и обсудим, какой вариант SQL больше подходит для выполнения определенной задачи.

Такой большой выбор! Impala? Hive LLAP? Spark? Что использовать и когда? Давайте разберемся.

Impala SQL Engine


Impala — это популярный движок MPP с открытым исходным кодом и широким спектром возможностей в Cloudera Distribution Hadoop (CDH ) и CDP. Impala заслужила доверие рынка благодаря low-latency highly interactive SQL-запросам. Возможности Impala очень широки, Impala не только поддерживает Hadoop Distributed File System (HDFS — распределенную файловую систему Hadoop) с Parquet, Optimized Row Columnar (ORC — оптимизированный узел хранения), JavaScript Object Notation (JSON), Avro, и текстовые форматы, но также имеет встроенную поддержку Kudu, Microsoft Azure Data Lake Storage (ADLS) и Amazon Simple Storage Service (S3). Impala обладает высоким уровнем безопасности при помощи either sentry или ranger и, как известно, может поддерживать тысячи пользователей с кластерами из сотен узлов на многпетабайтных датасетах. Давайте же рассмотрим общую архитектуру Impala.



Для проверки работоспособности кластера Impala использует StateStore. Если узел Impala по какой-либо причине переходит в режим «оффлайн», то StateStore передаст сообщение об этом по всем узлам и пропустит недоступный узел. Служба каталога Impala управляет метаданными для всех инструкций SQL для всех узлов кластера. StateStore и служба каталогов обмениваются данными с хранилищем Hive MetaStore для размещения блоков и файлов, а затем передают метаданные рабочим узлам. При поступлении запроса он передается одному из многочисленных программ согласования, где выполняется компиляция и инициируется планирование. Фрагменты плана возвращаются, и программа согласования организует его выполнение. Промежуточные результаты передаются между службами Impala и затем возвращаются.

Такая архитектура идеально подходит для тех случаев, когда нам нужны витрины данных для бизнес-аналитики для получения ответов на запросы с низким временем задержки, как это обычно бывает в случаях с использованием ad-hoc, self-service и discovery types. При таком сценарии мы имеем клиентов сообщающих нам ответы на сложные запросы от менее одной секунды до пяти секунд.

Для данных Internet of Things (IoT) и связанных с ними сценариях, Impala вместе со streaming решениями, такими как NiFi, Kafka или Spark Streaming, и соответствующими хранилищами данных, такими как Kudu, может обеспечить непрерывную конвейерную обработку со временем задержки менее чем десять секунд. Благодаря встроенным функциям чтения/записи на S3, ADLS, HDFS, Hive, HBase и многим другим, Impala является превосходным SQL-движком для использования при запуске кластера до 1000 узлов, и более 100 триллионов строк в таблицах или датасетах размером в 50BP и более.

Hive LLAP


«Live Long And Process» или «Long Delay Analytics Processing», также известная как LLAP, является механизмом выполнения под управлением Hive, который поддерживает длительные процессы используя одни и те же ресурсы для кэширования и обработки. Этот механизм обработки дает нам ответ от SQL с очень низким временем задержки, так как у нас нет времени на запуск запрашиваемых ресурсов.



Кроме того, LLAP обеспечивает и устанавливает контроль над исполнением политики безопасности, поэтому вся работа LLAP для пользователя прозрачна, что помогает Hive конкурировать по показателям производительности рабочих нагрузок даже с наиболее популярными и традиционно используемыми средствами хранения данных на сегодняшний день.

Hive LLAP предлагает самый развитый движок SQL в экосистеме больших данных. Hive LLAP создан для огромного количества данных, предоставляя пользователям широкие возможности хранилища данных Enterprise Data Warehouse (EDW), которое поддерживает преобразование данных больших объемов, выполнение долгих запросов или тяжелых SQL запросов с сотней join-ов. Hive поддерживает materialized views, суррогатные ключи и различные ограничения, аналогичные традиционным реляционным системам управления базами данных, включая встроенное кэширование для получения запроса результатов и запросов данных. Hive LLAP может уменьшить нагрузку от повторяющихся запросов сократив время ответа до доли секунды. Hive LLAP может поддерживать федеративные запросы на HDFS (распределенную файловую систему Hadoop) и о object stores, а также потоковую передачу в реальном времени, работая с Kafka и Druid.

Таким образом Hive LLAP идеально подходит в качестве решения Enterprise Data Warehouse (EDW ), в котором мы будем вынуждены столкнуться с большим количеством длительных запросов, требующих крупных преобразований или множественных join-ов между таблицами и большими датасетами. Благодаря технологии кэширования, включенной в Hive LLAP, у нас появились клиенты, которые могут сделать join 330 миллиардов записей с 92 миллиардами других записей с partition key или без него и получить результат за секунды.

Spark SQL



Spark — это высокоэффективный движок обработки данных общего назначения, служащий для поддержки работы по обработке и распределению данных и который имеет широкий спектр областей применения. Существует множество библиотек данных Spark для специалистов data science и машинного обучения, которые поддерживают higher-level programming model для быстрой разработки. Уровнем выше Spark располагаются Spark SQL, MLlib, Spark Streaming и GrapX.



Spark SQL — это модуль для структурированной обработки данных, совместимый с различными источниками данных, с поддержкой Hive, Avro, Parquet, ORC, JSON и JDBC. Spark SQL эффективен на semi-structured наборах данных и интегрирован с Hive MetaStore и NoSQL хранилищами такими как HBase. Spark часто используется с различными программными API на наших любимых языках программирования, таких как Java, Python, R и Scala.

Spark может быть очень полезен при возникновении необходимости встраивания SQL-запросов вместе с программами Spark в случае его работы с большими объемами данных и высокой нагрузкой. Spark помогает многим нашим пользователям, работающим на предприятиях входящих в Global 100, сокращать обработку потоковых данных. Объединяя это с MLlib, мы видим, как многие наши клиенты положительно отзываются о Spark, как об отличной системе способной к машинному обучению при работе с приложениями хранилища данных. Благодаря высокой производительности, низкой задержке и отличной интеграции инструментов сторонних производителей, Spark SQL обеспечивает лучшие условия для переключения между программированием и SQL.

Так какой же движок SQL использовать?



Так как вы можете комбинировать одни и те же данные в CDW на CDP, Вы можете выбрать правильный движок для каждой из типов рабочих нагрузок, таких как data engineering, традиционный EDW, ad hoc аналитика, BI дашборды, Online Analytical Processing (OLAP) или Online Transaction Processing (OLTP). На приведенной ниже диаграмме представлены некоторые принципы направленные на упрощение выбора, в соответствии с которыми движки и их механизмы неплохо подходят для каждой из поставленных целей.



Вывод


Если вы используете EDW поддерживающую BI дашборды, Hive LLAP даст Вам наилучшие результаты. Когда вам нужен ad-hoc, self-service и исследовательское хранилище данных, обратите свой взор в сторону преимуществ Impala. Если вы посматриваете на Data Engineering с долго выполняющимися запросами и без высокого параллелизма, Spark SQL — отличный выбор. Если требуется поддержка высокого параллелизма, то можно взглянуть на Hive on Tez. Ищите поддержки OLAP с данными временного ряда, добавьте Druid, а если вы ищете OLTP с низким временем задержки и высокий параллелизмом, то возможно Вам стоит добавить Phoenix.

Итого — существует множество движков SQL в CDW на CDP, и это сделано нарочно. Предоставление выбора до принятия решения — это лучший способ оптимизации процессов для высокопроизводительных приложений с много поточным процессом обработки на массивных хранилищах данных. CDW в CDP обеспечивает общий доступ к данным и совместное их использование под единой системой безопасности, управления, отслеживания данных и метаданных, что позволяет сочетать компоненты SQL в оптимизированных хранилищах. Тем самым это дает пользователю свободу выбрать лучший движок SQL в зависимости от его рабочих нагрузок.
Tags:
Hubs:
+7
Comments 3
Comments Comments 3

Articles