文章插图
一、背景大数据元数据服务Hive Metastore Service(以下简称HMS),存储着数据仓库中所依赖的所有元数据并提供相应的查询服务,使得计算引擎(Hive、Spark、Presto)能在海量数据中准确访问到需要访问的具体数据,其在离线数仓的稳定构建上扮演着举足轻重的角色 。vivo离线数仓的Hadoop集群基于CDH 5.14.4版本构建,HMS的版本选择跟随CDH大版本 , 当前使用版本为1.1.0-cdh5.14.4 。
vivo在HMS底层存储架构未升级前使用的是MySQL存储引擎,但随着vivo业务发展,数据爆炸式增长,存储的元数据也相应的增长到亿级别(PARTITION_PARAMS:8.1亿、
PARTITION_KEY_VALS:3.5亿、PARTITIONS:1.4亿),在如此大量的数据基数下,我们团队经常面临机器资源的性能瓶颈 , 往往用户多并发的去查询某些大分区表(50w+分区),机器资源的使用率就会被打满,从而导致元数据查询超时,严重时甚至整个HMS集群不可用,此时恢复手段只能暂时停服所有HMS节点 , 直到MySQL机器负载降下来后在逐步恢复服务 。为此,针对当前MySQL方案存在的严重性能瓶颈,HMS急需一套完善的横向扩展方案来解决当前燃眉之急 。
二、横向扩展技术方案选型为解决HMS的性能问题,我们团队对HMS横向扩展方案做了大量的调研工作,总体下来业内在HMS的横向扩展思路上主要分为对MySQL进行拆库扩展或用高性能的分布式引擎替代MySQL 。在第一种思路上做的比较成熟的方案有Hotels.com公司开源的Waggle Dance,实现了一个跨集群的Hive Metastore代理网关,他允许用户同时访问多个集群的数据 , 这些集群可以部署在不同的平台上,特别是云平台 。第二种思路当前主流的做法是用分布式存储引擎TiDB替换传统的MySQL引擎,在Hive社区中有不少公司对hive 2.x接入TiDB做了大量的测试并应用到生产中(详情点击) 。
2.1 Waggle DanceWaggle-dance向用户提供统一的入口 , 将来自Metastore客户端的请求路由到底层对应的Metastore服务,同时向用户隐藏了底层的Metastore分布,从而在逻辑层面整合了多个Metastore的Hive库表信息 。Waggle-dance实现了Metastore的Thrift API,客户端无需改动 , 对用户来说 , Waggle-dance就是一个Metastore 。其整体架构如下:
文章插图
从Waggle-dance的架构中最突出的特性是其采用了多个不同的MySQL实例分担了原单MySQL实例的压力,除此之外其还有如下优势:
- 用户侧可以沿用Metastore客户端的用法,配置多台Waggle-dance的连接,在当前Waggle-dance连接服务不可用的时候切换到其他的Waggle-dance服务上 。
- Waggle-dance只需几秒即可启动 , 加上其无状态服务的特性,使得Waggle-dance具备高效的动态伸缩性,可以在业务高峰期快速上线新的服务节点分散压力,在低峰期下线部分服务节点释放资源 。
- Waggle-dance作为一个网关服务,除了路由功能外,还支持后续的定制化开发和差异化部署 , 平台可根据需要添加诸如鉴权、防火墙过滤等功能 。
文章插图
由于TiDB本身具有水平扩展能力,扩展后能均分查询压力,该特性就是我们解决HMS查询性能瓶颈的大杀器 。除此外该架构还有如下优势:
- 用户无需任何改动;HMS侧面没有任何改动 , 只是其依赖的底层存储发生变化 。
- 不破坏数据的完整性,无需将数据拆分多个实例来分担压力,对HMS来说其就是一个完整、独立的数据库 。
推荐阅读
- 用了这么多年的泛型,你对它到底有多了解?
- 深入了解:MySQL与Oracle的差异及各自优势
- 任正非和孟晚舟多次提的「算力」 到底是个啥?
- 生理期到底能不能练瑜伽?怎么练?
- 豆浆到底对身体有哪些影响?
- 大年初一到初七的风俗有哪些 大年初一到初七的风俗
- 她被琼瑶“下套”欺骗,为拍戏故意堕胎,如今58岁她得到了什么
- 初一到十五吃什么 初一到十五吃什么有讲究吗
- 投屏怎么投到电视上电视怎么设置 投屏怎么投到电视上
- 多多果园加速药水找不到了 多多果园加速药水在哪里