GBase 8a MPP(下文简称8a集群)加载日志自动汇总功能用于将一次加载的错误数据日志与溯源信息日志汇总至加载发起节点,并提供相应的查询,检索日志的功能。本文简单介绍加载日志自动汇总功能的设置与使用方法。
注:本功能依赖 GNS 功能,请确保 _gbase_gns_share_connection
参数为1。
日志文件汇总功能开关
- 变量名:
gbase_loader_logs_collect
- 有效值:0,关闭;1,开启(默认值)
通过该变量控制集群加载日志汇总功能的开启与关闭,该变量支持 set 方式修改与配置文件方式修改。
对于集群加载,如果 gbase_loader_logs_collect = 1
,错误数据与溯源信息汇总到加载发起节点,并存储到 gbase_loader_logs_dir
指定目录,否则不进行错误数据与溯源信息日志的汇总。
日志文件汇总路径设置
- 变量名:
gbase_loader_logs_dir
- 有效值:本地路径;FTP/SFTP 路径
通过该变量指定日志文件汇总路径,默认汇总至加载发起节点的 gcluster 日志目录($GCLUSTER_HOME/log/gcluster
)下的 loader_logs 目录,并在该路径下建一个以本次 TASK_ID 命名的子目录,将汇总日志存放在该目录中。加载完成时,在该子目录下创建一个以 TASK_ID_loader_result.log
命名的日志,并将本次加载的结果信息写入该日志文件。该变量支持 set 方式修改和配置文件方式修改。
gbase_loader_logs_dir 变量设置示例
gbase> set global gbase_loader_logs_dir='/tmp/gbase_logs/';
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
gbase> show variables like '%loader_logs%';
+---------------------------+------------------+
| Variable_name | Value |
+---------------------------+------------------+
| gbase_loader_logs_collect | ON |
| gbase_loader_logs_dir | /tmp/gbase_logs/ |
+---------------------------+------------------+
2 rows in set (Elapsed: 00:00:00.00)
加载日志汇总目录内容示例
[gbase@bogon gbase_logs]$ ls -l
total 0
drwx------ 2 gbase gbase 144 Sep 28 11:00 2946
[gbase@bogon gbase_logs]$ ls -l 2946
total 37256
-rw------- 1 gbase gbase 217 Sep 28 11:00 2946_loader_result.log
-rw------- 1 gbase gbase 24196143 Sep 28 11:00 2946_test_t_n1_10.1.1.1_20210928110013.err
-rw------- 1 gbase gbase 13946370 Sep 28 11:00 2946_test_t_n1_10.1.1.1_20210928110013.trc
日志文件说明
1. loader_result.log
-
加载完成时,8a集群将加载结果信息写入加载结果日志文件中。加载结果列信息包括以下内容:
字段 含义 TASK_ID 加载ID DB_NAME 加载数据库名 TB_NAME 加载表名 USER 当前加载用户名 ACCESS_IP 加载发起点IP HOST_IP 客户端IP START_TIME 加载开始时间 END_TIME 加载结束时间 ELAPSED_TIME 加载耗时 TOTAL_SIZE 加载文件总大小 AVERAGE_SPEED 加载平均速度 LOADED_RECORDS 加载数据条数 SKIPPED_RECORDS 加载数据跳过条数 IGNORED_FILES 加载跳过的文件数 RESULT 加载结果 SQL_CMD 加载SQL MESSAGE 错误信息 -
文件内容如下所示:
2946|test|t|gbase|10.1.1.1|10.1.1.1|2021-09-28 11:00:00|2021-09-28 11:00:02|2|24196143|12098071|0|150000|0|SUCCESS|load data infile '/tmp/load_data.txt' into table t|
1) 加载结果信息存储以 ‘|’ 为列分隔符,以 ‘\n’ 为行分隔符的普通文本文件
2) SQL_CMD 和 MESSAGE 中的包含 ‘\n’ 的情况,日志文件中以空格代替
2. *.err 错误数据
- 该日志中存储无法加载的错误数据。
3. *.trc 溯源信息
-
该日志中存储错误数据的偏移量和错误原因
-
文件中内容如下:
file_name |file_offset|record_len|column|reason /tmp/load.txt|2 |2 |1 |Validate error
-
字段说明:
字段名称 含义说明 file_name 加载文件名 file_offset 错误数据偏移量 record_len 错误数据行长 column 错误数据列号 reason 错误数据具体原因
加载错误数据与溯源信息检索
- 该功能用于错误数据与溯源信息的检索。
- 语法格式:
SHOW [GCLUSTER] LOAD LOGS <task_id> LIMIT {[<offset>,] <row_count>};
-
参数说明:
字段名称 含义说明 GCLUSTER 可选参数,增加这个参数显示全部coordinator节点的信息 task_id 要追溯的加载任务的进程ID offset 信息起始 row_count 记录条数 -
查询结果信息表定义:
字段名称 含义说明 TASK_ID 加载ID DB_NAME 加载库名 TB_NAME 加载表名 ERR_DATA_IP 产生错误数据的节点IP FILE_NAME 加载文件名 FILE_OFFSET 错误数据偏移量 RECORD_LEN 错误数据行长 ERR_COLUMN 错误数据行号 ERR_REASON 错误数据具体原因 ERR_DATA 错误数据
示例
-
加载数据:
[gbase@bogon tmp]$ cat load.txt 1 a 2 b c,d
-
表结构:
gbase> desc t; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (Elapsed: 00:00:00.00)
-
执行加载:
gbase> LOAD DATA INFILE 'file:///tmp/load.txt' INTO TABLE t SKIP_BAD_FILE 1; Query OK, 2 row affected (Elapsed: 00:00:00.13) Task 2948 finished, Loaded 2 records, Skipped 3 records, Ignored 1 files
-
查询错误信息及溯源记录
--- 显示Task 2948任务的错误数据信息 gbase> SHOW LOAD LOGS 2948; +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ | task_id | db_name | tb_name | err_data_ip | file_name | file_offset | record_len | err_column | err_reason | err_data | +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ | 2948 | test | t | 10.1.1.1 | /tmp/load.txt | 2 | 2 | 1 | Validate error | a | +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ | 2948 | test | t | 10.1.1.1 | /tmp/load.txt | 6 | 2 | 1 | Validate error | b | +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ | 2948 | test | t | 10.1.1.1 | /tmp/load.txt | 8 | 4 | 2 | text parser error | c,d | +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ 3 rows in set (Elapsed: 00:00:00.00) --- 显示Task 2948任务的前 2 条错误数据信息 gbase> SHOW LOAD LOGS 2948 LIMIT 2; +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ | task_id | db_name | tb_name | err_data_ip | file_name | file_offset | record_len | err_column | err_reason | err_data | +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ | 2948 | test | t | 10.1.1.1 | /tmp/load.txt | 2 | 2 | 1 | Validate error | a | +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ | 2948 | test | t | 10.1.1.1 | /tmp/load.txt | 6 | 2 | 1 | Validate error | b | +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ 2 rows in set (Elapsed: 00:00:00.00) --- 显示Task 2948任务的从第 1 条开始的后面 2 条错误数据信息 gbase> SHOW LOAD LOGS 2948 LIMIT 1,2; +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ | task_id | db_name | tb_name | err_data_ip | file_name | file_offset | record_len | err_column | err_reason | err_data | +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ | 2948 | test | t | 10.1.1.1 | /tmp/load.txt | 6 | 2 | 1 | Validate error | b | +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ | 2948 | test | t | 10.1.1.1 | /tmp/load.txt | 8 | 4 | 2 | text parser error | c,d | +---------+---------+---------+-------------+---------------+-------------+------------+------------+-------------------+----------+ 2 rows in set (Elapsed: 00:00:00.00)
-
加载日志汇总目录中的文件内容:
[gbase@bogon gbase_logs]$ ls -l 2948 total 12 -rw------- 1 gbase gbase 173 Sep 28 16:43 2948_loader_result.log -rw------- 1 gbase gbase 8 Sep 28 16:43 2948_test_t_n1_10.1.1.1_20210928164327.err -rw------- 1 gbase gbase 183 Sep 28 16:43 2948_test_t_n1_10.1.1.1_20210928164327.trc [gbase@bogon gbase_logs]$ cat 2948/2948_loader_result.log 2948|test|t|gbase|10.1.1.1|10.1.1.1|2021-09-28 16:43:27|2021-09-28 16:43:28|1|0|0|2|3|1|SUCCESS|load data infile 'file:///tmp/load.txt' into table t skip_bad_file 1| [gbase@bogon gbase_logs]$ cat 2948/2948_test_t_n1_10.1.1.1_20210928164327.err a b c,d [gbase@bogon gbase_logs]$ cat 2948/2948_test_t_n1_10.1.1.1_20210928164327.trc file_name | file_offset | record_len | column | reason /tmp/load.txt | 2 | 2 | 1 | Validate error /tmp/load.txt | 6 | 2 | 1 | Validate error /tmp/load.txt | 8 | 4 | 2 | text parser error