Apache Drill

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:40, 17 января 2019.
Apache Drill
330px-Apache Drill logo.svg.png
Разработчики: Apache Software Foundation
Выпущена: 19 May 2015 (2015-05-19)
Постоянный выпуск: 1.14 / 5 August 2018 (2018-08-05)
Состояние разработки: Активно
Написана на: Java
Операционная система: Кросс-платформенное программное обеспечение
Размер дистрибутива: 324MB
Локализация: Английский
Тип ПО: Open-source software
Лицензия: Apache License
Веб-сайт Apache Drill

Apache Drill - это механизм SQL запросов, предназначенный для большого объёма данных. Разработан для поддержки, высокопроизводительного анализа и реструктуризации Big Data, приходящих от современных приложений [Источник 1].

Особенности Apache Drill

  1. Не требует схемы данных или спецификации формата хранения чтобы начать выполнять запрос. Некоторые форматы, такие как Parquet, JSON (JavaScript Object Notation), AVRO, и NoSQL БД содержат описание формата хранения данных внутри себя, что позволяет Drill вычислить это динамически. Так как схема данных в запросе может меняться, многие команды разработаны с целью переконфигурирования при смене схемы данных.
  2. Не использует централизованную систему хранения метаданных. Они доставляется от плагинов, передающих запрос хранилищу: полная, частичная и децентрализованная информация. Возможно делать запросы к нескольким узлам, собрать информацию из их дочерних веток либо файлов.
  3. Поддерживает множество нереляционных баз данных и файловых систем, включая HBase, MongoDB, MapR-DB, HDFS, MapR-FS, Amazon S3, Azure Blob Storage, Google Cloud Storage, Swift, NAS, а так же локальные файлы. Один запрос может включать данные из нескольких хранилищ. К примеру, можно объединить информацию о пользователях в MongoDB с каталогом журнала событий из Hadoop.

Архитектура

Drill включает в себя распределенную среду исполнения, предназначенную для крупномасштабной обработки данных. В основу Apache Drill входит служба «Drillbit», которая отвечает за прием запросов от клиента, обработку запросов и возврат результатов клиенту. Служба Drillbit может быть установлена ​​и запущена на всех требуемых узлах в кластере Hadoop для формирования распределенной кластерной среды. Когда Drillbit работает на каждом узле данных в кластере, Drill может максимизировать местоположение данных во время выполнения запроса, не перемещая данные по сети или между узлами. Drill использует Apache ZooKeeper для поддержания членства в кластере и проверки работоспособности [Источник 2].

Динамическое распознавание схемы

Не требует спецификации схемы или типа данных, чтобы запустить процесс выполнения запроса. Drill начинает обработку данных в процессе записи и определяет схему во время обработки. Само описательные форматы данных, такие как базы данных Parquet, JSON, AVRO и NoSQL, имеют схему, указанную как часть самих данных, которые динамически используются во время запроса. Поскольку схема может меняться в ходе запроса, многие операторы предназначены для перенастройки при изменении схем.

Гибкая модель данных

Позволяет получить доступ к вложенным атрибутам данных, как если бы они были столбцами SQL, и предоставляет интуитивно понятные расширения, что упрощает работу с ними. С архитектурной точки зрения Drill предоставляет собой гибкую иерархическую модель столбчатых данных, которая может представлять собой сложные, динамично развивающиеся и изменяющиеся модели данных. Реляционные данные в Drill рассматриваются как особый или упрощенный случай сложных данных.

Не централизованные метаданные

Не имеет единого требования к метаданным. Они выводятся через плагины, соответствующие источникам данных. Плагины хранилищ предоставляют множество метаданных, начиная от полных метаданных (Hive), частичных метаданных (HBase) или центральных метаданных (файлов). Децентрализованные метаданные не привязаны к одному репозиторию Hive, можно запросить несколько репозиториев сразу, а затем объединить данные с информацией из таблиц HBase или с файлом в распределенной файловой системе. Также можно использовать SQL DDL-инструкции для создания метаданных, которые организованы так же, как и традиционная база данных.

