Apache Tajo

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:57, 17 января 2019.
Apache Tajo
Tajo.png
Разработчики: Apache Software Foundation
Выпущена: 2013; 6 years ago (2013)
Постоянный выпуск: 0.11.3 / 17 March 2018 года; 17 months ago (2018-03-17)
Состояние разработки: Активный
Операционная система: Linux, MacOS
Тип ПО: SQL-on-Hadoop хранилище данных
Веб-сайт tajo.apache.org

Apache Tajo – это система распределенного хранилища данных, которая использует HDFS (распределенную файловую систему Hadoop) в качестве уровня хранения и имеет свой собственный механизм выполнения запросов вместо структуры MapReduce.

Описание

Apache Tajo является надежной реляционной и распределенной системой хранения данных для Apache Hadoop. Tajo предназначен для низкозатратных и масштабируемых узкоспециализированных запросов, то есть запросов, созданных для решения единоразовой проблемы, онлайн-агрегации и ETL (процесс извлечения-преобразования-нагрузки) для наборов больших данных, хранящихся в HDFS и других источниках данных. Поддерживая стандарты SQL и применяя передовые методы базы данных, Tajo позволяет напрямую контролировать распределенное выполнение и поток данных в различных стратегиях оценки запросов и оптимизации.[Источник 1]

Последняя версия Tajo имеет большую возможность подключения к программам Java и сторонним базам данных, таким как Oracle и PostgreSQL.

Особенности

  • Быстрота и эффективность:
    • Полностью распределенный механизм обработки запросов SQL;
    • Расширенная оптимизация запросов, такая как оптимизация на основе затрат и прогрессивных запросов;
    • Интерактивный анализ по разумному набору данных.
  • Масштабируемость:
    • Отказоустойчивость и динамическое планирование для длительных запросов;
    • Внекорневые алгоритмы для наборов данных, больших, чем основная память.
  • Совместимость:
    • Поддержка доступа к сети Hive;
    • Поддержка драйверов JDBC;
    • Поддержка различных форматов файлов, таких как CSV, JSON, RCFile, SequenceFile, ORC и Parquet.
  • Простота:
    • Интерактивная оболочка;
    • Удобная утилита резервного копирования / восстановления;
    • Асинхронный/синхронный Java API.

Архитектура

Терминология

  • Блок выполнения:

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

  • SubQuery:

Представляет собой экземпляр управления и конечный автомат для блока выполнения.

  • QueryUnitAttempt:

QueryUnitAttempt - это способ выявления неудачных или успешных задач. Как и MapReduce, каждый выполняемый запрос (задача) имеет экземпляр попытки и идентификатор попытки. Задание может быть перезапущено, если оно не выполнено.

Класс TaskRunnerLaunchImpl

Основной задачей TaskRunnerLaunchImpl является запуск TaskRunner. Класс TaskRunnerLaunchImpl обрабатывает два события CONTAINER_REMOTE_LAUNCH и CONTAINER_REMOTE_CLEANUP, которые приводят к запуску TaskRunner и закрытию запущенного TaskRunner соответственно. Эти события происходят из метода SubQuery :: allocateContainers (SubQuery).

Task

В TaskRunner из ответа вызова функции getTask () создается задача, которая содержит три основных атрибута:

  • Логический план блока выполнения, который создал задачу.
  • Фрагмент - входной путь, диапазон смещения и схема. Доступно, только если блок выполнения является листом.
  • URI-выборки - HTTP URI для получения результатов, обработанных TaskRunners предыдущего блока выполнения. Доступно, только если блок выполнения не является листом.

Изначально задача регистрирует URI-выборки для fetchLauncher, чтобы вытащить данные и восстановить логический план. Затем из логического плана создается физическое дерево операторов через PhysicalPlannerImpl. И наконец, вызывается метод Task :: run (), а затем статус задачи изменяется на RUNNING.

Кроме того, запущенная задача периодически отправляет отчет statusUpdate в TaskRunnerListener через RPC. Отчет StatusUpdate содержит статус и некоторую статистику выполняемой задачи. Если запущенная задача не выполнислась, TaskRunner отправляет сообщение «fatal» в TaskRunnerListenerImpl. Если задача завершена, TaskRunner отправляет сообщение «done» в TaskRunnerListenerImpl.

TaskRunner

Для каждого блока выполнения TaskRunner запускается с помощью Yarn's ContainerManager. TaskRunner обрабатывает задачу сразу после получения. Если TaskRunner имеет доступный слот, он отправляет getTask () в TaskRunnerListner. Если TaskRunner получает ответ функции getTask (), TaskRunner создает экземпляр задачи из ответа.[Источник 2]

TaskListenerImpl

Рисунок 1 - Схема последовательности сообщений getTask

TaskListenerImpl получает сообщения, отправленные из нескольких TaskRunners. Он передает полученное сообщение как события некоторым обработчикам событий, таким как QueryUnitAttempt и TaskScheduler.

