58同城 HBase 平台建设实践

作者:张祥,58同城HBase平台负责人

一.HBase平台建设

1.简介

58大数据平台定位于服务数据开发分析人员,提高数据开发分析效率,提供便捷的开发分析流程,有效支持数据仓库及数据应用建设 。其通用的基础能力包含数据存储、实时计算、数据查询分析等,是基于大家熟悉的Hadoop/HBase/Spark/Flink及相关OLAP等为主的大数据组件而建设的大数据基础能力平台。

58HBase平台是在58数据平台之上,致力于为集团提供稳定、高效、安全的海量数据 存储、分析一站式服务。目前我们服务的业务比如58主站的帖子,用户画像、搜索推荐等业务场景,基本覆盖集团全部的业务场景,总体的规模14,000+张数据表,260个节点,800,000+QPS,3PB数据量。

2.HBase平台之数据接入-SCF网关

SCF是我们公司内部的微服务框架。我们通过使用这统一的服务为使用方提供HBase数据表的读写,而不是让用户直接拿着Zookeeper连接串直接操作HBase,这样做的好处是让我们的平台内聚和服务化,和最重要的对核心HBase集群的保护,补足HBase针对限流场景的不足,以及我们可以依托这一层的设计,能做到对异常流量调用的熔断,我们可以清晰的做到流量监控,也可以依托云设施的部署便利性,能做到比较不错的隔离、扩容,另外在这一层方便管理对Zookeeper集群的流量压力,而且还可以做跨集群数据高可用。当然它也会带来不足,我认为首要的不足就是我们提供接口的灵活性不足,不能覆盖全部的场景,比如有使用Filter这种协处理器的场景。

3.HBase平台之数据接入-通用导入导出

我们针对需要使用全量数据的业务场景,我们提供基于Snapshot的数据导出服务,和 通用格式的Bulkload的服务,在便于支持业务使用的同时,还有效降低HBase集群压力,同时使用方开发成本降低,并且有这样的服务接口能增强平台内聚的同时还方便与其他平台打通。

4.HBase平台之Phoenix

Phoenix本身是一个开源成熟的SQL on HBase的解决方案,可以使用标准的JDBC API替代HBase 原生的Client API创建表,以及读写HBase数据。它有好多优秀的特性,支持二级索引;支持并行执行操作;计算移动到数据端;计算优化(谓词下推、semi-join)。

需要注意的地方:索引数量和形式这一方面需要去做好控制和管理,尤其需要注意全局构建索引的问题。

5.HBase平台之Kylin

我们这边离线的OLAP平台主要是基于Kylin实现,Kylin是一个开源、分布式的分析型数据仓库,提供Hadoop/Spark之上的SQL查询接口及多维分析OLAP能力可以支持超大规模数据,其插拔式的存储方式也支持HBase存储引擎。它优秀的特性比如亚秒级的查询响应,支持SQL,能够很好的支持和满足大部分的业务分析需求。到目前我们平台目前日常活跃构建的Cube大约450个,集群有20个节点,每天的数据输入量,大约在1.5T,平均的构建时间在30分钟。

在多租户的打通方面,默认的Kylin只能使用默认的用户去使用存储及计算资源,在支持多业务场景下,它就不能有效的资源隔离和成本核算,我们使用Hadoop UGI + Hadoop Proxy实现Kylin在58的多租户打通。

  • 1.5版本的Kylin建设中做的优化工作,比如维度字典上传优化,HBase分区数据量预估优化;全局字典换进换出优化等。

  • 2.6版本的Kylin建设中做的优化工作,动态用户加载 (KYLIN-4241); 为了便于灰度和测试,可选择任务构建节点(KYLIN-4249),为了便于集群优雅的扩容,我们也开发了节点服务发现 (KYLIN-4256),增加HTTP监控指标接口(KYLIN-4294)等。

6.HBase平台之时序数据库

OpenTSDB是一个底层基于HBase的可伸缩、开源时序数据库,支持高达每秒百万级的写入能力,就是基于这种数据库我们为58大数据平台超过4000个的节点提供监控数据存储、查询服务,单表每天的监控数据量超过2亿。此外OpenTSDB还为58智能安全监控平台提供数据存储服务,当然还为一部分的独立业务,我们提供了独立的基于云的时序数据库集群。

二.HBase集群迁移实践及性能优化

1.项目背景

2019年公司滨海机房机位接近耗尽,无论是在线业务,还是数据离线业务,新的资源需求均满足面临极大压力。短时间内,在线业务跨机房架构改造,迁移等相关工作较多,风险大。基于大数据资源需求占比较大,业务场景相对可控,决定对TEG大数据集群进行整体迁移至新机房,满足未来需求,同时腾挪机位给在线业务,满足一定时间在线资源需求。另外针对当前大数据集群存在的多种痛点问题进行优化,解决相关问题。伴随着平台整体迁移的计划,HBase平台的一个集群需要参与到此次的迁移项目中,由原滨海机房迁移至武清机房。此次迁移的HBase集群概况是regionserver * 74 + hmaster * 2, 数据表 * 96, region数 * 15000

