Для больших данных SQL не подходит. В этом блоге рассказывается о проекте, в рамках которого я создал образ Docker для Apache Hive. Наряду с созданием многоузловой среды этих контейнеров. Показаны все команды, необходимые любому наивному пользователю для понимания основ Apache HIVE.

Этот проект следует за процессом инициализации запуска контейнеров HIVE для обработки большого набора данных (размером 7 ГБ), каждая команда была доставлена ​​с полным объяснением.

Если вы не знаете о докере, вот краткое руководство:



Загрузить Docker Desktop: https://www.docker.com/products/docker-desktop/

Показанный полный код можно найти здесь: https://github.com/FareedKhan-dev/apache-hive-guide

Оглавление

1 RESOURCES USED
2 PROJECT DISTRIBUTION
3 DATASET DESCRIPTION
4 INITIALIZING THE CONTAINER 
5 BRIDGE NETWORKING OF HIVE CONTAINERS 
6 BASIC GUIDE OF APACHE HIVE 
   • UNDERSTANDING DATA TYPES
   • DATABASES
   • TABLES
   • PARTITIONS
   • BUCKETS
   • VIEWS
   • PERFORMANCE UTILITIES
   • LOGS
   • MASK AND ENCRYPTION
   • HIVEMALL
7 WORKING WITH BIG DATA
   • COPYING BIG DATA TO HIVE CONTAINER
   • CREATING TABLES OF FLIGHTS DATASET
   • INSIGHTS OF FLIGHTS DATA
8 References

Используемые ресурсы

Этот проект создан с использованием следующих ресурсов с разных платформ.

  • Apache Hive Essentials Essential от Dayong Du
  • Памятка от HortonWorks

Распространение проекта

Этот проект распространяется в трех разделах.

Описание набора данных

Для этого проекта используются три набора данных:

  1. employee.txt (ссылка для скачивания)
  2. employee_id.txt (ссылка для скачивания)
  3. набор данных о рейсах (ссылка для скачивания)

Набор данных Flights собирается с веб-сайта Kaggle. Ниже приведена информация о наборе данных.

Часть A — Инициализация контейнера Hive

Клонирование репозитория GitHub

Объяснение – Клонирование репозитория GitHub, содержащего HIVE вместе с контейнером HADOOP.

Переход к клонированной папке (например, docker-hive)

Важно: Команды Compose выполняются только в том случае, если пользователь находится в каталоге docker-hive (где существует файл yml), в противном случае будет выдана ошибка.

Составление файла Docker

Список всех контейнеров Docker

ЧАСТЬ B. Мостовая сеть контейнеров Hive

как указано на веб-сайте bogotobog: в докере мостовая сеть использует программный мост, который позволяет контейнерам, подключенным к одной мостовой сети, взаимодействовать, обеспечивая при этом изоляцию от контейнеров, которые не подключены к этой мостовой сети. .

Список всех сетей

Создание мостовой сети контейнеров HIVE

Перечислите все сети после создания мостовой сети, то есть docker-hive_default.

Объяснение: создана сеть мостов с именем docker-hive_default.

Соединение всех контейнеров HIVE внутри мостовой сети docker-hive_default

Проверка docker-hive_default после создания сетей между контейнерами.

Объяснение. Теперь, когда все контейнеры объединены в сеть под именем моста docker-hive_default, мы можем использовать большие данные наших авиакомпаний для загрузки в HIVE и HDFS и работы с HiveSQL.

ЧАСТЬ C. Базовое руководство по Apache Hive

1. Понимание типов данных

Перейдите в каталог, в который вы скачали файл employee.txt, скопируйте файл employee.txt с локального компьютера и вставьте его в контейнер HIVE, используя

Запуск контейнера HIVE и вход в среду bash

Важно: Если указанная выше команда не переносит вас в среду bash, вам необходимо перезапустить контейнер с помощью команды docker-compose restart и убедиться, что вы должны находиться в среде docker-hive (где существует yml) во время выполнения любой из команд компоновки.

Скопируйте файл employee.txt из контейнера HIVE в HDFS.

Печать содержимого employee.txt

Доступ к командной строке HIVE

Создание таблицы employee.txt с помощью команды «Создать таблицу»

Загрузка данных employee.txt в таблицу сотрудников

Описание работника стола

Запросить весь массив и каждый элемент массива в таблице

