TEZ映射器资源请求

时间:2019-04-05 02:22:51

标签: hive amazon-emr apache-tez

我们最近从MapReduce迁移到TEZ,以便在EMR上执行Hive查询。我们看到的情况是,对于确切的配置单元查询,启动的映射器数量非常不同。请参阅下面的地图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 :(得分:0)

本文介绍了Tez分配资源的过程。 https://cwiki.apache.org/confluence/display/TEZ/How+initial+task+parallelism+works

  

如果为拆分启用了Tez分组,则将进行常规分组   在这些拆分上运行逻辑,以将其分组为更大的拆分。的   想法是在处理的并行度和   每个并行过程中要完成多少工作。

     
      
  • 首先,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尝试分组   分成指定数量的组。这是最大的努力。
  •   
  • 此后,将执行分组算法。它在考虑组大小的同时,按节点局部性对拆分分组,然后按机架局部性分组   限制。
  •