很多Impala
用户不知道如何阅读Impala query profile
来了解一个查询背后正在执行的操作,从而在此基础上对查询进行调优以充分发挥查询的性能。因此我想写一篇简单的文章来分享我的经验,并希望它可以对希望了解更多信息的人有所帮助。
这是本系列的第1部分,我将介绍一些Impala query profile
的基础知识和查看Profile
时特别要注意的内容。
获取Impala query profile
首先,获取Impala query profile
有两种方法,最简单的方法是在impala-shell
中运行查询后执行“PROFILE”
语句,如下所示:
[impala-daemon-host.com:21000] > SELECT COUNT(*) FROM sample_07;
Query: SELECT COUNT(*) FROM sample_07
Query submitted at: 2018-09-14 15:57:35 (Coordinator: https://impala-daemon-host.com:25000)
dQuery progress can be monitored at: https://impala-daemon-host.com:25000/query_plan?query_id=36433472787e1cab:29c30e7800000000
+----------+
| count(*) |
+----------+
| 823 |
+----------+
Fetched 1 row(s) in 6.68s
[impala-daemon-host.com:21000] > PROFILE; <-- Simply run "PROFILE" as a query
Query Runtime Profile:
Query (id=36433472787e1cab:29c30e7800000000):
Summary:
Session ID: 443110cc7292c92:6e3ff4d76f0c5aaf
Session Type: BEESWAX
.....
也可以在CDH
的Web
页面(Cloudera Manager Web UI
)上点击CM > Impala > Queries
,找到刚刚运行的查询,然后点击Query Details
:
接着向下滚动找到“Download Profile”
按钮:
你也可以到执行查询的Impala Daemon
(impalad
节点,该节点在Impala
集群中为coordinator
角色)节点的Web
界面来下载query profile
信息:
https://{impala-daemon-url}:25000/queries
该Web
界面会展示出在当前Impala Daemon
节点执行的SQL
列表:
然后点击对应SQL
后的“Details”
链接转到“ Profile”
tab
页:
获取了Profile
之后,接下来我们开始剖析Profile
。
Profile解析
下面是Query Profile
的一段文本,该段文本是Profile
最上面的概要(Summary
)部分:
Query (id=36433472787e1cab:29c30e7800000000):
Summary:
Session ID: 443110cc7292c92:6e3ff4d76f0c5aaf
Session Type: BEESWAX
Start Time: 2018-09-14 15:57:35.883111000
End Time: 2018-09-14 15:57:42.565042000
Query Type: QUERY
Query State: FINISHED
Query Status: OK
Impala Version: impalad version 2.11.0-cdh5.14.x RELEASE (build 50eddf4550faa6200f51e98413de785bf1bf0de1)
User: hive@VPC.CLOUDERA.COM
Connected User: hive@VPC.CLOUDERA.COM
Delegated User:
Network Address: ::ffff:172.26.26.117:58834
Default Db: default
Sql Statement: SELECT COUNT(*) FROM sample_07
Coordinator: impala-daemon-url.com:22000
Query Options (set by configuration):
Query Options (set by configuration and planner): MT_DOP=0
Plan:
----------------
我们将其分为几个部分来介绍,这里面有一些频繁用到的重要信息:
1、查询ID:
Query (id=36433472787e1cab:29c30e7800000000):
该ID
唯一标识在Impala
中运行过的SQL
,这对于从Impala Daemon
日志中用ID
查询相关的信息很有用,只需搜索此查询ID
,就可以了解SQL
运行细节和相关的错误信息。
2、Session类型:
Session Type: BEESWAX
这可以告诉我们连接来自哪里。BEESWAX
意味着查询是从impala-shell
客户端运行的。如果从Hue
运行,类型将是HIVESERVER2
,因为Hue
是通过HIVESERVER2 thrift
连接的。
3、查询起止时间:
Start Time: 2018-09-14 15:57:35.883111000
End Time: 2018-09-14 15:57:42.565042000
这可以告诉我们查询运行了多长时间,此时间包括会话空闲时间(session idle time
)。因此,如果你看到在Hue
运行一个简单的查询用了几秒钟返回结果,是由于Hue
会保持会话打开直到会话关闭或用户运行另一个查询,因此此处的时间可能比正常显示的时间更长。如果通过impala-shell
运行,则开始时间和结束时间应与运行时间完全匹配,因为impala-shell
在查询完成后会立即关闭查询处理程序。
4、查询状态:
Query Status: OK
这表明查询是否成功完成。OK
表示查询成功执行完成。如果有错误,通常会在此处显示,例如,被用户取消(cancelled by user
)、会话超时(session timeout
)、异常(Exceptions
)等。
5、Impala版本:
Impala Version: impalad version 2.11.0-cdh5.14.x RELEASE (build 50eddf4550faa6200f51e98413de785bf1bf0de1)
该信息显示运行查询的Impala
版本,如果你发现它与你安装的Impala
版本不匹配,则说明未正确安装某些部分。
6、运行查询的用户信息:
User: hive@XXX.XXXXXX.COM
Connected User: hive@XXX.XXXXXX.COM
Delegated User:
该信息表示运行查询的用户。
7、查询所用的数据库:
Default Db: default
该信息表示查询所使用的数据库。
8、查询语句:
Sql Statement: SELECT COUNT(*) FROM sample_07
如果你帮助其他人排查问题,则需要此信息,因为需要了解查询的构造方式以及涉及的表,在许多情况下,对查询的简单重写将有助于解决问题或提高查询性能。
9、执行查询的impalad节点:
Coordinator: impala-daemon-host.com:22000
该信息显示运行查询的Impala daemon
服务的主机,通常被称为Coordinator
,这有助于我们选择从哪个主机查找INFO
、WARNING
和ERROR
级别的日志。
10、查询选项:
Query Options (set by configuration):
Query Options (set by configuration and planner): MT_DOP=0
该信息显示当前查询使用了哪些查询选项(QUERY OPTIONS
),这有助于我们判断是否在用户级别(user level
)或池级别(pool level
)覆盖了查询选项。一个示例是将Impala Daemon
的内存设置为120GB
,但小查询仍然失败,并抛出OutOfMemory
异常,通过该信息可以帮助我们验证用户是否在会话中将MEM_LIMIT
参数设置了太小的值(可能导致OutOfMemory
异常)。
总结
本系列的第1部分介绍了查询的摘要(Summary
)部分以帮助我们了解Query Profile
的基本信息,在本系列的下一部分,将详细介绍查询计划以及Profile
的执行摘要(Execution Summary
)部分。