Запрос всей структуры и каждого атрибута структуры в таблице

Запросить всю карту и каждый элемент карты в таблице

Запрос составного типа в таблице

2. Базы данных

Создайте базу данных/схему, если она не существует

Создайте базу данных с местоположением, комментариями и метаданными

Чтобы отобразить DDL, вы можете использовать команду show create database, эта команда доступна начиная с версии 2.1.0.

Перечислите все базы данных

Перечислите все базы данных, начинающиеся с букв my

Описание базы данных по умолчанию

Использование имени базы данных myhivebook

Непосредственно укажите имя таблицы с именем базы данных

Показать текущую базу данных

Удалить базу данных

Объяснение. Вышеупомянутая команда завершается ошибкой, если база данных не пуста.

Удалить базу данных с таблицами

Объяснение: Приведенные выше команды удаляют базу данных и вместе с ее таблицами.

Измените свойства базы данных. Оператор ALTER DATABASE может применяться только к свойствам базы данных, владельцу и местоположению в базе данных. Другие свойства базы данных изменить нельзя.

3. Таблицы

Печать содержимого employee.txt

Создать внутреннюю таблицу

Объяснение. Это таблица по умолчанию в Hive. Когда пользователь создает таблицу в Hive, не указывая ее как внешнюю, по умолчанию внутренняя таблица создается в определенном месте в HDFS.

Создать внешнюю таблицу

Объяснение. Мы создаем внешнюю таблицу, когда хотим использовать данные за пределами Hive. Всякий раз, когда мы удаляем внешнюю таблицу, удаляются только метаданные, связанные с таблицей, а сами данные таблицы остаются нетронутыми Hive.

Создать временную таблицу

Объяснение. Временная таблица видна только текущему сеансу пользователя. Он автоматически удаляется в конце сеанса. Данные временной таблицы хранятся в рабочем каталоге пользователя, таком как /tmp/hive-.

Создайте временную таблицу (второй способ)

Создайте временную таблицу (третий способ)

Таблицы также можно создавать и заполнять результатами запроса в одном операторе, который называется CreateTable-As-Select (CTAS). CTAS имеет ограничения, заключающиеся в том, что он не может быть секционированной таблицей, внешней таблицей или таблицей сегментации списка.

Создайте таблицу с помощью CTAS

Создайте таблицу с помощью CTAS и CTE (Common Table Expression)

Печать таблицы, созданной с помощью CTAS и CTE

Мы также можем использовать CREATE TABLE LIKE, чтобы создать пустую таблицу.

Объяснение. Это более быстрый способ скопировать схему таблицы, поскольку он не запускает никаких заданий, а только копирует метаданные.

Показать все таблицы базы данных

Показать все таблицы текущей базы данных, содержащие имя fareed

Показать все таблицы текущей базы данных, содержащие имя fareed или tariq

Подробная информация о таблицах для всех таблиц, начинающихся с выражения employee_int.

Показать все столбцы таблицы

Показать все столбцы таблицы. (Второй способ)

Отображение операторов DDL таблицы сотрудников

Показать свойства таблицы для указанной таблицы

Удаление таблицы, только если она существует

Объяснение. Оператор drop-table для внутренней таблицы полностью удаляет таблицу и перемещает данные в корзину в текущем пользовательском каталоге. Оператор drop-table во внешней таблице удалит только определение таблицы, но сохранит данные.

Усечение таблицы

Объяснение: оператор truncate table удаляет только данные из таблицы. Таблица все еще существует, но пуста. Обратите внимание, что усеченная таблица может применяться только к внутренней таблице.

Отображение таблицы после ее усечения

Объяснение.Данных не осталось, но существует пустая таблица.

Переименуйте таблицу с помощью инструкции ALTER.

Измените свойства таблицы с помощью команды TBLPROPERTIES.

Измените формат файла таблицы с помощью команды FILEFORMAT.

Включите/отключите параметр NO_DROP, предотвращающий удаление таблицы.

Включить/отключить параметр OFFLINE, чтобы данные (не метаданные) не запрашивались в таблице.

Включить конкатенацию в RCFile или таблице ORC

Создание таблицы employee_test

Добавить новые столбцы в таблицу

Проверка таблицы после добавления нового столбца

Объяснение. Новый столбец существует внутри таблицы.

4. Перегородки

