AutoRefreshImpala
自动刷新Impala元数据。给Impala3.2以下没有自动刷新元数据功能的孩子们使用
Install / Use
/learn @Observe-secretly/AutoRefreshImpalaREADME
背景
使用过低版本(3.2及以下)Impala的朋友都知道,每当更新Hive数据后,需要运行invalidate metadata 或者 invalidate metadata [table]在Impala中更新元数据才能正常查询这张表。它通常会被写在ETL脚本的最后。在HIVE跑一些临时任务的时候,也需要单独登录Impala-shell打开命令行执行更新操作。
脚本功能
实时更新Impala元数据
技术原理
研究了一番新版本的Impala,新版本的Impala是使用Hive Hook机制实现的元数据刷新。Hive Hook允许用户自己监听Hive表的变动,然后扩展实现一些非标功能。比如Apache Atlas使用Hive Hook实现了血缘图。恰巧笔者使用的Ambari集群就有集成Atlas(开心的一批,不用自己写Hive Hook的扩展了。想看看通过Hook如何做的同学请点击传送门)。那我们直接使用Atlas的Hive Hook扩展抓出来的数据,就能完成数据表更新的监听操作。然后更新Impala的某个表元数据。
Atlas Hive Hook的工作方式和流程
Hive --> Atlas Hive Hook --> Kafka --> Atlas
Atlas Hive Hook会把数据写入到Kafka中。Topic名字叫ATLAS_HOOK。在抓到的json报文中你可以从message.type中获取操作类型。如:删除表、创建表、更新表等操作。从message.entities中获取本次操作的Hive表名称叫什么。到此脚本的实现原理已经全部介绍完毕
如何使用
环境要求
Python:2.7 </br> Impala客户端:impyla( 安装命令:pip install six bit_array pure_sasl impyla==0.10.0)
如何配置
#!/usr/bin/python
# coding=utf8
import json
import requests
from impala.dbapi import connect
from pykafka import KafkaClient
import sys
reload(sys)
sys.setdefaultencoding('utf8')
is_debug = False
#env
env = '{env}'
#kafka config
host = '{kafkaHost}'
client = KafkaClient(hosts="%s:{kafkaPort}" % host)
topicName = 'ATLAS_HOOK'
#impala config
impalaHost = '{impalaHost}'
impalaPort = {impalaPort}
#dindin config
dindinMachine='https://oapi.dingtalk.com/robot/send?access_token={access_token}'
......
请把脚本中出现如下字符的地方替换成正确的配置:
{env} : 环境信息。用于通知使用
{kafkaHost}:Kafka Broker地址
{kafkaPort}:Kafka Broker端口(Ambari集群:默认6667)
{impalaHost}:Impala DAEMONS地址
{impalaPort}:Impala DAEMONS端口(默认21050)
{access_token}:钉钉机器人的access_token。若不用可以把通知相关方法注释掉
如何运行
请执行命令
nohup python -u impalaMetadataAutoRefresh.py > run.log &
问题交流与反馈
QQ:914245697
Related Skills
node-connect
352.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
