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

你可能感兴趣的:(hive on spark执行速度慢)