Hive内核调优(二)
1.3 Hive 日志说明
SQL调优过程中需要结合Hive日志分析性能瓶颈,如下是对关键日志进行说明。
1.3.1 运行日志
运行态日志主要包括HiveServer日志、MetaStore日志、Yarn日志。
HiveServer 日志:HiveServer 负责接收客户端请求(SQL 语句),然后编译、执行(提交到 YARN 或运行 local MR)、与 MetaStore 交互获取元数据信息等。HiveServer 运行日志记录了一个 SQL 完整的执行过程。通常情况下,当我们遇到 SQL 语句运行失败,我们首先要看的就是 HiveServer 运行日志。
日志文件路径:
/var/log/Bigdata/hive/hiveserver/hive.log
MetaStore日志:通常情况下,当我们遇到查看HiveServer运行日志时,如遇到MetaException或者连接MetaStore失败,我们就需要去看MetaStore运行日志了。
MetaStore运行日志主要可以帮助分析一些任务慢的问题。比如get_database、get_table、get_role_grants_for_principal等操作,可以根据HiveQL中操作的表名及大致的操作时间点,获取到对应的MetaStore线程号,类似这样:pool-8-thread-652909,有线程号可以看到每次元数据操作的耗时,如果耗时过长,可能导致任务变慢。
日志文件路径:
/var/log/Bigdata/hive/metastore/metastore.log
1.3.2 审计日志
首先,对于审计日志来说,记录了某个时间点某个用户从哪个IP发起对HiveServer或者MetaStore的请求以及记录执行的语句是什么。
如下的HiveServer审计日志,表示在2021-02-01 14:51:22 用户user_chen向HiveServer发起了show tables请求,客户端IP为192.168.1.18。
如下面MetaStore审计日志,表示在2021-01-29 11:31:15 用户hive向MetaStore发起
shutdown请求,客户端ip为192.168.1.18。
通常情况下,审计日志对我们定位实际错误信息并无太大帮助。但在遇到诸如下述类
问题时,需要查看审计日志:
- 如客户端发起请求,但是迟迟未得到响应。由于不确定到底是任务是卡在客户端还是服务端,可以通过审计日志查看。如果审计日志根本没有相关信息,那么说明卡死在客户端;如审计日志有相关打印,那么就需要去运行日志里看到底程序卡在哪一步了。
- 查看指定时间段的任务请求个数。可通过审计日志查看在指定时间段到底有多少个请求。 日志文件路径:
/var/log/Bigdata/audit/hive/hiveserver/hive-audit.log
和/var/log/Bigdata/audit/hive/metastore/metastore-audit.log
1.3.3 GC 日志
HiveServer和MetaStore均有GC日志,当我们遇到GC问题可以查看GC日志以快速定位是否是GC导致。如,当遇到HiveServer或MetaStore频繁重启就需要去看下对应的GC日志,在GC日志中搜索“Full GC”可以看到Full GC的频率情况。
日志文件路径:
/var/log/Bigdata/hive/hiveserver/hive-omm-20220622101230-pid3740291-gc.log.0.current
和
/var/log/Bigdata/hive/metastore/hive-omm-20220622101212-pid3732558-gc.log.0.current
1.3.4 LocalTask 日志
如果报错是MapRedLocalTask失败,查看localtask日志,一般是MapJoin过程中,Local Task内存设置过小,set hive.mapred.local.mem=4096,默认1024M。
日志文件路径:
/var/log/Bigdata/hive/hiveserver/localtasklog/localtask.log
1.4 Hive 优化器相关
1.4.1 相关性优化开关
【参数值】:hive.optimize.correlation
【参数解析】:是否开启相关性优化。
【如何调优】:默认:false
相关性优化,旨在利用下面两种查询的相关性:
(a)输入相关性:在原始operator树中,同一个输入表被多个MapReduce任务同时使用的场景;
(b)作业流程的相关性:两个有依赖关系的MapReduce的任务的shuffle方式相同。
相关性优化特性可以减少MR任务个数,从而提升整体效率,建议设置为true。
1.4.2 向量化优化开关
【参数值】:
hive.vectorized.execution.enabled
【参数解析】:是否开启向量化优化。
【如何调优】:默认:false
向量化特性可以显著地减少如下几类查询的CPU使用率,如扫描、过滤、聚合和关联,建议设置为true。
1.4.3 基于代价的优化(CBO)开关
【参数值】:hive.cbo.enable
【参数解析】:是否开启基于代价的优化。
【如何调优】:默认:true
基于代价的优化器,可以基于代价(包括FS读写、CPU、IO等)对查询计划进行进一步的优化选择,提升Hive查询的响应速度,建议设置为true。
版权归原作者 泽泽野 所有, 如有侵权,请联系我们删除。