问题描述

  1. HiveServer2告警,Audit Pipeline Test 不良

image.png

  1. Navigator Audit Server会报

    1. java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9F\x8D\x8E',...' for column 'OPERATION_TEXT' at row 1

    image.png

  2. 而且HiveServer2的audit审计日志并不会自动删除,达到了3000多个,默认情况只会保留10个

image.png

问题分析

  1. 出现Incorrect string value一般是字符集的问题,需要将mysql库表字段以及服务的字符集修改为utf8mb4以支持4个字节的特殊字符,但是线上环境的数据库有hive元数据,所以并不能重启MySQL,只能将有问题的日志删除

  2. HiveServer2的audit审计日志不会自动删除的原因是因为hive audit目录下有个hiveserver2_hiveexechookcontext_audit_wal这个文件,该文件主要作用是记录audit文件刷到哪里了,如果一条审计日志有问题,就会一直尝试,所以就会导致审计日志不会删除

问题解决

  1. 字符集问题解决 ```shell

    查看字段字符集

    SELECT table_schema, table_name, character_set_name FROM information_schema.columns WHERE table_schema = “database_name” AND table_name = “table_name” AND column_name = “column_name”;

修改表字符集

ALTER TABLE HIVE_AUDIT_EVENTS_2021_05_06 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改库字符集

ALTER DATABASE database_name CHARACTER SET utf8mb4;

修改服务字符集

vi /etc/my.cnf 在[client]下添加 default-character-set=utf8mb4

在[mysqld]下添加 character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect=’SET NAMES utf8mb4’

在[mysql]下添 default-character-set = utf8mb4 重启MySQL服务


2. HiveServer2的audit审计日志不会自动删除问题解决
```shell
# 1. 查看卡在哪个审计日志文件了
cat /hiveserver2_hiveexechookcontext_audit_wal
104899148,hive-HIVESERVER2-4269805443436d277597b28f3575dece-HiveExecHookContext-1619397536270

# 2. mv显示的文件
mv hive-HIVESERVER2-4269805443436d277597b28f3575dece-HiveExecHookContext-1619397536270 hive-HIVESERVER2-4269805443436d277597b28f3575dece-HiveExecHookContext-1619397536270.bak

# 3. 重启cloudera agent 
service cloudera-scm-agent restart

# 如果第一步显示的文件不存在,那么mv hiveserver2_hiveexechookcontext_audit_wal 并重启agent 让agent重新生成hiveserver2_hiveexechookcontext_audit_wal