Запуск заданий Apache Hive
Hive
Вы можете запускать задания Hive как с помощью CLI Yandex Cloud, так и непосредственно на сервере с помощью Hive CLI.
Примечание
Вы можете просматривать логи выполнения заданий и искать в них информацию с помощью сервиса Yandex Cloud Logging. Подробнее см. в разделе Работа с логами.
Работа с заданиями в CLI Yandex Cloud
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
Запуск заданий с помощью CLI Yandex Cloud происходит посредством агента Yandex Data Processing, установленного на хосте-мастере кластера. Параметры заданий передаются агенту через Yandex Data Processing API.
Исполняемый файл и его зависимости должны находиться в хранилище, к которому есть доступ у сервисного аккаунта кластера Yandex Data Processing. У самого запускаемого приложения должен быть доступ к хранилищам, в которых хранятся исходный набор данных и результаты запуска.
SQL-запрос для Hive можно передать двумя способами:
- в команде на запуск задачи;
- в объекте Object Storage, который доступен на чтение сервисному аккаунту кластера Yandex Data Processing.
Результат выполнения запроса сохраняется в привязанный к кластеру бакет Yandex Object Storage вместе с сервисным выводом.
Перед началом работы
-
Создайте сервисный аккаунт с ролями
dataproc.agent
иdataproc.provisioner
. -
В Object Storage создайте бакеты и настройте доступ к ним:
- Создайте бакет для исходных данных и предоставьте сервисному аккаунту кластера разрешение
READ
для этого бакета. - Создайте бакет для результатов обработки и предоставьте сервисному аккаунту кластера разрешение
READ и WRITE
для этого бакета.
- Создайте бакет для исходных данных и предоставьте сервисному аккаунту кластера разрешение
-
Создайте кластер Yandex Data Processing со следующими настройками:
- Сервисы:
HDFS
;HIVE
;MAPREDUCE
;SPARK
;YARN
.
- Сервисный аккаунт — выберите созданный ранее сервисный аккаунт.
- Имя бакета — выберите бакет для результатов обработки.
- Публичный доступ — включите опцию для доступа к хостам всех подкластеров.
- Сервисы:
Передача SQL-запроса в команде на запуск задачи
-
Создайте внешнюю таблицу (external table) для данных примера в формате Parquet. Таблица будет содержать список перелетов между городами США в 2018-м году. Выполните следующий запрос с помощью CLI Yandex Cloud:
yc dataproc job create-hive \ --cluster-id=<идентификатор_кластера> \ --name=task-one \ --query-list="CREATE EXTERNAL TABLE flights ( Year bigint, Month bigint, FlightDate string, Flight_Number_Reporting_Airline bigint, OriginAirportID bigint, DestAirportID bigint) STORED AS PARQUET LOCATION 's3a://yc-mdb-examples/dataproc/example01/set01';"
Пример ответа на запрос
done (14s) id: c9qloj5crovu******** cluster_id: c9qkjos5sa3d******** created_at: "2024-12-04T03:51:03.285819Z" started_at: "2024-12-04T03:51:15.884426Z" finished_at: "2024-12-04T03:51:15.884426Z" name: task-one created_by: ajefhe0o8uas******** status: DONE hive_job: query_list: queries: - CREATE EXTERNAL TABLE flights (Year bigint, Month bigint, FlightDate string, Flight_Number_Reporting_Airline bigint, OriginAirportID bigint, DestAirportID bigint) STORED AS PARQUET LOCATION 's3a://yc-mdb-examples/dataproc/example01/set01'; application_info: {}
-
Проверьте, что таблица успешно создалась. Для этого запросите количество перелетов по месяцам:
yc dataproc job create-hive \ --cluster-id=<идентификатор_кластера> \ --name=task-two \ --query-list="SELECT Month, COUNT(*) FROM flights GROUP BY Month;"
Пример ответа на запрос
done (34s) id: c9quejacclo3******** cluster_id: c9qkjos5sa3d******** created_at: "2024-12-04T05:15:38.436203Z" started_at: "2024-12-04T05:16:11.608422Z" finished_at: "2024-12-04T05:16:11.608422Z" name: task-two created_by: ajefhe0o8uas******** status: DONE hive_job: query_list: queries: - SELECT Month, COUNT(*) FROM flights GROUP BY Month; application_info: {}
-
В бакете для результатов обработки перейдите в папку:
dataproc/clusters/<идентификатор_кластера>/jobs/<идентификатор_задания_Hive>
Идентификатор задания указан в выводе команды запуска задания YC CLI и в ответе API на запуск задания.
-
Скачайте файл
driveroutput.000000000
, который содержит ответ на запрос.Пример ответа на запрос
Init job c9quejacclo3******** at Wed Dec 4 05:15:40 UTC 2024 ... Connecting to jdbc:hive2://localhost:10000 Connected to: Apache Hive (version 3.1.2) Driver: Hive JDBC (version 3.1.2) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://localhost:10000> SELECT Month, COUNT(*) FROM flights GROUP BY Month;; +--------+---------+ | month | _c1 | +--------+---------+ | 1 | 570118 | | 2 | 520731 | | 3 | 611987 | | 4 | 596046 | | 5 | 616529 | | 6 | 626193 | | 7 | 645299 | | 8 | 644673 | | 9 | 585749 | | 10 | 616101 | | 11 | 586178 | | 12 | 593842 | +--------+---------+ 12 rows selected (27.532 seconds) 0: jdbc:hive2://localhost:10000> 0: jdbc:hive2://localhost:10000> Closing: 0: jdbc:hive2://localhost:10000
Если при выполнении запроса возникнут ошибки, информация о них также сохранится в файле
driveroutput.000000000
.
Передача SQL-запроса в объекте Object Storage
-
Создайте файл
create-table.sql
и поместите в него SQL-запрос для создания внешней таблицы (external table) для данных примера в формате Parquet. Таблица будет содержать список перелетов между городами США в 2018-м году. SQL-запрос будет выглядеть так:CREATE EXTERNAL TABLE flights ( Year bigint, Month bigint, FlightDate string, Flight_Number_Reporting_Airline bigint, OriginAirportID bigint, DestAirportID bigint) STORED AS PARQUET LOCATION 's3a://yc-mdb-examples/dataproc/example01/set01';
-
Загрузите файл
create-table.sql
в бакет для исходных данных. -
Выполните команду:
yc dataproc job create-hive \ --cluster-id=<идентификатор_кластера> \ --name=task-one \ --query-file-uri="s3a://<имя_бакета_для_исходных_данных>/create-table.sql"
Пример ответа на запрос
done (8s) id: c9qhpt6334qs******** cluster_id: c9qkjos5sa3d******** created_at: "2024-12-04T04:21:20.062704Z" started_at: "2024-12-04T04:21:27.702644Z" finished_at: "2024-12-04T04:21:27.702644Z" name: task-one created_by: ajefhe0o8uas******** status: DONE hive_job: query_file_uri: s3a://<имя_бакета_для_исходных_данных>/create-table.sql application_info: {}
-
Создайте файл
get-data.sql
и поместите в него SQL-запрос на количество перелетов по месяцам:SELECT Month, COUNT(*) FROM flights GROUP BY Month;
-
Загрузите файл
get-data.sql
в бакет для исходных данных. -
Выполните команду:
yc dataproc job create-hive \ --cluster-id=<идентификатор_кластера> \ --name=task-two \ --query-file-uri="s3a://<имя_бакета_для_исходных_данных>/get-data.sql"
Пример ответа на запрос
done (37s) id: c9q2srq817cu******** cluster_id: c9qkjos5sa3d******** created_at: "2024-12-04T04:24:58.480468Z" started_at: "2024-12-04T04:25:34.613549Z" finished_at: "2024-12-04T04:25:34.613549Z" name: task-two created_by: ajefhe0o8uas******** status: DONE hive_job: query_file_uri: s3a://<имя_бакета_для_исходных_данных>/get-data.sql application_info: {}
-
В бакете для результатов обработки перейдите в папку:
dataproc/clusters/<идентификатор_кластера>/jobs/<идентификатор_задания_Hive>
Идентификатор задания указан в выводе команды запуска задания YC CLI и в ответе API на запуск задания.
-
Скачайте файл
driveroutput.000000000
, который содержит ответ на запрос.Пример ответа на запрос
Init job c9q2gha5hocg******** at Wed Dec 4 06:56:45 UTC 2024 ... Connecting to jdbc:hive2://localhost:10000 Connected to: Apache Hive (version 3.1.2) Driver: Hive JDBC (version 3.1.2) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://localhost:10000> SELECT Month, COUNT(*) FROM flights GROUP BY Month; +--------+---------+ | month | _c1 | +--------+---------+ | 1 | 570118 | | 2 | 520731 | | 3 | 611987 | | 4 | 596046 | | 5 | 616529 | | 6 | 626193 | | 7 | 645299 | | 8 | 644673 | | 9 | 585749 | | 10 | 616101 | | 11 | 586178 | | 12 | 593842 | +--------+---------+ 12 rows selected (28.801 seconds) 0: jdbc:hive2://localhost:10000> Closing: 0: jdbc:hive2://localhost:10000
Если при выполнении запроса возникнут ошибки, информация о них также сохранится в файле
driveroutput.000000000
.
Работа с заданиями в Hive CLI
Перед началом работы
-
Создайте сервисный аккаунт с ролями
dataproc.agent
иdataproc.provisioner
. -
Создайте кластер Yandex Data Processing со следующими настройками:
- Сервисы:
HDFS
;HIVE
;SPARK
;YARN
.
- Сервисный аккаунт — выберите созданный ранее сервисный аккаунт.
- Публичный доступ — включите опцию для доступа к хостам всех подкластеров.
- Сервисы:
Запуск задания с помощью Hive CLI
-
Подключитесь к хосту-мастеру по SSH и выполните команду
hive
. -
Проверьте работоспособность Hive — выполните команду
select 1;
. Корректный результат выглядит так:OK 1 Time taken: 0.077 seconds, Fetched: 1 row(s)
-
Создайте внешнюю таблицу (external table) для данных примера в формате Parquet. Таблица будет содержать список перелетов между городами США в 2018-м году. Выполните следующий запрос с помощью Hive CLI:
CREATE EXTERNAL TABLE flights ( Year bigint, Month bigint, FlightDate string, Flight_Number_Reporting_Airline bigint, OriginAirportID bigint, DestAirportID bigint) STORED AS PARQUET LOCATION 's3a://yc-mdb-examples/dataproc/example01/set01';
-
Проверьте список таблиц:
show tables;
-
Список таблиц должен выглядеть так:
OK flights Time taken: 0.043 seconds, Fetched: 1 row(s)
-
Запросите количество перелетов по месяцам:
SELECT Month, COUNT(*) FROM flights GROUP BY Month;
Пример ответа на запрос
Query ID = root_20200119195338_28049b67-4de9-4568-a4c4-3bbe******** Total jobs = 1 Launching Job 1 out of 1 Status: Running (Executing on YARN cluster with App id application_157925157****_****) ---------------------------------------------------------------------------------------------- VERTICES MODE STATUS TOTAL COMPLETED RUNNING PENDING FAILED KILLED ---------------------------------------------------------------------------------------------- Map 1 .......... container SUCCEEDED 6 6 0 0 0 0 Reducer 2 ...... container SUCCEEDED 1 1 0 0 0 0 ---------------------------------------------------------------------------------------------- VERTICES: 02/02 [==========================>>] 100% ELAPSED TIME: 11.52 s ---------------------------------------------------------------------------------------------- OK 1 570118 2 520731 3 611987 4 596046 5 616529 6 626193 7 645299 8 644673 9 585749 10 616101 11 586178 12 593842 Time taken: 12.137 seconds, Fetched: 12 row(s)