友情链接
Automerge 用于在map端控制map task的数目,它可以根据每个partition(数据块)所在的位置及大小将多个partitions交给一个task去完成。
在星环TDH9.3及后续版本中,还引入了automergeV2功能,V2版本在性能方面有很大提升。
使用的时候需要注意:
① 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
在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功能呢?
这3个参数是复用的,使用姿势:
1)ngmr.automerge.locality的作用不变,即合并两个文件的条件是相同locations的个数大于此值
2)ngmr.partition.mergesize.mb 和 ngmr.partition.mergesize 同时生效,设成-1表示不生效,解决了会合并两个大文件的问题
3)遇到 bucket join,torc表时,会自动关掉 automergeV2,支持的表有 orc, text, csv, parquet.
1) 使用automergeV2遇到不支持的情况会自动使用老版本,其他参数功能不变
2) 如果需要使用老版本 automerge,参数如下:
友情链接
Automerge 用于在map端控制map task的数目,它可以根据每个partition(数据块)所在的位置及大小将多个partitions交给一个task去完成。
在星环TDH9.3及后续版本中,还引入了automergeV2功能,V2版本在性能方面有很大提升。
使用的时候需要注意:
① 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
在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功能呢?
这3个参数是复用的,使用姿势:
1)ngmr.automerge.locality的作用不变,即合并两个文件的条件是相同locations的个数大于此值
2)ngmr.partition.mergesize.mb 和 ngmr.partition.mergesize 同时生效,设成-1表示不生效,解决了会合并两个大文件的问题
3)遇到 bucket join,torc表时,会自动关掉 automergeV2,支持的表有 orc, text, csv, parquet.
1) 使用automergeV2遇到不支持的情况会自动使用老版本,其他参数功能不变
2) 如果需要使用老版本 automerge,参数如下: