
# 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](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2124.html)。
   
   
2. 选择"集群 \> 服务 \> Spark \> 配置 \> 全部配置"。
3. 在全部配置界面右上角的搜索框中搜索"spark.sql.query.metrics.archive.enable"，并修改该参数值为"true"，开启将SQL Metrics信息存储到Hive表功能。
4. （可选）在搜索框中搜索"metrics"，根据实际需求配置[表1]中相关的Metrics日志存储参数。
   
    表1Metrics日志存储参数 
   | 参数                                       | 参数描述                               | 取值示例 |
   |:---|:---|:---|
   | spark.sql.query.metrics.archive.interval | Metrics日志归档的间隔时间，单位为小时，取值范围为1\~24。 | 1    |
      
   
   
5. 单击"保存"，在弹出窗口单击"确定"保存配置。
6. 单击"实例"，勾选所有JobHistory实例，选择"更多 \> 重启实例"，输入当前用户密码并单击"确定"重启JobHistory实例。
7. 默认普通用户（不包含**supergroup** 组的用户）没有权限查看"mrs_system_sql_metrics"表，需参考[Hive用户权限管理](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0947.html)或[添加Hive的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1858.html)（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]所示。
 表2Metrics表字段信息 
| 字段名称            | 字段类型   | 字段描述                                                                                                                                                               |
|:---|:---|:---|
| 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;** |
   
