HBase海量数据入仓实战

2023-10-14 22:30

本文主要是介绍HBase海量数据入仓实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、方案背景

现阶段部分业务数据存储在HBase中,这部分数据体量较大,达到数十亿。大数据需要增量同步这部分业务数据到数据仓库中,进行离线分析,目前主要的同步方式是通过HBase的hive映射表来实现的。该种方式具有以下痛点:

  • 需要对HBase表进行全表扫描,对HBase库有一定压力,同步数据同步速度慢。

  • 业务方对HBase表字段变更之后,需要重建hive映射表,给权限维护带来一定的困难。

  • 业务方对HBase表字段的变更无法得到有效监控,无法及时感知字段的新增,对数仓的维护带来一定的困难。

  • 业务方更新数据时未更新时间戳,导致通过时间戳字段增量抽取时数据缺失。

  • 业务方对表字段的更新新增无法及时感知,导致字段不全需要回溯数据。

基于以上背景,对HBase数据增量同步到数仓的场景,给出了通用的解决方案,解决了以上这些痛点。

二、方案简述

2.1 数据入仓构建流程

2.2 HBase数据入仓方案实验对比

分别对以上三种实现方案进行合理性分析。

2.2.1 方案一

使用HBase的hive映射表。此种方案实现方式简单,但是不符合数仓的实现机制,主要原因有:

  • HBase表虽然是Hadoop生态体系的NoSQL数据库,但是其作为业务方的数据库,直接通过hive映射表读取,就类比于直接读取业务方Mysql中的视图,可能会对业务方数据库造成一定压力,甚至会影响业务的正常运行,违反数仓尽可能低的影响业务运行原则。

  • 通过hive映射表的方式,从实现方式上来讲,增加了与业务方的耦合度,违反数仓建设解耦原则。

所以此种方案在此实际应用场景中,是不应该采取的方案。

2.2.2 方案二

根据业务表中的时间戳字段,抓取增量数据。由于HBase是基于rowKey的NoSQL数据库,所以会存在以下几个问题:

  • 需要通过Scan全表,然后根据时间戳(updateTime)过滤出当天的增量,当数据量达到千万甚至亿级时,这种执行效率就很低,运行时长很长。

  • 由于HBase表更新数据时,不像MySQL一样,能自动更新时间戳,会导致业务方没有及时更新时间戳,那么在增量抽取数据的时候,会造成数据缺失的情况。

所以此种方案存在一定的风险。

2.2.3 方案三

根据HBase的timeRange特性(HBase写入数据的时候会记录时间戳,使用的是服务器时间),首先过滤出增量的rowKey,然后根据这些rowKey去HBase查询对应的数据。这种实现方案同时解决了方案一、方案二的问题。同时,能够有效监控业务方对HBase表字段的新增情况,避免业务方未及时通知而导致的数据缺失问题,能够最大限度的减少数据回溯的频率。

综上,采用方案三作为实现HBase海量数据入仓的解决方案。

2.3 方案选择及实现原理

基于HBase数据写入时会更新TimeRange的特性,scan的时候如果指定TimeRange,那么就不需要扫描全表,直接根据TimeRange获取到对应的rowKey,然后再根据rowKey去get出增量信息,能够实现快速高效的获取增量数据。

为什么scan之后还要再去get呢?主要是因为通过timeRanme出来的数据,只包含这个时间范围内更新的列,而无法查询到这个rowkey对应的所有字段。比如一个rowkey有name,age两个字段,在指定时间范围内只更新了age字段,那么在scan的时候,只能查询出age字段,而无法查询出name字段,所以要再get一次。同时,获取增量数据对应的columns,跟hive表的meta数据进行比对,对字段的变更进行及时预警,减少后续因少同步字段内容而导致全量初始化的情况发生。其实现的原理图如下:

三、效果对比

运行时间对比如下(单位:秒):

四、总结与展望

数据仓库的数据来源于各方业务系统,高效准确的将业务系统的数据同步到数仓,是数仓建设的根本。通过该解决方案,主要解决了数据同步过程中的几大痛点问题,能够较好的保证数据入仓的质量问题,为后续的数仓建设打下一个较好的基础。

另外,通过多次实验对比,及对各种方案的可行性分析,将数据同步方案同步给一站式大数据开发平台,推动大数据开发平台支持基于timeRange的增量同步功能,实现此功能的平台化、配置化,解决了HBase海量数据入仓的痛点。

同时,除了以上这几种解决方案之外,还可以尝试结合Phoenix使用二级索引,然后通过查询Phoenix表的方式同步到数仓,这个将在后期进行性能测试。

这篇关于HBase海量数据入仓实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/213576

相关文章

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转