• Hive 任务限制同时运行的任务数量的配置


    Hive任务的并发控制,指同时运行的 container 的数量,防止先提交的任务占用全部的队列资源,导致后来提交的任务无法申请到足够的资源。

    Hive 任务的并发控制,和使用的引擎相关。

    MapReduce(MR)引擎

    • Map 任务
      mr 引擎使用 mapreduce.job.running.map.limit 来限制同时执行的 map 任务数量。如一个 hive 任务生成 1000 个 map 任务。当 mapreduce.job.running.map.limit 为 10 时,最多可以同时运行 10 个 map 任务。默认值为0,代表不限制同时执行的 map 任务数量。

    • Reduce 任务
      mapreduce.job.running.reduce.limit 来限制同时执行的 reduce 任务数量。默认值为0,代表不限制。

    Tez 引擎

    TEZ 没有相关的配置。但是可以通过使用提交的队列限制,因为提交到一个队列中的任务,使用的资源不可能超过队列的资源。
    也可以通过以下配置改变执行计划的 Map 和 Reducer 任务的数量。但是通过此方案和 MapReduce 引擎不一样。MapReduce 的方法是生成 100个 Map task,最大同时运行 10 个的方式。而以下的方法仅可以生成 10 个 Map 任务,虽然限制住了资源,但是每个任务运行的数据量变化。这些配置在 MapReduce 框架也有对应的方案。

    示例 SQL 如下,数据源自 tpcds scale=1000。

    select sum(cnt) cnt 
    from (
      select ws_item_sk, count(1) cnt 
      from web_sales 
      group by ws_item_sk
    )t;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Explain SQL,执行计划如下:

    Reducer 2 <- Map 1 (SIMPLE_EDGE)
    Reducer 3 <- Reducer 2 (CUSTOM_SIMPLE_EDGE)
    
    • 1
    • 2

    从以下日志可以看到,Map 1 有 38 个 Task, Reducer 2 有 1009 个 Task。

            VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED  
    ----------------------------------------------------------------------------------------------
    Map 1            container       RUNNING     38          0        4       34       0       0  
    Reducer 2        container        INITED   1009          0        0     1009       0       0  
    Reducer 3        container        INITED      1          0        0        1       0       0 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    通过设置 split size

    tez.grouping.min-size 默认为 50M,tez.grouping.max-size 默认为 1G.

    set tez.grouping.min-size=1024000000;
    set tez.grouping.max-size=10240000000;
    
    • 1
    • 2

    Map 1 的数量变为 14.

            VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED  
    ----------------------------------------------------------------------------------------------
            VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED  
    ----------------------------------------------------------------------------------------------
    Map 1            container       RUNNING     14          0        8        6       0       0  
    Reducer 2        container        INITED   1009          0        0     1009       0       0  
    Reducer 3        container        INITED      1          0        0        1       0       0  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    通过设置 tez.grouping.split-count 设置 Map 数量为固定值

    通过 tez.grouping.split-count 参数可以设置 Map 任务为固定值,一般最终是此值加1.

    set tez.grouping.split-count=4;
    
    • 1

    最终生成 Map 1 的数量为 5.

    ----------------------------------------------------------------------------------------------
            VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED  
    ----------------------------------------------------------------------------------------------
    Map 1 ..         container       RUNNING      5          1        4        0       0       0  
    Reducer 2        container        INITED   1009          0        0     1009       0       0  
    Reducer 3        container        INITED      1          0        0        1       0       0  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    设置 reduce 数量

    reducer 任务的数量是根据输入动态计算的,由以下 2 个参数确定。

    hive> set hive.exec.reducers.bytes.per.reducer;
    hive.exec.reducers.bytes.per.reducer=256000000
    hive> set hive.exec.reducers.max;
    hive.exec.reducers.max=1009
    
    • 1
    • 2
    • 3
    • 4

    通过设置每个reduce 处理数据量来调整 reduce 数量

    以下参数设置每个reduce 处理 25G 数据。

    set hive.exec.reducers.bytes.per.reducer=25600000000;
    
    • 1

    Reducer 2 的 Task 数量从 1009 变为 104.

            VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED  
    ----------------------------------------------------------------------------------------------
    Map 1            container       RUNNING     38          0        8       30       0       0  
    Reducer 2        container        INITED    104          0        0      104       0       0  
    Reducer 3        container        INITED      1          0        0        1       0       0 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    通过 hive.exec.reducers.max 设置最大值

    set hive.exec.reducers.max=10;
    
    • 1

    这时 Reducer 2 的 Task 数量变为 10.

            VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED  
    ----------------------------------------------------------------------------------------------
    Map 1            container       RUNNING     38          0        8       30       0       0  
    Reducer 2        container        INITED     10          0        0       10       0       0  
    Reducer 3        container        INITED      1          0        0        1       0       0 
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Matlab群体智能优化算法之海象优化算法(WO)
    JavaScript 操作浏览器和HTML文档/JavaScript 操作对象
    MATLAB神经网络和优化算法
    近2天的小进步:框架优化-data封装
    0×03 Vulnhub 靶机渗透总结之 KIOPTRIX: LEVEL 1.2 (#3) SQL注入+sudo提权
    那些你不知道入过万风口的项目,抖音小店到底有多靠谱,有多挣钱
    vue状态管理工具
    postman “header“:{“retCode“:“999999“
    计算机通识——多媒体参数
    python-自动化篇-办公-将PDF文件转存为图片
  • 原文地址:https://blog.csdn.net/houzhizhen/article/details/132872333