Hive支持将SQL执行的Metrics信息存储到Hive表中
使用Hive执行SQL任务时,Hive会在SQL执行过程中记录Metrics信息,并写入HiveServer节点的“queryinfo.log”日志文件中,包括引擎类型、queryId、SQL语句执行耗时、处理的数据量、Task任务等信息。为了方便查询和更好地利用这些信息,将记录的“queryinfo.log”日志转存到Hive表中,以便用户可以使用Hive SQL来分析处理相关数据。
默认情况下,该功能是关闭的,即HiveServer节点本地的“queryinfo.log”日志不会转存到Hive表中。可通过将HiveServer的“hive.sql.query.metrics.archive.enable”参数值修改为“true”,以开启将Metrics信息存储到Hive表的功能。
- 存储“queryinfo.log”日志的数据库和表在MetaStore启动时会被创建,开启Metrics信息存储到Hive表的功能后,系统会根据归档间隔时间自动将本地的“queryinfo.log”日志写入到Hive表中,无需执行创建存储Metrics信息的数据库、表和插入数据操作。
- 查看Metrics表数据的用户需要具备该表的查询权限(授予用户权限时,仅授予该表查询权限即可,以防止误删Metrics表数据)。
- 配置了HiveMetaStore物理降压功能的集群不支持该功能。
- 该章节仅适用于MRS 3.6.0-LTS及之后版本。
操作步骤
- 登录FusionInsight Manager,选择“集群 > 服务”,在服务列表中单击“Hive”进入概览页面,选择“ 配置 > 全部配置”。
- 在全部配置界面右上角的搜索框中搜索“hive.sql.query.metrics.archive.enable”,并修改该参数值为“true”,开启将SQL Metrics信息存储到Hive表功能。
- (可选)在搜索框中搜索“metrics”,根据实际需求配置表1中相关的Metrics日志存储参数。
表1 Metrics日志存储参数 参数
参数描述
默认取值
hive.sql.query.metrics.archive.interval
Metrics日志归档的间隔时间,单位为小时,取值范围为1~24。
1
metastore.metrics.archive.add.partition.time
设置Metrics表分区的创建时间,MetaStore会根据该时间在前一天创建分区,格式为“hh:mm:ss”。
23:00:00
metastore.metrics.archive.db.table.location.schema
用于指定存储SQL Metrics日志数据库和表Location中的schema,根据该schema决定Metrics日志存在HDFS或OBS上。
说明:如果Metrics日志需要存储在OBS上,需参考配置MRS集群存算分离完成存算分离配置。
hdfs://hacluster
metastore.metrics.archive.retention.time
归档到Hive表中的Metrics日志的保留时间,超出保留时间的日志会自动被清除。单位为天,取值范围为7~90。
30
- 单击“保存”,在弹出窗口单击“确定”保存配置。
- 单击“实例”,勾选所有HiveServer实例,选择“更多 > 重启实例”,输入当前用户密码并单击“确定”重启HiveServer实例。
- 默认普通用户(不包含supergroup组的用户)没有权限查看“mrs_system_sql_metrics”表,需参考Hive用户权限管理或添加Hive的Ranger访问权限策略(Hive已启用Ranger鉴权)章节为对应用户仅授权于该表的查询权限。
- Metrics日志归档后,可以在Hive客户端使用Hive SQL查询分析“mrs_system_sql_metrics”表的数据,例如:
cd 客户端安装目录
source bigdata_env
kinit 业务用户名(集群未启用Kerberos认证(普通模式)请跳过该操作)
beeline
use mrs_system;
select * from mrs_system_sql_metrics where record_date='20250101' and component_name='hive' limit 10;
Metrics数据库和表介绍
Metrics数据库名为“mrs_system”,Metrics表名为“mrs_system_sql_metrics”。
“mrs_system_sql_metrics”表包含两级分区,一级分区名为“record_date”,用于区分Metrics日志生成的时间,分区值的格式为“yyMMdd”,例如“20250101”;二级分区名为“component_name”,用于区分Metrics日志所属的组件,分区值为“hive”、“spark”、“hetu”。表字段信息如表2所示。
|
字段名称 |
字段类型 |
字段描述 |
|---|---|---|
|
engine |
string |
引擎类型。 |
|
tenant |
string |
租户名称。 |
|
instance_id |
string |
集群ID。 |
|
query_id |
string |
Query ID。 |
|
execute_sql |
string |
SQL语句。 |
|
status |
string |
Query状态。 |
|
execute_time |
double |
执行耗时,单位为秒。 |
|
queued_time |
double |
排队时长,单位为秒。 |
|
start_time |
string |
开始时间。 |
|
end_time |
string |
结束时间。 |
|
user_name |
string |
用户名称。 |
|
user_ip |
string |
客户端IP地址。 |
|
input_row |
bigint |
总扫描数据行数(读)。 |
|
input_data |
double |
总扫描数据大小(读),单位为MB。 |
|
written_row |
bigint |
写入数据行数。 |
|
written_data |
double |
写入数据大小,单位为MB。 |
|
result_row |
bigint |
查询结果行数。 |
|
result_data |
double |
查询结果大小,单位为MB。 |
|
assigned_memory |
double |
Query分配内存,单位为MB。 |
|
total_memory |
double |
任务执行时使用的内存大小,值为任务运行使用的内存(单位为MB) * 任务运行的时间(单位为秒)。 |
|
cpu_time |
double |
任务运行时使用CPU的时间,值为任务运行使用的CPU(单位为vcore) * 任务运行的时间(单位为秒)。 |
|
scan_partition |
bigint |
扫描分区数。 |
|
scan_file |
bigint |
扫描文件数。 |
|
splits |
bigint |
split数。 |
|
tasks |
string |
Task信息,值为JSON格式,包括引擎类型、总Task数、stage划分、各stage中的Task数和并行度。 |
|
sql_defense |
string |
大SQL防御信息。 |
|
source_table |
string |
源表。 |
|
sink_table |
string |
目标表。 |
|
audit_addition |
string |
JDBC连接标识属性。 |
|
task_id |
string |
JobGateway提交的任务所在的任务组ID。 |
|
taskExeId |
string |
JobGateway执行的作业ID。 |
|
extended_info |
string |
该字段作为扩展字段,便于后续新增信息,值为JSON格式,具体JSON字段可通过在Hive客户端执行以下命令查看: show create table mrs_system_sql_metrics; |