Automerge及优化后的AutomergeV2用法及注意事项

友情链接


功能介绍

Automerge 用于在map端控制map task的数目,它可以根据每个partition(数据块)所在的位置及大小将多个partitions交给一个task去完成。

在星环TDH9.3及后续版本中,还引入了automergeV2功能,V2版本在性能方面有很大提升。

控制参数

  • ngmr.partition.automerge默认false
  • ngmr.partition.mergesize默认3,控制额外merge的数据块个数
  • ngmr.partition.mergesize.mb 默认4 (M),控制额外merge的数据块的大小

注意事项

使用的时候需要注意:

① ngmr.partition.mergesize.mb=-1, 则表示不关心数据块的大小,会将(1 + mergesize)个数据块合并到一个task去做;

② ngmr.partition.mergesize.mb!=-1,则表示额外merge的数据块的大小超过mergesize.mb时,停止merge;

③ ngmr.partition.mergesize和ngmr.partition.mergesize.mb只有一个参数可以生效,-1则表示不生效,如果两个参数同时设置,则生效的是参数ngmr.partition.mergesize.mb;

④ mergesize和mergesize.mb设置过大会导致gc,建议mergesize设置范围为:10-1000,mergesize.mb设置范围:10-200;

一些可能存在的问题

需要注意的是,该功能当前可能存在一些问题,比如

① merge之前不检查自身大小,会导致将两个size都很大的数据块合并在一起,导致数据倾斜;

② automerge的参数如果设置的太大,可能会导致executor gc,因为一个task会启动多个reader去读取文件

③ ngmr.partition.mergesize.mb和ngmr.partition.mergesize不能同时生效;

④ 为了保证数据的locality,automerge只会将在相同节点的数据块合并。当集群比较大时,数据比较分散,能够合并的数据块会受到限制。从5.X起,可以用inceptor.mergecube缓解。

⑤ 对torc表的合并,只能获取base文件的size,当torc表还没有base文件时,size就是0,ngmr.partition.mergesize.mb不起作用,起作用的是ngmr.partition.mergesize


AutomergeV2

在TDH9.3的后续版本中,产品引入了改进后的automergeV2功能,V2版本在性能方面有很大提升,同时该功能也解决了上述有关automerge可能存在的一些问题,比如:

① 合并到一组的partitions的size之和总会大于 ngmr.partition.mergesize.mb 的设置值,即size之和大于阈值的时候才会认为merge满了,导致的问题是会合并两个大的partition,造成单task执行时间长;

② 大文件很多(即要使用ngmr.partition.mergesize.mb参数),小文件也很多(即要使用ngmr.partition.mergesize参数)时,只用前者那个参数,那么问题就是会把数量巨多的小文件合并到1个task,虽然每个文件里数据量很少,但是不停的create reader是1个很耗时的过程;如果使用后者那个参数,那会把大文件合并到1个task。都会造成单task执行时间长;

因此,具体如何使用automergeV2功能呢?

参数复用

  • set ngmr.automerge.locality=2;
  • set ngmr.partition.mergesize.mb=4;
  • set ngmr.partition.mergesize=3;

这3个参数是复用的,使用姿势:

1)ngmr.automerge.locality的作用不变,即合并两个文件的条件是相同locations的个数大于此值

2)ngmr.partition.mergesize.mb 和 ngmr.partition.mergesize 同时生效,设成-1表示不生效,解决了会合并两个大文件的问题

3)遇到 bucket join,torc表时,会自动关掉 automergeV2,支持的表有 orc, text, csv, parquet.

automergeV2开关的操作方法

1) 使用automergeV2遇到不支持的情况会自动使用老版本,其他参数功能不变

  • set ngmr.automerge.v2.enabled=true; -- 默认开
  • set ngmr.partition.automerge=true; -- 默认关

2) 如果需要使用老版本 automerge,参数如下:

  • set ngmr.automerge.v2.enabled=false;
  • set ngmr.partition.automerge=true;


评论
登录后可评论
发布者
星小环分享号
文章
180
问答
205
关注者
27
banner
关注星环科技
获取最新活动资讯

加入TDH社区版技术交流群

获取更多技术支持 ->

扫描二维码,立即加入