2.迁移方案

在迁移方案的制定中,我们将存储的数据表根据读写规律划分了非活跃数据和活跃数据。非活跃数据主要的特性有 无读写或者存在较大的时间窗口无读写请求,但是数据需要保留。活跃数据的主要特征是存在读写请求并且可能存在多样的数据写入方式,比如实时写入和离线Bulkload同时存在。

  • 非活跃数据的迁移方案

非活跃数据的迁移方案相对比较简单,直接进行原表复制,然后在新集群导入恢复即可, 常用工具dictCp & bulkload。

  • 活跃数据的迁移方案

活跃数据的迁移相对有些复杂,总体来说我们推荐双写方案:

  • 第一阶段:历史数据迁移,采用clone-snapshot + major-compaction + distcp + bulkload的方式。

使用Dictcp进行数据迁移能够控制资源(任务数、带宽)占用,并且Bulkload历史数据时可以针对特定的表特征,比如分区平均大小、分区平均请求负载等,进行分区调整,避免分区数据量或者负载过大或者过小的问题。缺点:克隆快照生成历史数据会对原集群会造成数据猛增,但是由于我们此集群基于的HDFS容量比较大,可以适当予以低级考虑。

  • 第二阶段:数据双写 + 追加在迁移时间窗口内的原集群增量数据。

至于第二阶段的数据迁移,我们准备了两种方案。

  • 集群双写

数据双写的解决,鉴于我们在HBase平台层面建设了一层请求网关,接入此网关的数据表的实时写入,我们实现了基于注册中心的灵活多集群串行写入的特性。没有接入此网关的数据表的实时写入,我们都在推动其的使用接入。至于离线Bulkload的写入,可以采取双集群并行导入的方案。增量数据的追加可以使用CopyTable等工具实现特定时间段的数据拷贝。

双写方案的优点是:能够让使用方知晓其数据分布或者变化的发生;在实施双写、数据一致性验证、读切换等流程中比较自然。

  • 通过HBase的Replication特性

针对实时写入的增量数据,HBase提供了基于WAL的Replication这个特性,能够实现跨机房异步数据迁移,如果需要同步离线Bulkload的数据,也可以通过Bulkload HFile Replication这个特性实现,在Apache HBase 1.3.0版本中已经添加了此功能,如果版本低于此可以通过移植此补丁去添加这项特性。

