Это 8-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления
Базовая архитектура
Hive предоставляет три метода внешнего доступа, включая WebUI, CLI (ClientLineInterface) и протокол Thrift (поддерживает JDBC/ODBC), а серверная часть Hive в основном состоит из трех сервисных компонентов:
Driver
Подобно обработчику запросов реляционных баз данных, Driver реализует синтаксический анализ SQL, генерирует логические планы, физические планы, оптимизацию и выполнение запросов и т. д. Его вводом являются операторы SQL, а выводом — ряд программ распределенного выполнения (которые могут быть MapReduce, Tez и др.) или Spark и др.).
Metastore
HiveMetastore — это служба для управления и хранения метаинформации. Она сохраняет основную информацию базы данных, определения таблиц данных и т. д. Чтобы надежно хранить эту метаинформацию, HiveMetastore обычно сохраняет ее в реляционных базах данных. По умолчанию встроенная база данных Derby пользователи могут активировать другие базы данных по мере необходимости, например MySQL.
Hadoop
Hive опирается на Hadoop, включая распределенную файловую систему HDFS, систему управления распределенными ресурсами YARN и механизм распределенных вычислений MapReduce.Данные, соответствующие таблицам данных в Hive, хранятся в HDFS, вычислительные ресурсы выделяются YARN, а вычислительные задачи исходят от движка MapReduce.
Режим развертывания
Hive можно разделить на три режима развертывания в зависимости от того, как работает Metastore.
- Встроенный режим: два процесса Metastore и базы данных (Derby) встроены в драйвер. Когда драйвер запускается, эти два процесса будут работать одновременно, что обычно используется для тестирования.
- Локальный режим: Драйвер и хранилище метаданных работают локально, а база данных (например, MYSQL) запускается на общем узле.
- Удаленный режим: Metastore работает на одном узле и используется всеми другими службами.
процесс работы
Hive построен на основе Hadoop, так как же он работает с Hadoop?
Далее это описывается диаграммой, как показано.
Далее краткое описание рабочего процесса между Hive и Hadoop на рисунке выглядит следующим образом.
- Пользовательский интерфейс отправляет выполненную операцию запроса в драйвер для выполнения.
- Драйвер анализирует запрос с помощью компилятора запросов, проверяя синтаксис и план запроса или требования к запросу.
- Компилятор отправляет запрос метаданных в Metastore
- Компилятор отправляет метаданные в качестве ответа компилятору.
- Компилятор проверяет требования и повторно отправляет план Драйверу.
На этом анализ и компиляция запроса завершены.
- Драйвер отправляет план выполнения механизму выполнения для выполнения задания.
- Механизм выполнения получает набор результатов от DataNode и отправляет результат в пользовательский интерфейс и драйвер.
механизм запросов
Hive изначально был построен на вычислительном движке MapReduce, но с появлением все новых и новых вычислительных движков Теперь Hive также постепенно поддерживает другие более эффективные вычислительные механизмы DAG, включая Tez и Spark и т. д. Пользователи могут настраивать механизм выполнения каждого HQL.
По сравнению с вычислительным движком MapReduce новый вычислительный движок DAG использует следующие механизмы оптимизации, чтобы повысить производительность HQL:
- Избегайте ненужных сетевых и дисковых операций ввода-вывода, обмениваясь данными с распределенной файловой системой.
- Кэш повторно использует данные в памяти для повышения эффективности чтения.
- Повторно используйте ресурсы до конца выполнения HQL (например, в Spark один раз включенный Executor не будет выпущен до тех пор, пока не завершится выполнение всех задач).
упражняться
Запустите следующий HQL в Hive, в этом HQL 3 таблицы объединены и агрегированы в соответствии с измерением состояния.
SELECT a.state, COUNT(*), AVERAGE(c.price)
FROM a JOIN b
ON (a.id = b.id)
JOIN c ON (a.itemid = c.itemid)
GROUP BY a.state
- Если используется вычислительный движок MapReduce, HQL окончательно преобразуется в 4 задания MapReduce, которые обмениваются данными через распределенную файловую систему HDFS и, наконец, возвращают результаты заданием MapReduce. Во время этого вычисления промежуточные результаты записываются в HDFS предыдущим заданием (необходимо записать три копии), а данные считываются из HDFS следующим заданием и обрабатываются дальше.
- Если используется вычислительный движок DAG, такой как Tez или Spark, HQL в конечном итоге преобразуется только в одно приложение (из-за универсальности движка DAG), а обмен данными разных операторов в этом задании может осуществляться напрямую через локальный диск или network , что снижает нагрузку на дисковые и сетевые операции ввода-вывода и повышает производительность.