Эта статья содержит контент, который написан как реклама . ( Октябрь 2019 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Автор (ы) оригинала | |
---|---|
Разработчики) | Авторы |
Первый выпуск | 1 октября 2010 г . [1] |
Стабильный выпуск | 3.1.2 / 26 августа 2019 г . [2] |
Репозиторий | github |
Написано в | Ява |
Операционная система | Кроссплатформенность |
Доступно в | SQL |
Тип | Хранилище данных |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | улей |
Apache Hive - это проект программного обеспечения хранилища данных, созданный на основе Apache Hadoop для обеспечения запросов и анализа данных. [3] Hive предоставляет интерфейс, подобный SQL, для запроса данных, хранящихся в различных базах данных и файловых системах, которые интегрируются с Hadoop. Традиционные SQL-запросы должны быть реализованы в Java API MapReduce для выполнения SQL-приложений и запросов к распределенным данным. Hive предоставляет необходимую абстракцию SQL для интеграции SQL-подобных запросов ( HiveQL) в базовую Java без необходимости реализации запросов в низкоуровневом Java API. Поскольку большинство приложений для хранилищ данных работают с языками запросов на основе SQL, Hive помогает переносить приложения на основе SQL в Hadoop. [4] Первоначально разработанный Facebook , Apache Hive используется и разрабатывается другими компаниями, такими как Netflix и Регулирующим органом финансовой индустрии (FINRA). [5] [6] Amazon поддерживает программный ответвление Apache Hive, включенное в Amazon Elastic MapReduce на Amazon Web Services . [7]
Особенности [ править ]
Apache Hive поддерживает анализ больших наборов данных, хранящихся в HDFS Hadoop и совместимых файловых системах, таких как файловая система Amazon S3 и Alluxio . Он предоставляет похожий на SQL язык запросов под названием HiveQL [8] со схемой чтения и прозрачно преобразует запросы в задания MapReduce , Apache Tez [9] и Spark . Все три механизма выполнения могут работать в посреднике ресурсов Hadoop , YARN (еще один механизм согласования ресурсов). Для ускорения запросов он предоставил индексы, но эта функция была удалена в версии 3.0 [10]. Другие функции Hive включают:
- Различные типы хранения, такие как обычный текст, RCFile , HBase , ORC и другие.
- Хранение метаданных в системе управления реляционными базами данных , что значительно сокращает время на выполнение семантических проверок во время выполнения запроса.
- Работа со сжатыми данными, хранящимися в экосистеме Hadoop, с использованием алгоритмов, включая DEFLATE , BWT , snappy и т. Д.
- Встроенные пользовательские функции (UDF) для управления датами, строками и другими инструментами интеллектуального анализа данных. Hive поддерживает расширение набора UDF для обработки сценариев использования, не поддерживаемых встроенными функциями.
- SQL-подобные запросы (HiveQL), которые неявно преобразуются в задания MapReduce, Tez или Spark.
По умолчанию Hive хранит метаданные во встроенной базе данных Apache Derby , и при желании можно использовать другие клиент-серверные базы данных, такие как MySQL . [11]
Первыми четырьмя форматами файлов, поддерживаемыми в Hive, были обычный текст, [12] файл последовательности, оптимизированный столбчатый формат строк (ORC) [13] и RCFile . [14] Apache Parquet можно читать через плагин в версиях позже 0.10 и изначально начиная с 0.13. [15] [16] Дополнительные плагины Hive поддерживают запросы к цепочке блоков биткойнов . [17]
Архитектура [ править ]
Этот раздел имеет формат списка , но может читаться лучше как проза . Октябрь 2016 г. ) ( |
Основные компоненты архитектуры Hive:
- Хранилище метаданных: хранит метаданные для каждой из таблиц, такие как их схема и расположение. Он также включает метаданные раздела, которые помогают драйверу отслеживать прогресс различных наборов данных, распределенных по кластеру. [18] Данные хранятся в традиционном формате СУБД . Метаданные помогают водителю отслеживать данные, и это очень важно. Следовательно, сервер резервного копирования регулярно реплицирует данные, которые могут быть восстановлены в случае потери данных.
- Драйвер: действует как контроллер, который получает операторы HiveQL. Он запускает выполнение оператора с создания сеансов и отслеживает жизненный цикл и ход выполнения. Он хранит необходимые метаданные, сгенерированные во время выполнения оператора HiveQL. Драйвер также действует как точка сбора данных или результатов запроса, полученных после операции Reduce. [14]
- Компилятор: выполняет компиляцию запроса HiveQL, который преобразует запрос в план выполнения. Этот план содержит задачи и шаги, которые необходимо выполнить Hadoop MapReduce, чтобы получить результат, переведенный запросом. Компилятор преобразует запрос в абстрактное синтаксическое дерево (AST). После проверки совместимости и ошибок времени компиляции он преобразует AST в ориентированный ациклический граф (DAG). [19] Группа DAG разделяет операторы на этапы и задачи MapReduce на основе входного запроса и данных. [18]
- Оптимизатор: выполняет различные преобразования в плане выполнения для получения оптимизированной группы доступности базы данных. Преобразования можно агрегировать вместе, например преобразовать конвейер объединений в одно соединение, для повышения производительности. [20] Он также может разделять задачи, такие как применение преобразования к данным перед операцией сокращения, чтобы обеспечить лучшую производительность и масштабируемость. Однако логика преобразования, используемая для оптимизации, может быть изменена или конвейеризована с помощью другого оптимизатора. [14]
- Исполнитель: После компиляции и оптимизации исполнитель выполняет задачи. Он взаимодействует с системой отслеживания заданий Hadoop для планирования выполнения задач. Он заботится о конвейерной обработке задач, обеспечивая выполнение задачи с зависимостью только в том случае, если выполняются все другие предварительные условия. [20]
- CLI, UI и Thrift Server : интерфейс командной строки (CLI) предоставляет внешний пользовательский интерфейс для взаимодействия с Hive путем отправки запросов, инструкций и мониторинга состояния процесса. Сервер Thrift позволяет внешним клиентам взаимодействовать с Hive по сети, подобно протоколам JDBC или ODBC . [21]
HiveQL [ править ]
Основываясь на SQL, HiveQL не полностью соответствует полному стандарту SQL-92 . HiveQL предлагает расширения не в SQL, в том числе многотабличные вставки и создание таблицы по выбору . В HiveQL отсутствовала поддержка транзакций и материализованных представлений , а также ограничена поддержка подзапросов. [22] [23] Поддержка вставки, обновления и удаления с полной функциональностью ACID стала доступна в версии 0.14. [24]
На внутреннем уровне компилятор переводит операторы HiveQL в направленный ациклический граф заданий MapReduce , Tez или Spark , которые отправляются в Hadoop для выполнения. [25]
Пример [ править ]
Программа подсчета слов подсчитывает, сколько раз каждое слово встречается во входных данных. Подсчет слов можно записать в HiveQL как: [4]
УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ документы ;СОЗДАТЬ ТАБЛИЦУ документы ( строка СТРОКА );Разница между покупной и продажной ценой акции DATA INPATH 'input_file' ПЕРЕЗАПИСАТЬ INTO TABLE документы ;СОЗДАТЬ ТАБЛИЦУ word_counts КАКВЫБЕРИТЕ слово , count ( 1 ) AS count FROM ( SELECT explode ( split ( line , '\ s' )) AS word FROM docs ) tempГРУППА ПО СЛОВАМЗАКАЗАТЬ ПО слову ;
Краткое объяснение каждого из утверждений следующее:
УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ документы ;СОЗДАТЬ ТАБЛИЦУ документы ( строка СТРОКА );
Проверяет, docs
существует ли таблица, и удаляет ее, если есть. Создает новую таблицу docs
с одним столбцом STRING
вызываемого типа line
.
Разница между покупной и продажной ценой акции DATA INPATH 'input_file' ПЕРЕЗАПИСАТЬ INTO TABLE документы ;
Загружает указанный файл или каталог (в данном случае «input_file») в таблицу. OVERWRITE
указывает, что целевая таблица, в которую загружаются данные, должна быть перезаписана; В противном случае данные будут добавлены.
СОЗДАТЬ ТАБЛИЦУ word_counts КАКВЫБЕРИТЕ слово , count ( 1 ) AS count FROM( SELECT explode ( split ( line , '\ s' )) AS word FROM docs ) tempГРУППА ПО СЛОВАМЗАКАЗАТЬ ПО слову ;
Запрос CREATE TABLE word_counts AS SELECT word, count(1) AS count
создает таблицу word_counts
с двумя столбцами: word
и count
. Этот запрос получает входные данные из внутреннего запроса . Этот запрос служит для разделения входных слов на разные строки временной таблицы с псевдонимом . Результаты группируются по их ключам. В результате в столбце содержится количество вхождений каждого слова столбца. Сортирует слова в алфавитном порядке.(SELECT explode(split(line, '\s')) AS word FROM docs) temp"
temp
GROUP BY WORD
count
word
ORDER BY WORDS
Сравнение с традиционными базами данных [ править ]
Операции хранения и запросов Hive очень похожи на операции традиционных баз данных. Хотя Hive является диалектом SQL, существует множество различий в структуре и работе Hive по сравнению с реляционными базами данных. Различия в основном заключаются в том, что Hive построен на основе экосистемы Hadoop и должен соответствовать ограничениям Hadoop и MapReduce .
Схема применяется к таблице в традиционных базах данных. В таких традиционных базах данных таблица обычно обеспечивает соблюдение схемы при загрузке данных в таблицу. Это позволяет базе данных убедиться, что введенные данные соответствуют представлению таблицы, как указано в определении таблицы. Такой дизайн называется схемой при записи . Для сравнения, Hive не проверяет данные по схеме таблицы при записи. Вместо этого он впоследствии выполняет проверки во время выполнения при чтении данных. Эта модель называется схемой при чтении . [22]У этих двух подходов есть свои преимущества и недостатки. Проверка данных по схеме таблицы во время загрузки увеличивает накладные расходы, поэтому традиционным базам данных требуется больше времени для загрузки данных. Проверки качества выполняются по данным во время загрузки, чтобы гарантировать, что данные не повреждены. Раннее обнаружение поврежденных данных обеспечивает раннюю обработку исключений. Поскольку таблицы вынуждены соответствовать схеме после / во время загрузки данных, они имеют лучшую производительность во время запроса. Hive, с другой стороны, может загружать данные динамически без какой-либо проверки схемы, обеспечивая быструю начальную загрузку, но со сравнительно более низкой производительностью во время запроса. У Hive есть преимущество, когда схема недоступна во время загрузки, а вместо этого создается позже динамически. [22]
Транзакции являются ключевыми операциями в традиционных базах данных. Как и любая типичная СУБД , Hive поддерживает все четыре свойства транзакций ( ACID ): атомарность , согласованность , изоляцию и надежность . Транзакции в Hive были введены в Hive 0.13, но были ограничены только уровнем раздела. [26] В последней версии Hive 0.14 эти функции были полностью добавлены для поддержки полных свойств ACID . Hive 0.14 и более поздних версий предоставляет различные транзакции на уровне строк, такие как INSERT, DELETE и UPDATE . [27] Включение INSERT, UPDATE, DELETEтранзакции требуют установки соответствующих значений для свойств конфигурации , таких как hive.support.concurrency
, hive.enforce.bucketing
и hive.exec.dynamic.partition.mode
. [28]
Безопасность [ править ]
В Hive v0.7.0 добавлена интеграция с безопасностью Hadoop. Hadoop начал использовать поддержку авторизации Kerberos для обеспечения безопасности. Kerberos обеспечивает взаимную аутентификацию между клиентом и сервером. В этой системе запрос клиента на билет передается вместе с запросом. В предыдущих версиях Hadoop было несколько проблем, таких как возможность пользователей подделать свое имя пользователя, задав hadoop.job.ugi
свойство, а также операции MapReduce, выполняемые одним и тем же пользователем: hadoop или mapred. Благодаря интеграции Hive v0.7.0 с безопасностью Hadoop эти проблемы в значительной степени были исправлены. Задания TaskTracker запускаются пользователем, запустившим его, и имя пользователя больше не может быть подделано путем установки hadoop.job.ugi
свойства. Разрешения для вновь созданных файлов в Hive определяются HDFS.. Модель авторизации распределенной файловой системы Hadoop использует три объекта: пользователь, группа и другие с тремя разрешениями: чтение, запись и выполнение. Разрешения по умолчанию для вновь создаваемых файлов можно установить, изменив значение umask для переменной конфигурации Hive hive.files.umask.value
. [4]
См. Также [ править ]
- Апачская свинья
- Sqoop
- Apache Impala
- Apache Drill
- Apache Flume
- Apache HBase
Ссылки [ править ]
- ^ [1]
- ^ «26 августа 2019 г .: доступна версия 3.1.2» . Проверено 28 августа 2019 .
- ^ Веннер, Джейсон (2009). Pro Hadoop . Апресс . ISBN 978-1-4302-1942-2.
- ^ a b c Улей программирования [Книга] .
- ^ Пример использования Hive / Hadoop
- ^ Данные OSCON 2011, Адриан Кокрофт, «Поток данных в Netflix» на YouTube
- ^ Руководство разработчика Amazon Elastic MapReduce
- ^ Руководство по языку HiveQL
- ^ Apache Tez
- ^ Руководство по языку Hive
- ^ Лам, Чак (2010). Hadoop в действии . Публикации Мэннинга . ISBN 978-1-935182-19-1.
- ^ Оптимизация Hadoop и больших данных с помощью текста и HiveОптимизация Hadoop и больших данных с помощью текста и Hive
- ^ "Руководство по языку ORC" . Wiki проекта Hive . Проверено 24 апреля 2017 года .
- ^ a b c «Хранилище данных петабайтного масштаба Facebook с использованием Hive и Hadoop» (PDF) . Архивировано из оригинального (PDF) 28 июля 2011 года . Проверено 9 сентября 2011 .
- ^ «Паркет» . 18 декабря 2014. Архивировано из оригинала 2 февраля 2015 года . Дата обращения 2 февраля 2015 .
- ^ Масси, Мэт (21 августа 2013). «Мощное трио больших данных: Spark, Parquet и Avro» . zenfractal.com . Архивировано из оригинала 2 февраля 2015 года . Дата обращения 2 февраля 2015 .
- ^ Франк, Йорн (2016-04-28). «Улей и Биткойн: Аналитика данных Blockchain с помощью SQL» .
- ^ a b «Дизайн - Apache Hive - Фонд программного обеспечения Apache» . cwiki.apache.org . Проверено 12 сентября 2016 .
- ^ "Абстрактное синтаксическое дерево" . c2.com . Проверено 12 сентября 2016 .
- ^ a b Докероглу, Тансель; Озал, Серкан; Байир, Мурат Али; Чинар, Мухаммет Серкан; Косар, Ахмет (29.07.2014). «Повышение производительности Hadoop Hive за счет совместного использования задач сканирования и вычислений» . Журнал облачных вычислений . 3 (1): 1–11. DOI : 10,1186 / s13677-014-0012-6 .
- ^ «HiveServer - Apache Hive - Фонд программного обеспечения Apache» . cwiki.apache.org . Проверено 12 сентября 2016 .
- ^ a b c Уайт, Том (2010). Hadoop: полное руководство . O'Reilly Media . ISBN 978-1-4493-8973-4.
- ^ Руководство по языку Hive
- ^ ACID и транзакции в Hive
- ^ «Создайте складское решение на основе MapReduce Framework» (PDF) . Архивировано из оригинального (PDF) 08.10.2013 . Проверено 3 сентября 2011 .
- ^ «Введение в транзакции Hive» . datametica.com . Архивировано из оригинала на 2016-09-03 . Проверено 12 сентября 2016 .
- ^ «Транзакции Hive - Apache Hive - Фонд программного обеспечения Apache» . cwiki.apache.org . Проверено 12 сентября 2016 .
- ^ «Свойства конфигурации - Apache Hive - Apache Software Foundation» . cwiki.apache.org . Проверено 12 сентября 2016 .
Внешние ссылки [ править ]
- Официальный веб-сайт