问题描述
- HiveServer2告警,Audit Pipeline Test 不良
Navigator Audit Server会报
java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9F\x8D\x8E',...' for column 'OPERATION_TEXT' at row 1
而且HiveServer2的audit审计日志并不会自动删除,达到了3000多个,默认情况只会保留10个
问题分析
出现Incorrect string value一般是字符集的问题,需要将mysql库表字段以及服务的字符集修改为utf8mb4以支持4个字节的特殊字符,但是线上环境的数据库有hive元数据,所以并不能重启MySQL,只能将有问题的日志删除
HiveServer2的audit审计日志不会自动删除的原因是因为hive audit目录下有个hiveserver2_hiveexechookcontext_audit_wal这个文件,该文件主要作用是记录audit文件刷到哪里了,如果一条审计日志有问题,就会一直尝试,所以就会导致审计日志不会删除
问题解决
- 字符集问题解决
```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