Расширяемость

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

Запросы Drill

Клиент или приложение отправляет SQL запрос в Drillbit в кластере Drill. Drillbit - это процесс, выполняющийся на каждом активном узле Drill, который координирует, планирует и выполняет запросы, а также распределяет работу запросов в кластере, чтобы максимизировать локальность данных.

Следующая схема (рисунок 1) представляет собой связь между клиентами, приложениями и Drillbits:

Рисунок 1 – схема взаимодействия

Drillbit, который получает запрос от клиента или приложения, становится Foreman для запроса и управляет им. Парсер в Foreman анализирует SQL, применяя специальные правила для преобразования определенных операторов SQL в конкретный синтаксис логических операторов, который понимает Drill. Набор логических операторов формирует логический план. Он описывает работу, необходимую для генерации результатов запроса, и определяет, какие источники данных и операции должны применяться. Foreman отправляет логический план в оптимизатор затрат, чтобы оптимизировать порядок операторов SQL. Оптимизатор применяет различные типы правил для перестановки операторов и функций в оптимальный план. Затем преобразует логический план в физический план, который описывает, как выполнить запрос. Параллелизатор в Foreman разбивает физический план на основной и второстепенный фрагмент. Эти фрагменты создают многоуровневое дерево, которое перезаписывает запрос и выполняет его параллельно с настроенными источниками данных, отправляя результаты обратно клиенту или приложению [Источник 3].

Основные фрагменты

Основной фрагмент - это концепция, которая представляет собой этап выполнения запроса. Каждый этап может состоять из одной или нескольких операций, которые Drill должен обработать для выполнения запроса. Каждому основному фрагменту присваивается MajorFragmentID. Drill использует оператор обмена для разделения основных фрагментов. Обмен - это изменение местоположения данных и/или распараллеливание физического плана. Основные фрагменты фактически не выполняют никаких задач. Каждый основной фрагмент делится на один или несколько второстепенных фрагментов, которые фактически выполняют операции, необходимые для завершения запроса и возвращения результатов обратно клиенту.

Второстепенные фрагменты

Второстепенный фрагмент - это логическая единица работы, которая выполняется внутри потока. Логическая единица работы в Drill также называется срезом. Drill присваивает каждому второму фрагменту MinorFragmentID. Параллелизатор в Foreman создает один или несколько второстепенных фрагментов из основного фрагмента во время выполнения, разбивая основной фрагмент на столько мелких фрагментов, сколько он может с пользой запускать одновременно в кластере. Второстепенные фрагменты содержат один или несколько реляционных операторов, которые выполняют одну из таких операций, как сканирование, фильтрация, объединение или группировка. Каждый оператор имеет конкретный тип оператора и OperatorID. ID определяет взаимосвязь второстепенного фрагмента и оператора. Нельзя изменить количество второстепенных фрагментов в плане выполнения. Однако можно просмотреть профиль запроса в веб-консоли Drill и изменить некоторые параметры конфигурации, которые изменяют поведение второстепенных фрагментов, например максимальное количество срезов.

Исполнение второстепенных фрагментов

Второстепенные фрагменты могут выполняться как корневые, промежуточные или фрагменты листьев. Структура представлена на рисунке 2. Дерево выполнения содержит только один корневой фрагмент. Узлы пронумерованы от корня, причем индекс корня равен нулю. Данные перетекают от листовых фрагментов к корневому фрагменту. Корневой фрагмент запускается в Foreman и получает входящие запросы, считывает метаданные из таблиц, перезаписывает запросы и направляет их на следующий уровень в дереве. Промежуточные фрагменты начинают исполняться, когда данные доступны или подаются к ним из других фрагментов. Они выполняют операции над данными, а затем отправляют данные вниз по иерархии. Они также передают агрегированные результаты корневому фрагменту, который выполняет дополнительную агрегацию и предоставляет результаты запроса клиенту или приложению. Листовые фрагменты параллельно сканируют таблицы фрагментов и связываются со слоем памяти или получают доступ к данным на локальном диске.