Создание таблицы с именем employee_partitioned с определением свойства PARTITIONED BY

Описание таблицы employee_partitioned

Проверка разделов

Объяснение: Поскольку разделы еще не созданы, отображается пустая таблица.

Добавление нескольких разделов

Показать созданные разделы

Удаление раздела

Объяснение: Удалить раздел НЕ удалит данные для внешней таблицы, он удалит только данные с разделом для внутренней таблицы.

Печать разделов после сброса

Переименование разделов

Объяснение. Переименование раздела с (year=2018/month=12) на (year=2018/month=06).

Печать разделов после обновления

Скопируйте файл employee.txt из контейнера HIVE в HDFS.

Загрузите данные в раздел таблицы после его создания.

Важно:В случае, если приведенная выше команда показывает вам ошибку «employee.txt not found», вы должны загрузить файл в HDFS, а затем, войдя в команду Apache Hive, вы можете запустить указанную выше команду без каких-либо ошибка.

Проверка загрузки данных

Удалить данные из раздела

Объяснение. Удалите данные из раздела. Обратите внимание, что удаление данных не приведет к удалению информации о разделе. Чтобы выполнить полную очистку данных, мы можем удалить раздел, описанный ранее в команде Удаление раздела.

Изменение существующего типа данных столбца раздела

Описание таблицы employee_partitioned после изменения типа данных столбца

Изменение других свойств раздела с точки зрения формата файла, местоположения, защиты и конкатенации имеет тот же синтаксис, что и изменение оператора таблицы.

5. Ведра

Помимо разделения, сегмент — это еще один метод кластеризации наборов данных в более управляемые части для оптимизации производительности запросов. В отличие от раздела, сегмент соответствует сегментам файлов в HDFS.

Скопируйте файл employee_id.txt с локального компьютера и вставьте его в контейнер HIVE.

Запуск контейнера HIVE и вход в среду bash.

Важно: если приведенная выше команда не переносит вас в среду bash, вы должны перезапустить контейнер с помощью команды перезапуска docker-compose и обязательно убедитесь, что вы должны быть в docker-hive (где существует yml) папку во время выполнения любой из команд компоновки.

Скопируйте файл employee_id.txt из контейнера HIVE в HDFS.

Доступ к командной строке HIVE.

Подготовка таблицы employee_id

Загрузите данные в таблицу employee_id.

Важно:если приведенная выше команда показывает вам ошибку «employee_id.txt not found», вы должны загрузить файл в HDFS, после чего после входа в команду Apache Hive вы можете запустить указанную выше команду без каких-либо ошибок.

Подготовка ковшового стола

Установка максимального количества редукторов на то же количество корзин, указанное при создании таблицы

INSERT следует использовать для постоянного заполнения таблицы сегментов.

Проверьте сегменты в HDFS из оболочки

Объяснение. В оболочке HDFS создаются два сегмента.

6. Просмотры

Представления — это логические структуры данных, которые можно использовать для упрощения запросов, скрывая сложности, такие как соединения, подзапросы и фильтры.

Создание VIEW из таблицы employee_id

Объяснение. При создании представлений не запускается задание пряжи, поскольку это всего лишь изменение метаданных. Однако задание будет запущено при запросе представления.

Печать всех ВИДОВ

Печать всех VIEWS, соответствующих регулярному выражению, т. е. начиная с employee_word

Переопределение ВИДа с помощью команды ALTER VIEW

Печать определения VIEW

Удаление представления

Использование LATERALVIEW для данных

Объяснение.Обычно используется с пользовательскими функциями генерации таблиц в Hive для нормализации данных или обработки данных JSON. LateralView сначала применяет функцию генерации таблиц к данным, а затем объединяет входные и выходные данные функции.

7. Утилиты производительности

HQL предоставляет операторы EXPLAIN и ANALYZE, которые можно использовать в качестве утилит для проверки и определения производительности запросов.

Hive предоставляет оператор EXPLAIN для возврата плана выполнения запроса без выполнения запроса. Мы можем использовать его для анализа запросов, если у нас есть опасения по поводу их производительности. Оператор EXPLAIN помогает нам увидеть разницу между двумя или более запросами для одной и той же цели.

Обзор оператора EXPLAIN

