Запрос ресурсов TEZ mapper - PullRequest
       48

Запрос ресурсов TEZ mapper

0 голосов
/ 05 апреля 2019

Мы недавно мигрировали из MapReduce в TEZ для выполнения запросов Hive в EMR.Мы наблюдаем случаи, когда для точного запроса улья запускается совсем другое число картографов.Смотрите карту 3 фазы ниже.При первом запуске он запросил 305 ресурсов, а при другом - 4534 картографа.(Пожалуйста, игнорируйте статус KILLED, потому что я вручную убил запрос.) Почему это происходит?Как мы можем изменить его, чтобы он основывался на базовом размере данных?

Прогон 1

----------------------------------------------------------------------------------------------
        VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED  
----------------------------------------------------------------------------------------------
Map 1            container        KILLED      5          0        0        5       0       0  
Map 3            container        KILLED    305          0        0      305       0       0  
Map 5            container        KILLED     16          0        0       16       0       0  
Map 6            container        KILLED      1          0        0        1       0       0  
Reducer 2        container        KILLED    333          0        0      333       0       0  
Reducer 4        container        KILLED    796          0        0      796       0       0  
----------------------------------------------------------------------------------------------
VERTICES: 00/06  [>>--------------------------] 0%    ELAPSED TIME: 14.16 s    
----------------------------------------------------------------------------------------------

Прогон 2

----------------------------------------------------------------------------------------------
        VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED  
----------------------------------------------------------------------------------------------
Map 1 .......... container     SUCCEEDED      5          5        0        0       0       0  
Map 3            container        KILLED   4534          0        0     4534       0       0  
Map 5 .......... container     SUCCEEDED    325        325        0        0       0       0  
Map 6 .......... container     SUCCEEDED      1          1        0        0       0       0  
Reducer 2        container        KILLED    333          0        0      333       0       0  
Reducer 4        container        KILLED    796          0        0      796       0       0  
----------------------------------------------------------------------------------------------
VERTICES: 03/06  [=>>-------------------------] 5%    ELAPSED TIME: 527.16 s   
----------------------------------------------------------------------------------------------

1 Ответ

0 голосов
/ 10 апреля 2019

В этой статье описывается процесс, в котором Tez выделяет ресурсы.https://cwiki.apache.org/confluence/display/TEZ/How+initial+task+parallelism+works

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

  • Сначала Тез пытается выяснить доступность ресурсов в кластере для этих задач.,Для этого YARN предоставляет значение запаса (и в будущем могут использоваться другие атрибуты).Допустим, это значение равно T.
  • Далее Tez делит T на ресурс для каждой задачи (скажем, M), чтобы узнать, сколько задач может выполняться параллельно за одну (то есть за одну волну).W = T / M.
  • Далее W умножается на волновой коэффициент (из конфигурации - tez.grouping.split-waves), чтобы определить количество задач, которые будут использоваться.Допустим, это значение равно N.
  • Если имеется всего X разделений (входных осколков) и N задач, тогда это будет группировать X / N разделений на задачу.Затем Tez оценивает размер данных для каждой задачи на основе количества разделений на задачу.
  • Если это значение находится между tez.grouping.max-size и tez.grouping.min-size, то N принимается какколичество заданийЕсли нет, то значение N корректируется для приведения данных по каждой задаче в соответствие с максимальным значением в минуту в зависимости от того, какой порог был пройден.
  • Для экспериментальных целей в конфигурации можно задать tez.grouping.split-count, чтобы указатьжелаемое количество групп.Если этот конфиг указан, то вышеуказанная логика игнорируется, и Tez пытается сгруппировать разбиения в указанное количество групп.Это лучшее усилие.
  • После этого выполняется алгоритм группировки.Он группирует разбиения по местоположению узла, а затем по стойке, соблюдая ограничения по размеру группы.
...