В текущей реализации существует четыре сообщения:

  • getTask:

Когда TaskRunner имеет пустой слот, TaskRunner отправляет это сообщение в TaskListenerImpl. Это сообщение преобразуется в объект TaskRequestEvent, который передается экземпляру TaskSchedulerImpl $ TaskRequests.

Рисунок 2 - Схема последовательности сообщений statusUpdate, done и fatal
  • statusUpdate:

Задача периодически отправляет это сообщение в TaskRunnerListener через RPC. Это сообщение преобразуется в TaskAttemptStatusUpdateEvent, который передается экземпляру QueryUnitAttempt, соответствующему идентификатору, включенному в сообщение statusUpdate.

  • done:

Когда попытка выполнения задачи завершена, задача отправляет это сообщение в TaskListenerImpl через RPC. Это сообщение преобразуется в объект TaskCompletionEvent, который передается экземпляру QueryUnitAttempt, соответствующему идентификатору, включенному в выполненное сообщение.

  • fatal:

Когда задача не выполнена, задача отправляет это сообщение в TaskRunnerListenerImpl через RPC. Это сообщение преобразуется в объект TaskFatalErrorEvent, который также передается экземпляру QueryUnitAttempt, соответствующему идентификатору, включенному в фатальное сообщение.

Примеры применения

Рисунок 3 - Сравнение производительности Hive, Impala или Tajo

  • Хранилище данных и анализ данных:

Корейская компания SK Telecom запустила Tajo для данных объёма 1,7 терабайта и обнаружила, что она может выполнять запросы с большей скоростью, чем Hive или Impala.

  • Обнаружение данных:

Корейская музыкальная потоковая служба Melon использует Tajo для аналитической обработки. Tajo выполняет задания ETL в 1,5-10 раз быстрее, чем Hive.

  • Анализ журналов:

Bluehole Studio, корейская компания, разработала TERA - многопользовательскую онлайн-игру. Компания использует Tajo для анализа журналов игр и поиска основных причин прерываний обслуживания.[Источник 3]

Установка и начало работы

Подготовка к установке

Для установки Apache Tajo у вас должно быть установлено следующее программное обеспечение:

  • Hadoop версии 2.3 или выше;
  • Java версии 1.7 или выше;

А так же операционная система Linux или MacOS.

Процесс установки

Открываем терминал. Проверим установленную версию Java:

$ java -version

Проверим установленную версию Hadoop:

$ hadoop version 

Apache Tajo предоставляет два режима исполнения - локальный режим и полностью распределенный режим. После проверки установки Java и Hadoop необходимо выполнить следующие шаги для установки кластера Tajo. Локальный экземпляр Tajo требует очень простых конфигураций.

Загрузите последнюю версию Tajo. Для этого необходимо перейти по ссылке Apache Tajo и скачать файл «tajo-0.11.3.tar.gz».

После скачивания необходимо извлечь tar-файл, используя следующие команды:

$ cd opt/ 
$ tar tajo-0.11.3.tar.gz 
$ cd tajo-0.11.3 

Далее надо указать путь Hadoop и Java к файлу "conf/tajo-env.sh":

$ cd tajo-0.11.3 
$ vi conf/tajo-env.sh
 
# Hadoop home. Required 
export HADOOP_HOME = /Users/path/to/Hadoop/hadoop-2.6.2
 
# The java implementation to use.  Required. 
export JAVA_HOME = /path/to/jdk1.8.0_92.jdk/  

После внесения изменений сохраните файл и закройте терминал.

Начало работы с Apache Tajo

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

$ bin/start-tajo.sh  

Вы получите ответ, подобный следующему:

Starting single TajoMaster 
starting master, logging to /Users/path/to/Tajo/tajo-0.11.3/bin/../ 
localhost: starting worker, logging to /Users/path/toe/Tajo/tajo-0.11.3/bin/../logs/
 
Tajo master web UI: http://local:26080 
Tajo Client Service: local:26002 

Теперь введите команду «jps», чтобы увидеть список работающих демонов:

$ jps  
1010 TajoWorker 
1140 Jps 
933 TajoMaster

Установка прошла успешно.

Источники

  1. Apache Tajo™: A big data warehouse system on Hadoop //Apache. Дата обновления: 09.09.2018. URL: http://tajo.apache.org/ (дата обращения: 08.10.2018)
  2. Tajo Architecture //Сwiki. Дата обновления: 21.06.2018. URL: https://cwiki.apache.org/confluence/display/TAJO/Tajo+Architecture (дата обращения: 08.10.2018)
  3. Apache Tajo Enters the SQL-on-Hadoop Space //Gartner. Дата обращения: 31.07.2018. URL: https://blogs.gartner.com/nick-heudecker/apache-tajo-enters-the-sql-on-hadoop-space/ (дата обращения: 08.10.2018)