Объяснение: мы видим, что раздел AST показан как дерево операторов Map/Reduce. В разделе «ЗАВИСИМОСТИ ЭТАПА» этап 0 и этап 1 являются независимыми корневыми этапами. В разделе «ПЛАНЫ ЭТАПА» на этапе 1 есть одна карта и сокращение, на которые ссылаются дерево операторов сопоставления и дерево операторов сокращения. Внутри каждого раздела дерева операторов Map/Reduce перечислены все операторы, соответствующие ключевым словам запроса, а также выражения и агрегации. На этапе Stage-0 нет карты и редукции. Это просто операция Fetch.

Статистика куста — это набор данных, описывающих более подробные сведения, такие как количество строк, количество файлов и размер необработанных данных объектов в базе данных. Статистика — это метаданные данных, собранные и сохраненные в базе данных хранилища метаданных. Статистика собирается вручную с помощью оператора ANALYZE для таблиц, разделов и столбцов.

Собрать статистику по существующей таблице

Соберите статистику по существующей таблице с помощью NOSCAN

Объяснение. Если указан параметр NOSCAN, команда выполняется быстрее за счет игнорирования сканирования файлов, а только сбора количества файлов и их размера.

Проверить статистику в секционированной таблице

Проверить статистику в таблице

Проверить статистику определенного столбца

8. Журналы

Журналы предоставляют подробную информацию, позволяющую узнать, как выполняется запрос/задание. Проверяя данные журнала, мы можем выявить проблемы во время выполнения и проблемы, которые могут привести к снижению производительности.

Структура папок GIT CLONE

Системный журнал содержит состояние работы Hive и проблемы. Он настраивается в {HIVE_HOME}/conf/hive-log4j.properties.

В файле можно найти следующие три строки свойств журнала.

Чтобы изменить уровень ведения журнала, мы можем либо изменить предыдущий файл свойств, который применяется ко всем пользователям, либо установить конфигурацию командной строки Hive, которая применяется только к текущему пользовательскому сеансу.

9. Маска и шифрование

Для важных и охраняемых законом данных, таких как Конфиденциальная информация, необходимо хранить данные в зашифрованном или замаскированном формате в файловой системе.

Использование ХЭШ-функции

Объяснение. Хешированное значение довольно часто используется для защиты столбцов, которые являются уникальными идентификаторами для объединения или сравнения данных. Встроенные функции, такие как md5(…), sha1(…) и sha2(…), могут использоваться для хеширования данных в HQL.

Данные маскирования довольно часто запрашиваются для конфиденциальных данных пользователя, таких как:

  1. Номера кредитных карт
  2. Номера банковских счетов
  3. Пароли и многое другое.

В отличие от хеш-функции, функция маски в SQL может задавать маскирование частичных данных, что делает ее более гибкой, когда вы хотите оставить часть данных незамаскированной для лучшего понимания.

Использование функции МАСКА

Объяснение. В отличие от хеш-функции, функция маски в SQL может задавать маскирование частичных данных, что делает ее более гибкой, когда вы хотите сохранить часть данных не маскированной для лучшего понимания.

Начиная с версии Hive 1.3.0, aes_encrypt (входная строка/двоичный файл, ключевая строка/двоичный файл) и aes_decrypt (входной двоичный файл, ключевая строка/двоичный файл) UDF были предоставлены для поддержки шифрования и дешифрования данных.

Использование функции ШИФРОВАНИЕ, РАСШИФРОВКА

10. Улей

Apache Hivemall (https:/hivemall.incubator.apache.org/) — это набор пользовательских функций Hive для машинного обучения.

Он содержит несколько реализаций алгоритмов ML для классификации, регрессии, рекомендаций, функций потерь и разработки функций, все в виде UDF. Это позволяет конечным пользователям использовать SQL и только SQL для применения алгоритмов машинного обучения к большому объему обучающих данных.

