知乎 Hive Metastore 实践:从 MySQL 到 TiDB
作者介绍
胡梦宇,知乎数据架构平台开发工程师
背景
数据的增长远比删除的要快,治标不治本;
在删除超大分区表(分区数上百万)的分区时,会对 MySQL 造成一定的压力,只能单线程去做,否则会影响其他正常的 Hive 查询,效率极其低下;
在知乎,元信息删除是伴随数据一起删除的(删除 HDFS 过期数据,节约成本),Hive 的用户可能存在建表不规范的情况,将分区路径挂错,导致误删数据。
技术选型
已有方案
最终方案
其实问题主要在于,当数据量增加时,MySQL 受限于单机性能,很难有较好的表现,而将单台 MySQL 扩展为集群,复杂度将会呈几何倍上升。如果能够找到一款兼容 MySQL 协议的分布式数据库,就能完美解决这个问题。因此,我们选择了TiDB(https://github.com/pingcap/tidb)。
TiDB 是 PingCAP 开源的分布式 NewSQL 数据库,它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议,具有数据强一致的高可用特性,是一个不仅适合 OLTP 场景还适 OLAP 场景的混合数据库。
选用 TiDB 的理由如下:
1. TiDB 完全兼容 MySQL 的协议,经过测试,TiDB 支持 Hive Metastore 对元数据库的所有增删改查操作, 使用起来不存在兼容性相关的问题。因此,除了将 MySQL 的数据原样 dump 到 TiDB,几乎没有其他工作需要做;
2. TiDB 由于其分布式的架构,在大数据集的表现远远优于 MySQL;
3. TiDB 的可扩展性十分优秀,支持水平弹性扩展,不管是选用分库分表还是 Federation,都可能会再次遇到瓶颈,届时需要二次切分和扩容,TiDB 从根本上解决了这个问题;
4. TiDB 在知乎已经得到了十分广泛的应用,相关技术相对来说比较成熟,因此迁移风险可控。
Hive 架构
迁移前

迁移后

迁移流程
运行概况
???ALTER?TABLE?'${table_name}'?DROP?IF?EXISTS?PARTITION(...);
???ALTER?TABLE?'${table_name}'?ADD?IF?NOT?EXISTS?PARTITION(...);
SELECT?`A0`.`PART_NAME`,`A0`.`PART_NAME`?AS?`NUCORDER0`?FROM?`PARTITIONS`?`A0`?LEFT?OUTER?JOIN?`TBLS`?`B0`?ON?`A0`.`TBL_ID`?=?`B0`.`TBL_ID`?LEFT?OUTER?JOIN?`DBS`?`C0`?ON?`B0`.`DB_ID`?=?`C0`.`DB_ID`?WHERE?`C0`.`NAME`?=?'${database_name}'?AND?`B0`.`TBL_NAME`?=?'${table_name}'?ORDER?BY?`NUCORDER0`
展望
完整项目请查看:
https://github.com/pingcap-incubator
PingCAP Incubator 完整文档参考:
https://github.com/pingcap/community/tree/master/incubator


关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 中央经济工作会议在北京举行 7903964
- 2 紧急提醒:请在日中国公民进行登记 7808150
- 3 中央定调明年继续“国补” 7712188
- 4 “九天”无人机成功首飞 7616903
- 5 断崖式降温!今冬最强寒潮来了 7523808
- 6 中央经济工作会议释信号:3件事不做 7427080
- 7 中国“空中航母”首飞成功 7330169
- 8 日本民众东京集会反对日本军事扩张 7237168
- 9 人民空军中日双语发文:大惊小怪 7142068
- 10 寒潮来袭 “速冻”模式如何应对 7040916







PingCAP
