【调优指导】TEZ常见调优参数

举报
李松 发表于 2022/11/08 09:37:33 2022/11/08
【摘要】 Hive on Tez常用调优参数

一、设置引擎为Tez参数:

参数 参数说明 解释
hive.execution.engine 执行引擎选择 使用tez引擎时,此值设置为tez
yarn.timeline-service.enabled 是否使用timeline服务 使用timeline时,执行hive on tez运行日志可在tez界面查看,此值为true
hive.tez.log.level 设置Tez Task的日志级别 默认是INFO日志,如果为了定位问题可设置DEBUG级别


二、内存相关调优:

参数 参数说明 解释
tez.am.resource.memory.mb Application Master分配的container大小,单位为M AM的内存
tez.am.launch.cmd-opts Tez AppMaster进程启动期间提供的命令行选项。不要在这些启动选项中设置任何Xmx或Xms,以便Tez可以自动确定他们 不需要主动设置
hive.tez.container.size Tez AppMaster向RM申请的container大小,单位M 不需要主动设置TEZ的AppMaster占用的container大小由TEZ自动跳转,但是向AM申请出来的container大小则需本参数管理
hive.tez.java.opts container进程启动期间提供的命令行选项。可以在默认参数后续添加内存选项 该参数大小一般为hive.tez.container.size的80%,不建议直接在该参数中直接添加Xmx/Xms,而是使用下面参数调参opts大小
tez.container.max.java.heap.fraction 如果hive.tez.java.opts参数中没有设置Xmx/Xms的值,值的大小为0.8*hive.tez.container.size 建议使用该值来调整opts
tez.runtime.io.sort.mb 排序输出时的排序缓冲区大小,单位M 可以将tez.runtime.io.sort.mb设置为hive.tez.container.size的40%,但该值不能超过2GB
hive.auto.convert.join.noconditionaltask.size 如果hive.auto.convert.join.noconditionaltask已关闭,则此参数不会生效。但是,如果它打开,并且n路连接的表/分区的n-1的大小总和小于此大小,连接直接转换为mapjoin(没有条件任务)。默认值为10MB 该值能将多个Join的表的n-1个表合成一个大表,然后将该表转为mapjoin可以将该值设置为hive.tez.container.size的1/3


三、task调优:

参数 参数说明 解释
tez.grouping.min-size 分组拆分大小的下限 单位字节,默认50M
tez.grouping.max-size 分组拆分大小的上限 单位字节,默认256MB
tez.grouping.split-count 指定分组的数据量,指定之后忽略前两个参数 个数
hive.tez.auto.reducer.parallelism 打开Tez的reducer parallelism特性。设置true后,tez会在运行时根据数据大小动态调整reduce数量 最好使用TEZ提供的动态调整reduce数量功能。不要使用mapred.reduce.tasks参数去直接决定reduce的个数。只有打开该参数才能使用下面的hive.tez.min.partition.factor,
hive.tez.max.partition.factor参数
hive.exec.reducers.max 任务中允许的最大reduce数量  
hive.exec.reducer.bytes.per.reducer 每个reduce处理的数据量,默认值是256M  
hive.tez.min.partition.factor 这两个值效果一致,增加该值就是增加reduce数量。减少该值 则减少reduce数量 reduce数量由三个变量控制:hive.exec.reducers.bytes.per.reducer,
hive.tez.min.partition.factor,
hive.tez.max.partition.factor。
假设reduce任务估算出的数据里为190944bytes,则maxReduces=min(999,max(190944/256000000,1)*2)=2
hive.tez.max.partition.factor 这两个值效果一致,增加该值就是增加reduce数量。减少该值 则减少reduce数量 reduce数量由三个变量控制:hive.exec.reducers.bytes.per.reducer,
hive.tez.min.partition.factor,
hive.tez.max.partition.factor。
假设reduce任务估算出的数据里为190944bytes,则maxReduces=min(999,max(190944/256000000,1)*2)=2
tez.shuffle-vertex-manager.min-src-fraction 这两个值效果一致,增加该值则reduce stage启动晚一些。减少该值则reduce stage启动早一些 想让所有map都执行完才开始执行reduce,可以将这两个值都设置为1
tez.shuffle-vertex-manager.max-src-fraction 这两个值效果一致,增加该值则reduce stage启动晚一些。减少该值则reduce stage启动早一些 想让所有map都执行完才开始执行reduce,可以将这两个值都设置为1

四、其他调优:

参数 参数说明 解释
hive.cbo.enable 是否开始CBO 开启CBO有利于优化执行计划
hive.exec.parallel 是否并发调度各stage 为加速执行可以设置此值为true,HS会并发调度兄弟节点的stage
hive.merge.tezfiles 是否合并tez文件 可以设置此值为true,用于合并引擎文件,小文件时可以加速
tez.am.session.min.held-containers 预留最少的container数量,空闲占用,为下一个DAG提供快速响应时间 此值可以设置适当的保留数值,建议10--100
hive.auto.convert.join 是否开启自动转换mapjoin 开启时会自动根据数据大小选择是否走mapjoin
hive.mapjoin.hybridgrace.hashtable 是否使用混合的操作完成mapjoin 默认值时开启,此值仅为tez引擎使用
tez.runtime.pipelined.sorter.lazy-allocate.memory 对Tez任务中是否开启软引用的内存惰性分配 可以设置成true用于加速再缓存中建立数据的软连接访问数据
hive.prewarm.enabled 可以在作业启动前开启container预热功能 可以设置次参数为true开启预热
hive.prewarm.numcontainers 开启预热的container数 预热需要几秒钟,对于短暂会话会比较好,尤其是在查询涉及reduce阶段。但是,如果hive.prewarm.numcontainers的值高于集群中可用的值,则该过程最多需要30s。因此谨慎使用预热
hive.stats.autogather 是否开启自动收集统计信息 可以根据analyze的结果优化执行计划
hive.stats.fetch.column.stats 是否开启获取列的统计信息 可以根据analyze的结果优化执行计划
hive.compute.query.using.stats 是否开启计算查询使用表的统计信息 可以根据analyze的结果优化执行计划
hive.optimize.skewjoin 是否开启join的数据倾斜优化 根据业务数据的场景进行判断是否存在由于join导致的数据倾斜
hive.groupby.skewindata 是否开启groupby的数据倾斜优化 根据业务数据的场景进行判断是否存在由于groupby导致的数据倾斜
tez.session.am.dag.submit.timeout.secs Tez的session模式下,AM退出前等待客户端提交任务的超时时间 默认5分钟,此时间到期后还未提交任务,AM将退出


其他调优建议:

可以通过explain观察执行计划,对执行计划适当调优,比如对表先进行统计信息收集:ANALYZE TABLE 表名 COMPUTE STATISTAICS;这样有利于执行计划的优化。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。