Выполните следующие шаги, чтобы настроить его.

  1. Загрузите Hivemall с (https://hivemall.incubator.apache.org/download.html)
  2. Скопируйте загруженный файл с локального компьютера и вставьте его в контейнер HIVE.

3. Помещаем загруженный файл внутрь HDFS

4. Создайте постоянные функции с помощью скрипта здесь (https://github.com/apache/incubator-hivemall/blob/master/resources/ddl/define-all-as-permanent.hive)

5. Создание базы данных для UDFS

6. Убедитесь, что функции созданы

ЧАСТЬ D. Работа с большими данными

1. Копирование больших данных в контейнер Hive

Скопируйте файл flights_2009_2018.csv с локального компьютера и вставьте его в контейнер HIVE.

Запуск контейнера HIVE и вход в среду bash

Важно:если приведенная выше команда не переносит вас в среду bash, вы должны перезапустить контейнер с помощью команды перезапуска docker-compose и убедиться, что вы должны находиться в docker-hive (где yml существующая) папка при выполнении любой из команд компоновки.

Находясь в среде bash, подтверждая, существует ли файл с именем Flight_2009_2018.csv внутри каталога /home?

Скопируйте файл Flight_2009_2018.csv из контейнера HIVE в HDFS.

Доступ к командной строке HIVE

Объяснение: Теперь мы можем создавать таблицы из CSV-файла и анализировать данные.

2. Создание таблиц набора данных Flights

Создание таблицы Flight_2009_2018.csv с помощью команды «Создать таблицу»

Загрузка данных Flight_2009_2018.csv в таблицу Flight_data

Подтверждение существования таблицы Flight_data или нет?

Удаление первой строки таблицы, поскольку она содержит заголовки CSV-файла

Вызов первой строки таблицы

3. Анализ данных о рейсах

Пример использования:правительство США решает проанализировать данные об услугах внутренних авиакомпаний, чтобы улучшить свои авиакомпании. В настоящее время в США есть данные обо всех авиакомпаниях с 2009 по 2018 год. США хотят найти лазейки в их рейсах. Перечислите 5 названий авиакомпаний, которые чаще всего отменяют, в порядке убывания.

Объяснение: это 5 авиакомпаний, рейсы которых отменяются чаще всего.

Анализ причин отмены рейсов

Объяснение: код B, то есть погода, является причиной отмены большинства рейсов.

Поскольку погода является причиной отмены большинства рейсов, проанализируйте, в какое время года рейсы пострадали больше всего?

Объяснение.В январе наибольшее количество отмененных рейсов, что указывает на то, что зимний сезон в США оказывает наибольшее влияние.

Есть ли задержка вылета между рейсами на дальние расстояния или рейсами на короткие расстояния?

Объяснение.Это указывает на то, что с 2009 по 2018 году примерно 35 % дальнемагистральных рейсов задерживались при вылете, а менее 5 % ближнемагистральных рейсов задерживались при вылете.

Проверка среднего времени прибытия и ухода такси на основе общего количества рейсов в год

Объяснение: с 2017 года среднее время прибытия и нашего такси увеличилось, это может быть связано с увеличением количества рейсов за последние несколько лет и т. д.

Большинство авиакомпаний, вылетающих с опозданием, прибывают с опозданием?

Объяснение. Это указывает на то, что с 2009 по 2018 году примерно 85 % вылетающих с задержкой рейсов действительно прибывали в пункт назначения с задержкой.

Проверяем, увеличивается ли количество задержек рейсов с каждым годом или нет?

Объяснение: в 2019 году было отменено меньше рейсов, возможно, из-за отсутствия данных, но в 2018 году количество рейсов значительно увеличилось по сравнению с предыдущими годами.

Проверка, какая авиакомпания использовалась в основном?

Объяснение.Авиакомпания WN использовалась главным образом потому, что это самый бюджетный перевозчик в США.

Проверяете, сколько рейсов было отклонено за каждый год?

Объяснение: в 2019 г. количество рейсов было изменено меньше, возможно, из-за отсутствия данных, но в 2018 г. количество рейсов значительно увеличилось по сравнению с предыдущими годами, это также указывает на то, что количество рейсов, отклоненных с каждым годом, увеличивается. .

Какой штат был самым загруженным для Соединенных Штатов?

Объяснение. Атланта, Иллинойс и Техас – штаты с наибольшим объемом авиаперевозок в США. Большинство ежедневных вылетов авиакомпаний осуществляются из Атланты.

Это все, что пока известно. Надеюсь, вы получите очень подробное объяснение apache hive и того, чем он лучше, чем SQL.

Использованная литература:

  1. [Руководство по языку Hive] (https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types)
  2. [Руководство пользователя Hivemall] (https://hivemall.incubator.apache.org/userguide/docker/getting_started.html)
  3. [Видео Hivemall] (https://www.youtube.com/watch?v=cMUsuA9KZ_c)

Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать меня!