Рисунок 2 – дерево исполнения второстепенных фрагментов

Быстрый старт

С помощью Apache Drill для создания пробного запроса уйдет 10 минут. Необходимо установить Drill на локальной машине для работы с единым узлом, так как для этого не потребуется дополнительных настроек продукта [Источник 4].

Информация для установки

Допустимые операционные системы: Linux, Microsoft Windows или Mac OX. Для установки централизованной системы запросов, необходимы следующие требования:

  • (Обязательно) Оracle или OpenJDK 8.
  • (Обязательно) Кворум серверов Apache ZooKeeper.
  • (Рекоммендуется) Использовать кластер Hadoop.
  • (Рекоммендуется) Использовать DNS.

Архив уже содержит JSON/Parquet запросы, которые можно выполнить сразу же после установки. После установки запустите командную строку Drill, которая представляет собой консольную утилиту на Java для подключения к реляционным БД и создания SQL-запросов. Использует SQL:2011 с расширениями для иерархической структуры данных и других возможностей.

Требования для установки:

Linux, Windows или Mac OX: Oracle JDK version 8 Только для Windows :

  • JAVA_HOME переменная среды, указывающая путь к JDK
  • PATH переменная среды, указывающая путь к папке "bin" JDK
  • Распаковщик a .tar.gz file

Проверка версии Java

Необходимо убедиться, что используется Java с версией не ниже восьмой. При помощи командной строки это можно сделать следующим образом:

java -version

Выводом будет:

java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0_7965-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

Установка и запуск на Linux/Mac

  1. Переключитесь на директорию, где будет установлен Drill
  2. Скачайте последнюю версию, используя приведённые ниже команды:
    wget http://apache.mirrors.hoobly.com/drill/drill-1.14.0/apache-drill-1.14.0.tar.gz
    curl -o apache-drill-1.14.0.tar.gz http://apache.mirrors.hoobly.com/drill/drill-1.14.0/apache-drill-1.14.0.tar.gz
    Либо скачайте по ссылке
  3. Скопируйте файл в директорию, где планируете установить Drill
  4. Распакуйте архив. Используйте sudo если необходимоm
    tar -xvzf <.tar.gz file name>

Распаковка запустит установку. Теперь можно запускать!

Для встроенного режима используйте drill-embedded команду:

  1. Перейдите в папку с установленным Drill
    cd apache-drill-<version>
  2. Используйте команду выше
    bin/drill-embedded

Далее можно выполнять запросы.

Установка и запуск на Windows

Для установки Drill на Windows необходимо:

  1. Для начала необходимо установить JAVA_HOME переменную.
  2. Скачать последнюю версию можно по ссылке.
  3. Необходимо переместить файл apache-drill-<version>.tar.gz в директорию, в которую далее будет производиться установка.
  4. После распаковки архива TAR.GZ будет создана директорию для установки программного обеспечения.

Пример пробного запуска приведен на рисунке 3.

Рисунок 3 – пример запуска Drill на Windows

Примечание: для завершения работы используете команду
!quit

Источники

  1. Англоязычная википедия // Apache_Drill [2018-2018]. Дата обновления: 06.09.2018. URL: Apache Drill (дата обращения: 07.10.2018)
  2. Введение в работу Drill от разработчиков // GitHub [2018-2018]. Дата обновления:08.12.2018. URL: GitHub Apache Drill (дата обращения 07.10.2018)
  3. Инструкция выполнения запросов от разработчиков // GitHub [2018-2018]. Дата обновления:08.12.2018. URL: Запросы Drill (дата обращения: 09.10.2018)
  4. Инструкция по установке системы // GitHub [2018-2018]. Дата обновления:08.12.2018. URL: Установка Apache Drill (дата обращения: 09.10.2018)