Difference between Apache Hive and Apache Spark SQL
Apache Hive is a data warehouse device constructed on the pinnacle of Apache Hadoop that enables convenient records summarization, ad-hoc queries, and the evaluation of massive datasets saved in a number of databases and file structures that combine with Hadoop, together with the MapR Data Platform with MapR XD and MapR Database. Hive gives an easy way to practice structure to massive quantities of unstructured facts and then operate batch SQL-like queries on that data.
Spark SQL brings native assist for SQL to Spark and streamlines the method of querying records saved each in RDDs (Spark’s allotted datasets) and in exterior sources. Spark SQL effortlessly blurs the traces between RDDs and relational tables. Unifying these effective abstractions makes it convenient for developers to intermix SQL instructions querying exterior information with complicated analytics, all inside a single application.
Apache Hive 3 Architecture
With the introduction of Apache Hive 3, Apache Hadoop has introduced different new features to address the growing needs of enterprise data warehouse systems. This blog post talks about several architectural changes occurring in Apache Hive 3 which will change how applications and users interact with Apache Hive.
Table of Contents
Execution Engine changes
The previous version of Hadoop 1 and 2 had MapReduce as one of the engines in Apache Hive. Apache Tez is the default Hive execution engine in Apache Hive 3. MapReduce is not supported in the new version of Hive. It supports directed acyclic graphs (DAGs) and data transfer primitives which improve SQL(Structured Query Language) queries using Hive.
Hive query gets executed in the below steps.
- Hive compiles the given query written in HQL (Hive Query Language)
- Apache Tez executes the query (Yet Another Resource Negotiator) allocates the required resources for applications across the Hadoop cluster and enables authorization for Hive jobs in YARN queues
- Apache Hive updates the data in HDFS or the Hive warehouse depending upon whether the table type is Internal or external table
- Hive returns the results over the JDBC (Java Database Connectivity) connection once all of these steps are executed,
Design changes that affect security
Hive 3 has done several architectural changes to improve security.
- It has tightly controlled file system and computer memory resources, replacing the flexible boundaries that existed in the earlier system
- Hive 3 provides optimized workloads in shared files and YARN containers.
Hive 3 meets customer demands for concurrency improvements, ACID support for GDPR (General Data Protection Regulation), render security, and other features by tightly controlling the file system, and computer memory resources, and using Apache Ranger as a security layer.
Transaction processing changes and Improvements
Hive 3 has mature versions of ACID (Atomicity, Consistency, Isolation, and Durability) transaction processing and LLAP(Live Long and Process) capability. ACID-based tables facilitate compliance with the right to be forgotten requirement of the GDPR (General Data Protection Regulation). Maintenance becomes easier in Hive 3 since we do not need to bucket ACID tables.
Hive client changes
Hive 3 only supports the thin client Beeline for running Hive queries and administrative commands from the command line.
Beeline uses a JDBC connection to Hive Server to execute all commands. Hive Server is responsible for Parsing, compiling, and executing operations. Beeline supports the same command-line options as the Hive CLI, with one exception. It does not support the Hive Metastore configuration changes.
If we want to enter supported Hive CLI commands, we have to enter
Beeline using the hive keyword, command option, and command. For example, hive -e set .
There are several advantages of using Beeline instead of thick client CLI (Command Line Interface) including the following.
- We now have to maintain only the JDBC client instead of maintaining the entire Hive code base.
- Now Hive takes less time to start as the entire hive code base is not involved in using Beeline.
A thin client architecture also helps to secure data in these ways:
- In the Hive 3 Session state, internal data structures, and passwords, reside on the client instead of the server.
- As there are a few daemons required for executing queries, it simplifies monitoring and debugging.
In Hive 3, Hive Server enforces whitelist and blacklist settings that we can change using SET commands. Blacklist settings help to restrict memory configurations that will prevent any Hive Server instability. We can configure multiple Hive Server instances with different whitelists and blacklists to establish different levels of stability.
Apache Hive Metastore changes
Hive Server now uses a remote instead of an embedded metastore because of which Ambari no longer starts the metastore using hive.metastore.uris=’ ‘.
We can no longer set key=value commands on the command line to configure Hive Metastore. If we need to configure any properties, we need to configure that in hive-site.xml. The Hive catalog resides in the RDBMS based Hive Metastore. Hive can take advantage of RDBMS resources in cloud deployments using this new architecture.
Spark catalog changes
Apache Spark and Hive now use independent catalogs for accessing Spark SQL or Hive tables on the same or different platforms. A table created by Spark resides in the Spark catalog, whereas a table created by Hive resides in the Hive catalog. These tables are interoperable, although they are independent.
You cannot directly access the ACID and external tables using Spark. In order to access these tables from Hive, we need to use the Hive Warehouse Connector.
Query execution of batch and interactive workloads
Hive filters and cache similar or identical queries and does not recompute the data that has not changed. This caching of repetitive queries can reduce the load substantially when a hundred or thousands of users of BI tools and web services query Hive.
Deprecated, unavailable, or unsupported interfaces
Following are the deprecated, unavailable, or unsupported interfaces in Hive 3
Apache Hive — подробное руководство
Hive — это широко используемый в бизнесе инструмент анализа больших данных, и это отличное место для начала, если вы новичок в больших данных. В этом уроке по Apache Hive рассматриваются основы Apache Hive, зачем нужен куст, его функции и все остальное, что вам следует знать.
Давайте сначала разберемся с инфраструктурой Hadoop, на которой построен Apache Hive.
Apache Hadoop
Apache Hadoop — это бесплатная и открытые источники платформа для хранения и обработки больших наборов данных размером от гигабайт до петабайт. Hadoop позволяет объединять множество компьютеров в кластеры для параллельного анализа огромных наборов данных, вместо того чтобы хранить и анализировать данные на одном большом компьютере.
MapReduce и распределенная файловая система Hadoop — это два компонента:
- Уменьшение карты – MapReduce — это метод параллельного программирования для обработки огромных объемов организованных, частично структурированных и неструктурированных данных на обычных аппаратных кластерах.
- HDFS – HDFS (распределенная файловая система Hadoop) — это компонент инфраструктуры Hadoop, который хранит и обрабатывает данные. Это отказоустойчивая файловая система, работающая на стандартном оборудовании.
Различные подпроекты (инструменты) в экосистеме Hadoop, включая Sqoop, Pig и Hive, используются для поддержки модулей Hadoop.
- Hive — Hive — это платформа для написания сценариев в стиле SQL, выполняющих вычисления MapReduce.
- Свинья – Pig – это процедурный язык программирования, который можно использовать для создания сценария для процессов MapReduce.
- Скуп — Sqoop — это инструмент для импорта и экспорта данных между HDFS и RDBMS.
Что такое Апачский улей?
Apache Hive — это программа с открытым исходным кодом. информационное хранилище программа для чтения, записи и управления огромными наборами данных, хранящихся непосредственно в распределенной файловой системе Apache Hadoop (HDFS) или других системах хранения данных, таких как Apache HBase.
Разработчики SQL могут использовать Hive для создания инструкций Hive Query Language (HQL) для запросов и анализа данных, которые сопоставимы с обычными инструкциями SQL. Он был создан, чтобы упростить программирование MapReduce за счет устранения необходимости изучения и написания длинного кода Java. Вместо этого вы можете написать свои запросы на HQL, а Hive построит карту и сократит функции для вас.
SQL-подобный интерфейс Apache Hive стал золотым стандартом для выполнения специального поиска, обобщения и анализа данных Hadoop. При включении в облако вычислительные сети, это решение особенно рентабельно и масштабируемо, поэтому многие фирмы, включая Netflix и Amazon, продолжают развивать и улучшать Apache Hive.
История компании
Во время работы в Facebook Джойдип Сен Сарма и Ашиш Тусу совместно создали Apache Hive. Они оба поняли, что для получения максимальной отдачи от Hadoop им придется создать несколько довольно сложных задач Java Map-Reduce. Они поняли, что не смогут обучить свои быстрорастущие команды инженеров и аналитиков навыкам, которые им потребуются для использования Hadoop в масштабах всей компании. Инженеры и аналитики часто использовали SQL в качестве пользовательского интерфейса.
Хотя SQL мог удовлетворить большинство потребностей в аналитике, разработчики также намеревались использовать возможности программирования Hadoop. Apache Hive возник из-за этих двух целей: декларативный язык на основе SQL, который также позволял разработчикам вносить свои собственные сценарии и программы, когда SQL было недостаточно.
Он также был разработан для хранения централизованных метаданных (на основе Hadoop) обо всех наборах данных в компании, чтобы упростить создание организаций, управляемых данными.
Как работает Apache Hive?
Короче говоря, Apache Hive преобразует входную программу, написанную на языке HiveQL (подобном SQL), в одну или несколько задач Java MapReduce, Tez или Spark. (Все эти механизмы выполнения совместимы с Hadoop YARN.) После этого Apache Hive упорядочивает данные в таблицы для распределенной файловой системы Hadoop (HDFS) и выполняет задачи в кластере, чтобы получить ответ.
Данные
Таблицы Apache Hive устроены так же, как организованы таблицы в реляционной базе данных, с единицами данных, размер которых варьируется от большего к меньшему. Базы данных состоят из таблиц, разделенных на разделы, которые далее делятся на сегменты. HiveQL (язык запросов Hive) используется для доступа к данным, которые можно изменить или добавить. Данные таблицы сериализуются в каждой базе данных, и каждая таблица имеет свой собственный каталог HDFS.
Архитектура
Теперь мы поговорим о самом важном аспекте архитектуры Hive. Компоненты Apache Hive следующие:
Метастор — Он отслеживает информацию о каждой таблице, такую как ее структура и расположение. Метаданные раздела также включены в Hive. Это позволяет драйверу отслеживать ход выполнения различных наборов данных, разбросанных по кластеру. Данные хранятся в обычном формате РСУБД. Метаданные куста чрезвычайно важны для драйвера, чтобы отслеживать данные. Резервный сервер регулярно дублирует данные, чтобы их можно было восстановить в случае потери данных.
Драйвер – Операторы HiveQL принимаются драйвером, выполняющим функции контроллера. Устанавливая сеансы, драйвер инициирует выполнение инструкции. Он отслеживает продолжительность жизни и прогресс руководителя. Во время выполнения инструкции HiveQL драйвер сохраняет необходимые метаданные. Он также служит точкой сбора данных или результатов запроса после процесса сокращения.
составитель — Он выполняет компиляцию запроса HiveQL. Теперь запрос преобразован в план выполнения. Задачи указаны в плане. Он также включает шаги, которые должен выполнить MapReduce для получения результата, переведенного запросом. Компилятор Hive (AST) преобразует запрос в абстрактное синтаксическое дерево. Преобразует AST в направленный ациклический граф после проверки совместимости и ошибок времени компиляции (DAG).
Оптимизатор – Он оптимизирует DAG, выполняя различные изменения в плане выполнения. Он сочетает в себе преобразования для повышения эффективности, такие как преобразование конвейера соединений в одно соединение. Для повышения скорости оптимизатор может разделить действия, такие как применение преобразования к данным перед выполнением операции сокращения.
душеприказчик – Исполнитель запускает задачи после завершения компиляции и оптимизации. Задания конвейеризируются Исполнителем.
CLI, пользовательский интерфейс и Thrift Server – Интерфейс командной строки (CLI) — это пользовательский интерфейс, который позволяет внешнему пользователю взаимодействовать с Hive. Экономичный сервер Hive, аналогичный протоколам JDBC или ODBC, позволяет внешним клиентам связываться с Hive через сеть.
Безопасность
Apache Hive интегрирован с системой безопасности Hadoop, которая использует протокол Kerberos для взаимной проверки подлинности клиент-сервер. HDFS диктует разрешения для вновь созданных файлов в Apache Hive, позволяя вам утверждать их пользователем, группой и другими пользователями.
Ключевые характеристики
- Hive поддерживает внешние таблицы, которые позволяют обрабатывать данные, не сохраняя их в HDFS.
- Это также позволяет сегментировать данные на уровне таблицы для увеличения скорости.
- Apache Hive превосходно удовлетворяет потребность Hadoop в низкоуровневом интерфейсе.
- Hive упрощает обобщение данных, запросы и анализ.
- HiveQL не требует навыков программирования; достаточно простого понимания запросов SQL.
- Мы также можем использовать Hive для выполнения специальных запросов для анализа данных.
- Он масштабируемый, знакомый и адаптируемый.
- HiveQL не требует навыков программирования; достаточно простого понимания запросов SQL.
Преимущества
Apache Hive позволяет создавать отчеты на конец дня, ежедневные оценки транзакций, специальные поиски и анализ данных. Комплексные аналитические данные, предоставляемые Apache Hive, дают значительные конкурентные преимущества и упрощают реагирование на требования рынка.
Вот некоторые из преимуществ наличия такой информации:
- Простота в использовании – Благодаря языку, похожему на SQL, запрос данных прост для понимания.
- Ускоренная вставка данных — Поскольку Apache Hive считывает схему без проверки типа таблицы или определения схемы, данные не нужно считывать, анализировать и сериализовать на диск во внутреннем формате базы данных. Напротив, в обычной базе данных данные должны проверяться каждый раз при их добавлении.
- Превосходная масштабируемость, гибкость и экономичность – Поскольку данные хранятся в HDFS, Apache Hive может хранить сотни петабайт данных, что делает его гораздо более масштабируемым вариантом, чем обычная база данных. Apache Hive как облачная служба Hadoop позволяет клиентам быстро включать и выключать виртуальные серверы в соответствии с меняющимися рабочими нагрузками.
- Обширная работоспособность – Большие наборы данных могут обрабатывать до 100,000 XNUMX запросов в час.
Ограничения
- Как правило, запросы Apache Hive имеют очень большую задержку.
- Поддержка подзапросов ограничена.
- Запросы в реальном времени и изменения на уровне строк недоступны в Apache Hive.
- Материализованные представления не поддерживаются.
- В улье действия обновления и удаления не поддерживаются.
- Не предназначен для OLTP (онлайн-переходный процесс).
Начало работы с Apache Hive
Apache Hive — надежный партнер Hadoop, который упрощает и оптимизирует ваши рабочие процессы. Чтобы получить максимальную отдачу от Apache Hive, необходима бесшовная интеграция. Первый шаг — перейти к веб-сайт Честного ЗНАКа .
1. Установка Hive из стабильной версии
Начните с загрузки последней стабильной версии Hive с одного из зеркал загрузки Apache (см. Выпуски улья). Затем архив необходимо распаковать. Это создаст подпапку с именем hive-xyz (где xyz — номер версии):
Установите переменную среды HIVE_HOME так, чтобы она указывала на каталог установки:
Наконец, добавьте $HIVE_HOME/bin в свой PATH :
2. Работающий улей
Hive использует Hadoop, поэтому:
- у вас должен быть Hadoop на вашем пути ИЛИ
- alt=»4 2″ width=»417″ height=»23″ />
Создание таблицы куста
генерирует таблицу с именем pokes с двумя столбцами, первый из которых является целым числом, а второй — строкой.
Просмотр таблиц
Список всех таблиц
Изменение и удаление таблиц
Имена таблиц могут быть изменены, а столбцы могут быть добавлены или заменены:
Стоит отметить, что REPLACE COLUMNS заменяет все существующие столбцы, изменяя только структуру таблицы, а не данные. В таблице должен использоваться родной SerDe. REPLACE COLUMNS также можно использовать для удаления столбцов из схемы таблицы:
Удаление таблиц
В Apache Hive есть много дополнительных операций и функций, о которых вы можете узнать, посетив официальный сайт.
Заключение
Определение Hive — это программный интерфейс данных для запросов и анализа огромных наборов данных, созданный поверх Apache Hadoop. Профессионалы предпочитают его другим программам, инструментам и программному обеспечению, поскольку он в основном предназначен для обширных данных Hive и прост в использовании.
Надеемся, что это руководство поможет вам начать работу с Apache Hive и сделать ваши рабочие процессы более эффективными. Дайте нам знать об этом в комментариях.
Big Data от A до Я. Часть 5.1: Hive — SQL-движок над MapReduce
Привет, Хабр! Мы продолжаем наш цикл статьей, посвященный инструментам и методам анализа данных. Следующие 2 статьи нашего цикла будут посвящены Hive — инструменту для любителей SQL. В предыдущих статьях мы рассматривали парадигму MapReduce, и приемы и стратегии работы с ней. Возможно многим читателям некоторые решения задач при помощи MapReduce показались несколько громоздкими. Действительно, спустя почти 50 лет после изобретения SQL, кажется довольно странным писать больше одной строчки кода для решения задач вроде «посчитай мне сумму транзакций в разбивке по регионам».
С другой стороны, классические СУБД, такие как Postgres, MySQL или Oracle не имеют такой гибкости в масштабировании при обработке больших массивов данных и при достижении объема большего дальнейшая поддержка становится большой головоной болью.
Собственно, Apache Hive был придуман для того чтобы объединить два этих достоинства:
- Масштабируемость MapReduce
- Удобство использования SQL для выборок из данных.
Общее описание
Hive появился в недрах компании Facebook в 2007 году, а через год исходники hive были открыты и переданы под управление apache software foundation. Изначально hive представлял собой набор скриптов поверх hadoop streaming (см 2-ю статью нашего цикла), позже развился в полноценный фреймворк для выполнения запросов к данным поверх MapReduce.
Актуальная версия apache hive(2.0) представляет собой продвинутый фреймворк, который может работать не только поверх фреймворка Map/Reduce, но и поверх Spark(про спарк у нас будут отдельные статьи в цикле), а также Apache Tez.
Apache hive используют в production такие компании как Facebook, Grooveshark, Last.Fm и многие другие. Мы в Data-Centric alliance используем HIve в качестве основного хранилища логов нашей рекламной платформы.
Архитектура
Hive представляет из себя движок, который превращает SQL-запросы в цепочки map-reduce задач. Движок включает в себя такие компоненты, как Parser(разбирает входящие SQL-запрсоы), Optimimer(оптимизирует запрос для достижения большей эффективности), Planner (планирует задачи на выполнение) Executor(запускает задачи на фреймворке MapReduce.
Для работы hive также необходимо хранилище метаданных. Дело в том что SQL предполагает работу с такими объектами как база данных, таблица, колонки, строчки, ячейки и тд. Поскольку сами данные, которые использует hive хранятся просто в виде файлов на hdfs — необходимо где-то хранить соответствие между объектами hive и реальными файлами.
В качестве metastorage используется обычная реляционная СУБД, такая как MySQL, PostgreSQL или Oracle.
Command line interface
Для того чтобы попробовать работу с hive проще всего воспользоваться его командной строкой. Современная утилита для работы с hive называется beeline (привет нашим партнёрам из одноименного оператора 🙂 ) Для этого на любой машине в hadoop-кластере (см. наш туториал по hadoop) с установленным hive достаточно набрать команду.
Далее необходимо установить соединение с hive-сервером:
root root — в данном контексте это имя пользователя и пароль. После этого вы получите командную строку, в которой можно вводить команды hive .
Также иногда бывает удобно не вводить sql-запросы в командную строку beeline, а предварительно сохранить и редактировать их в файле, а потом выполнить все запросы из файла. Для этого нужно выполнить beeline с параметрами подключения к базе данных и параметром -f указывающим имя файла, содержащего запросы:
Data Units
При работе с hive можно выделить следующие объекты которыми оперирует hive:
- База данных
- Таблица
- Партиция (partition)
- Бакет (bucket)
База данных
База данных представляет аналог базы данных в реляционных СУБД. База данных представляет собой пространство имён, содержащее таблицы. Команда создания новой базы данных выглядит следующим образом:
Database и Schema в данном контексте это одно и тоже. Необязательная добавка IF NOT EXISTS как не сложно догадаться создает базу данных только в том случае если она еще не существует.
Пример создания базы данных:
Для переключения на соответствующую базу данных используем команду USE:
Таблица
Таблица в hive представляет из себя аналог таблицы в классической реляционной БД. Основное отличие — что данные hive’овских таблиц хранятся просто в виде обычных файлов на hdfs. Это могут быть обычные текстовые csv-файлы, бинарные sequence-файлы, более сложные колоночные parquet-файлы и другие форматы. Но в любом случае данные, над которыми настроена hive-таблица очень легко прочитать и не из hive.
Таблицы в hive бывают двух видов:
Классическая таблица, данные в которую добавляются при помощи hive. Вот пример создания такой таблицы (источник примера):
Тут мы создали таблицу, данные в которой будут храниться в виде обычных csv-файлов, колонки которой разделены символом табуляции. После этого данные в таблицу можно загрузить. Пусть у нашего пользователя в домашней папке на hdfs есть (напоминаю, что загрузить файл можно при помощи hadoop fs -put) файл sample.txt вида:
Загрузить данные мы сможем при помощи следующей команды:
После hive переместит данныe, хранящемся в нашем файле в хранилище hive. Убедиться в этом можно прочитав данные напрямую из файла в хранилище hive в hdfs:
Классические таблицы можно также создавать как результат select-запроса к другим таблицам:
Кстати говоря, SELECT для создания таблицы в данном случае уже запустит mapreduce-задачу.
Внешняя таблица, данные в которую загружаются внешними системами, без участия hive. Для работы с внешними таблицами при создании таблицы нужно указать ключевое слово EXTERNAL, а также указать путь до папки, по которому хранятся файлы:
После этого таблицей можно пользоваться точно так же как и обычными таблицами hive. Самое удобное в этом, что вы можете просто скопировать файл в нужную папочку в hdfs, а hive будет автоматом подхватывать новые файлы при запросах к соответствующей таблице. Это очень удобно при работе например с логами.
Партиция (partition)
Так как hive представляет из себя движок для трансляции SQL-запросов в mapreduce-задачи, то обычно даже простейшие запросы к таблице приводят к полному сканированию данных в этой таблицы. Для того чтобы избежать полного сканирования данных по некоторым из колонок таблицы можно произвести партиционирование этой таблицы. Это означает, что данные относящиеся к разным значениям будут физически храниться в разных папках на HDFS.
Для создания партиционированной таблицы необходимо указать по каким колонкам будет произведено партиционирование:
При заливке данных в такую таблицу необходимо явно указать, в какую партицию мы заливаем данные:
Посмотрим теперь как выглядит структура директорий:
Видно, что структура директорий выглядит таким образом, что каждой партиции соответствует отдельная папка на hdfs. Теперь, если мы будем запускать какие-либо запросы, у казав в условии WHERE ограничение на значения партиций — mapreduce возьмет входные данные только из соответствующих папок.
В случае External таблиц партиционирование работает аналогичным образом, но подобную структуру директорий придется создавать вручную.
Партиционирование очень удобно например для разделения логов по датам, так как правило любые запросы за статистикой содержат ограничение по датам. Это позволяет существенно сократить время запроса.
Бакет
Партиционирование помогает сократить время обработки, если обычно при запросах известны ограничения на значения какого-либо столбца. Однако оно не всегда применимо. Например — если количество значений в столбце очень велико. Напрмер — это может быть ID пользователя в системе, содержащей несколько миллионов пользователей.
В этом случае на помощь нам придет разделение таблицы на бакеты. В один бакет попадают строчки таблицы, для которых значение совпадает значение хэш-функции вычисленное по определенной колонке.
При любой работе с бакетированными таблицами необходимо не забывать включать поддержку бакетов в hive (иначе hive будет работать с ними как с обычными таблицами):
Для создания таблицы разбитой на бакеты используется конструкция CLUSTERED BY
Так как команда Load используется для простого перемещения данных в хранилище hive — в данном случае для загрузки она не подходит, так как данные необходимо предобработать, правильно разбив их на бакеты. Поэтому их нужно загрузить при помощи команды INSERT из другой таблицы(например из внешней таблицы):
После выполнения команды убедимся, что данные действительно разбились на 10 частей:
Теперь при запросах за данными, относящимися к определенному пользователю, нам не нужно будет сканировать всю таблицу, а только 1/10 часть этой таблицы.
Checklist по использованию hive
Теперь мы разобрали все объекты, которыми оперирует hive. После того как таблицы созданы — можно работать с ними, так как с таблицами обычных баз данных. Однако не стоит забывать о том что hive — это все же движок по запуску mapreduce задач над обычными файлами, и полноценной заменой классическим СУБД он не является. Необдуманное использование таких тяжелых команд, как JOIN может привести к очень долгим задачам. Поэтому прежде чем строить вашу архитектуру на основе hive — необходимо несколько раз подумать. Приведем небольшой checklist по использованию hive:
-
Данных которые надо обрабатывать много и они не влазят на диск одной машины (иначе лучше подумать над классическими SQL-системами).
Заключение
В данной статье мы разобрали архитектуру hive, data unit-ы, которыми оперирует hive, привели примеры по созданию и заполнению таблиц hive. В следующей статье цикла мы рассмотрим продвинутые возможности hive, включающие в себя: