hive on spark执行速度慢

星环hive on spark执行速度慢

因为task的启动数量是根据hdfs底层的block数量来定,在 block 数据量偏少的情况下,单个任务运行的时间就少,那么任务开启的开销很可能占据总开销的大量比例。现在因为block文件数量庞大,导致task启动数量巨大,过多的线程将导致排队延时的增加,严重影响sql的执行效率,所以对 block 有效的合并处理有助于促进语句执行的高效性 于是开启automerge开关: set ngmr.partition.automerge=true; 它两种配置合并后Task任务量方法

“ngmr.partition.mergesize = n”,表示将 n 个 block 安排给单个线程处理。 “ngmr.partition.mergesize.mb = m”,表示一个 task 负责处理大小为 m 的数据量(单位 为 MBytes)可以根据需要仅设置这两个参数其中之一,默认使用方法 2 来控制,如果需要使用方法 1,需要将 mergesize.mb 设为-1。

如果已知数据源中小文件过多,最好在向新表导入数据之前就打开automerge 开关,使一个 Task 处理多个 block。因为同属一个 Task 的结果将被返回在同一 个文件中,因此导入数据时做任务的合并处理可达到小文件合并效果。然后关闭automerge 开关,今后都不用再对该表开启。 除了检查 block 的大小,还可以通过在 4040 端口查看任务第一阶段 Tasks 的数量和每Task 的运行时间判断是否需要 automerge。第一阶段的 Task 负责 Map 端任务,默认每个Task 对应一个 block,所以如果第一阶段 Task 过多而且单个执行时间短,表示小体积 block 多,Task 运行效率低,需要启用 automerge

转载于:https://juejin.im/post/5c4692536fb9a049fe3578d5

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值