我们有个系统设计的时候针对Hive创建表、删除表, 需要更新ES中的一个状态,标记是否删除,在几乎同时执行两条下面的语句的时候,发现在ES 中出现表即使被创建了还是无法被查询到的情况,针对该问题记录下排查分析过程.
drop table if exists tmp.test_create_table;
create table if not exists tmp.test_create_table(
id int,
name string
) stored as parquet;
问题排查
查看ES数据
发现ES创建表的状态没有正常更新 yn 还是0
查看日志
查看日志, 截取部分关键信息:
ReceiverController] [4eb1c8fd7b6987ae] - 接收的hive元数据为:{“data”: …
“eventType”:“DROP_TABLE” …
ReceiverController] [d1aa226b8739d352] - 接收的hive元数据为:{“data”: …
“eventType”:“CREATE_TABLE” …
[Kafka-Consume-Thread-bigdata_aa-0] [ec812addb0bf424d] - update table data to es: … “yn”:0}
[Kafka-Consume-Thread-bigdata_aa-0] [3085b7329053aaac] - update table data to es: … “yn”:1}
日志里有几个关键线索:
-
建表与删除表的Hive元数据信息正常上报上来了
-
建表删表事件都执行了更新数据到ES的操作, [Kafka-Consume-Thread-bigdata_aa-0] 可以看出是