Проверка параллелизма одного и нескольких запросов Hive
Я настроил параллелизм Hive с указанными ниже свойствами hive-site.xml и перезапустил кластер.
Свойство 1
Name: hive.exec.parallel
Value: true
Description: Run hive jobs in parallel
Свойство 2
Name: hive.exec.parallel.thread.number
Value: 8 (default)
Description: Maximum number of hive jobs to run in parallel
Чтобы проверить параллелизм, я создал ниже 2 условия:
1. Одиночный запрос в файле.hql и запустить его как
hive -f file.hql
SELECT COL1, COL2 FROM TABLE1
UNION ALL
SELECT COL3, COL4 FROM TABLE2
Результат:
Когда hive.exec.parallel = true, затраченное время: 28,015 с, общее затраченное процессорное время MapReduce: 3 с 10 мс
Когда hive.exec.parallel = false, затраченное время: 24,778 секунды, общее затраченное процессорное время MapReduce: 3 секунды 90 мс.
2 . Независимые запросы в 2 разных файлах, как показано ниже, и запустите их как
nohup hive -f file1.hql & nohup hive -f file2.hql
select count(1) from t1 -> file1.sql
select count(1) from t2 -> file2.sql
Результат:
Когда hive.exec.parallel = false, затраченное время: 29,391 секунды, общее затраченное процессорное время MapReduce: 1 секунда 890 мс
Вопрос:
Как проверить, действительно ли два вышеуказанных условия выполняются параллельно? В консоли я вижу результат, как если бы запросы выполнялись последовательно.
Почему время больше, когда hive.exec.parallel = true? Как я могу увидеть, что несколько ступеней улья используются?
Спасибо,
1 ответ
Когда механизм исполнения Hive — MR (
hive.execution.engine=mr
), Hive представляет запрос как одно или несколько заданий Map-Reduce, эти задания (каждое из которых содержит Map и Reduce) могут выполняться параллельно, если это возможно. Например, этот запрос:
SELECT COL1, COL2 FROM TABLE1
UNION
SELECT COL3, COL4 FROM TABLE2
может выполняться как 3 задания: 1 - выбрать из таблицы1, 2 - выбрать таблицу2, 3 - ОБЪЕДИНЕНИЕ (различное)
Первые два задания могут выполняться параллельно, а третье — после завершения первого и второго.
Более сложный запрос может быть выполнен, так как много заданий MR и эти параметры:
и позволяет параллельно выполнять задания для одного запроса, работающего на MR.
Вы можете проверить задания в Job Tracker, URL-адрес печатается в журналах во время выполнения. В логах видно, что некоторые задания запущены и идет их выполнение.
При работе на исполнительном движке Tez (
hive.execution.engine=Tez
), Hive представляет запрос как единую оптимизированную DAG, опуская ненужные шаги, такие как запись промежуточных результатов в постоянное хранилище и их повторное чтение с помощью преобразователя. Все вершины в DAG, которые могут выполняться параллельно, выполняются параллельно. Эти же настройки не работают при работе на Tez. Он всегда работает параллельно на Tez. Тот же запрос будет представлен как две вершины сопоставления (работающие параллельно) и работающий в конце редюсер. Последний редуктор также может начаться раньше, когда мапперы почти завершили работу.
Настройки
hive.exec.parallel
а также
hive.exec.parallel.thread.number
не влияют на параллелизм запроса на Tez, а также не работают для двух отдельных запросов в одном скрипте.
Два отдельных запроса в одном скрипте выполняются один за другим, а не параллельно (каждый со своим параллелизмом задач)
Два сеанса куста, как в вашем последнем примере, выполняются параллельно (зависит от доступных ресурсов кластера).
Разницу во времени можно измерить с помощьюtime
Unix-команда . Время, сообщаемое Hive, является временем кластера. Если в кластере нет доступных ресурсов, параллельные задачи могут ждать ресурсов. Используйте средство отслеживания заданий, чтобы проверить, что именно происходит во время выполнения.
Итак, на самом деле существуют разные виды параллелизма.
Параллелизм заданий одного запроса на MR - параметры, которые вы запрашиваете, относятся к этому типу.
Сеансы Hive выполняются параллельно — эти параметры на это не влияют.
Tez vertices parallelism - эти параметры на него не влияют
Параллельное выполнение одного и того же экземпляра вершины (маппера или редуктора, каждый может запускаться более одного) — они выполняются параллельно — эти параметры на это не влияют