更新时间:2025-12-10 GMT+08:00
分享

Spark支持将SQL执行的Metrics信息存储到Hive表中

操作场景

通过spark-sql和spark-beeline提交的SQL任务,其SQL运行过程信息会记录在queryInfo中。为了方便查询和更好地利用这些信息,将原本记录的“queryInfo日志”转存到Hive表中,以便用户可以使用Hive SQL来分析处理相关数据。

默认情况下,该功能是关闭的,即原本记录的“queryInfo.log”日志不会转存到Hive表中。可通过将JobHistory的“spark.sql.query.metrics.archive.enable”参数值修改为“true”,以开启将Metrics信息存储到Hive表的功能。

存储“queryInfo日志”的数据库和表在MetaStore启动时会被创建,开启Metrics信息存储到Hive表的功能后,系统会根据归档间隔时间自动将原本记录的“queryInfo.log”日志写入到Hive表中,无需执行创建存储Metrics信息的数据库、表和插入数据操作。

查看Metrics表数据的用户需要具备该表的查询权限(授予用户权限时,仅授予该表查询权限即可,以防止误删Metrics表数据)。

约束与限制

本章节仅适用于MRS 3.6.0-LTS及之后版本。

操作步骤

  1. 登录FusionInsight Manager系统。

    详细操作请参考访问集群Manager

  2. 选择“集群 > 服务 > Spark > 配置 > 全部配置”。
  3. 在全部配置界面右上角的搜索框中搜索“spark.sql.query.metrics.archive.enable”,并修改该参数值为“true”,开启将SQL Metrics信息存储到Hive表功能。
  4. (可选)在搜索框中搜索“metrics”,根据实际需求配置表1中相关的Metrics日志存储参数。

    表1 Metrics日志存储参数

    参数

    参数描述

    取值示例

    spark.sql.query.metrics.archive.interval

    Metrics日志归档的间隔时间,单位为小时,取值范围为1~24。

    1

  5. 单击“保存”,在弹出窗口单击“确定”保存配置。
  6. 单击“实例”,勾选所有JobHistory实例,选择“更多 > 重启实例”,输入当前用户密码并单击“确定”重启JobHistory实例。
  7. 默认普通用户(不包含supergroup组的用户)没有权限查看“mrs_system_sql_metrics”表,需参考Hive用户权限管理添加Hive的Ranger访问权限策略(Hive已启用Ranger鉴权)章节为对应用户仅授权于该表的查询权限。
  8. Metrics日志归档后,可以在Hive客户端使用Hive SQL查询分析“mrs_system_sql_metrics”表的数据。

    1. 登录客户端节点,进入客户端安装目录:
      cd 客户端安装目录
    2. 配置环境变量:
      source bigdata_env
    3. 执行安全认证(集群未启用Kerberos认证(普通模式)请跳过该操作):
      kinit 业务用户名
    4. 进入beeline:
      beeline
    5. 查询分析“mrs_system_sql_metrics”表的数据:
      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所示。

表2 Metrics表字段信息

字段名称

字段类型

字段描述

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;

相关文档