此方案的优点:这项功能主要对于数据备份、容灾,数据分为线上或者线下分析等。但是也存在相对的不足,比如:会造成越忙的节点越忙,异常不易排查等,并且对集群迁移来讲,上次读写都需要显示切换,使用Replication特性价值不是很高。附: Bulkload HFile Replication(https://issues.apache.org/jira/browse/HBASE-13153)

于是最终确定的首选方案是集群双写,下图是整体的流程图:

3.迁移过程

  • 业务梳理

    • 我们先根据平台统计数据将表划分。

    • 联系对应负责人,与其明确读写规律,以免误迁、误停、遗漏使用方等问题。由于此集群属于历史集群,当时建设时管理尚不完善,需要额外根据ip、部门负责人、MR/Spark/Spark Streaming等任务线索排查其使用方。

  • 确定迁移使用方案

    • 针对单一数据表,多方沟通,确定迁移方案、迁移时间、校对方案、校对时间、使用方双写窗口时间、业务使用切换时间。

4.数据准确性校对

针对迁移后的表数据,我们进行了抽样校对与全表校对的两种方式。抽样校对的方案是基于原数据表每个分区的startkey、endkey为抽样基准,自定义抽样行数进行校对。全表校对,针对表数据量不是很大,但是对一致性要求比较高的使用方,特定时间范围内进行全表比对。

5.业务使用方迁移

由于我们在集群迁移中使用的是双写方案,所以使用方切换使用集群相对更好控制与业务使用更透明。对于已接入HBase网关服务进行读取的业务,我们可根据注册中心进行一键切换。对于Bulkload双写的任务,停掉之前向原集群导入的任务即可。

6.集群性能优化

  • 架构修改

措施:隔离出独立的后端hdfs系统服务。

要点:减少其后端DN节点由于其他任务或者服务的资源抢占,降低业务高峰期的抖动与延迟。

  • 资源硬件升级

措施:磁盘升级,SATA=>SSD(Hadoop2.6.0以后支持异构存储,如果成本有限,可以考虑仅支持一个WAL目录的SSD);网卡升级,KM=>10KM。

要点:提高IO能力,抬高系统瓶颈。

  • 进程参数修改

措施:减少HFile数量同时增加Compaction对应资源数避免堆积;增加工作线程数;调整GC方式。

要点:减少HBase遍历文件数;提高工作线程数,用以增加吞吐;调整GC方式,优化大内存GC回收带来的毛刺。

  • 内部机制改进/升级

措施:Bucket Cache提高读性能;MSLAB提高写性能;Hedged Read降低读毛刺。

备注:HDFS-11303(Hadoop<=2.9.0);短路读对于数据本地性比较好的集群提效较好;读写分离避免读写资源的抢占与饥饿。

要点:优化读写路径增加对缓存的使用和内存的管理;并发读降低HDFS毛刺以及坏节点带来的抖动;读写资源的隔离易于合理的资源分配。

  • Rowkey优化

要点:避免热点,避免倾斜。

  • 优化结果

RegionServer级质量优化对比图

读性能对比图

写性能对比图

三.典型案例分享

1.58同城主站帖子的全量数据实时存储

2.58金融基于Bitmap与HBase协处理器的大数据营销案例

猜你喜欢

1、如果你也想做实时数仓…

2、菜鸟实时数仓技术架构演进

3、不懂Redis Cluster原理,我被同事diss了!

4、Apache Kafka 不需要管理员:删除 Apache ZooKeeper 的依赖

过往记忆大数据微信群,请添加微信:fangzhen0219,备注【进群】

版权声明 楚狂人Windows驱动编程基础教程 本书是免费电子书。作者保留一切权利。但在保证本书完整性(包括版权声明、前言、正文内容、后记、以及作者的信息),并不增删、改变其中任何文字内容的前提下,欢迎任何读者以任何形式(包括各种格式的文档)复制和转载本书。同时不限制利用此书赢利的行为(如收费注册下载,或者出售光盘或打印版本)。不满足此前提的任何转载、复制、赢利行为则是侵犯版权的行为。 发现本书的错漏之处,请联系作者。请不要修改本文中任何内容,不经过作者的同意发布修改后的版本。 前言 本书非常适合熟悉Windows应用编程的读者转向驱动开发。所有的内容都从最基础的编程方法入手。介绍相关的内核API,然后举出示范的例子。这本书只有不到70页,是一本非常精简的小册子。所以它并不直接指导读者开发某种特定类型的驱动程序。而是起到一个入门指导的作用。 即使都是使用C/C++语言的代码,在不同的应用环境中,常常看起来还是大相径庭。比如用TurboC++编写的DOS程序代码和用VC++编写的MFC应用程序的代码,看起来就几乎不像是同一种语言。这是由于它们所依赖的开发包不相同的缘故。 在任何情况下都以写出避免依赖的代码为最佳。这样可以避免重复劳动。但是我们在学习一种开发包的使用时,必须习惯这个环境的编码方式,以便获得充分利用这个开发包的能力。 本书的代码几乎都依赖于WDK(Windows Driver Kit)。但是不限WDK的版本。WDK还在不断的升级中。这个开发包是由微软公司免费提供的。读者可以在微软的网站上下载。 当然读者必须把WDK安装的计算机上并配置好开发环境。具体的安装和配置方法本书没有提供。因为网上已经有非常多的中文文档介绍它们。 读完这本书之后,读者一定可以更轻松的阅读其他专门的驱动程序开发的文档和相关书籍。而不至于看到大量无法理解的代码而中途放弃。如果有任何关于本书的内容的问题,读者可以随时发邮件到mfc_tan_wen@163.com或者walled_river@hotmail.com。能够回答的问题我一般都会答复。 写本书的时候,我和wowocock合作的一本名为《天书夜读》(在网上有一个大约20%内容的缩减电子版本)正在电子工业出版社编辑。预计还有不到一个月左右就会出版。这也是我自己所见的唯一一本中文原创的从汇编和反汇编角度来学习Windows内核编程和信息安全软件开发的书。希望读者多多支持。有想购买的读者请发邮件给我。我会在本书出版的第一时间,回复邮件告知购买的方法。 此外我正在写另一本关于Windows安全软件的驱动编程的书。但是题目还没有拟好。实际上,读者现在见到的免费版本的《Windows驱动编程基础教程》是从这本书的第一部分中节选出来的。这本书篇幅比较大,大约有600-800页。主要内容如下: 第一章驱动编程基础 第二章磁盘设备驱动 第三章磁盘还原与加密 第四章传统文件系统过滤 第五章小端口文件系统过滤 第六章文件系统保护与加密 第七章协议网络驱动 第八章物理网络驱动 第九章网络防火墙与安全连接 第十章打印机驱动与虚拟打印 第十一章视频驱动与过滤 附录A WDK的安装与驱动开发的环境配置 附录B 用WinDbg调试Windows驱动程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值