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海量数据高效入仓解决方案相关推荐
- 如何解决HBase海量数据高效入仓的问题?
如何解决HBase海量数据高效入仓的问题?数据仓库的数据来源于各方业务系统,高效准确的将业务系统的数据同步到数仓是数仓建设的根本.部分业务数据存储在HBase中,这部分数据体量较大达到数十亿.大数据需 ...
- 刷脸秒入仓,阿里云云盾实人认证助力心怡科技迎战双11
在物流公司心怡科技下沙菜鸟网络的跨境仓内,每天早晚上下班的高峰期,员工排出长长的队伍进出仓库成为一道特殊的"风景". 据了解,心怡科技在全国拥有88个RDC(区域分拨)中心.仓配网 ...
- Tapdata Connector 实用指南:数据入仓场景之数据实时同步到 BigQuery
[前言]作为中国的 "Fivetran/Airbyte", Tapdata 是一个以低延迟数据移动为核心优势构建的现代数据平台,内置 60+ 数据连接器,拥有稳定的实时采集和传输能 ...
- 当 TiDB 遇上 Flink:TiDB 高效入湖“新玩法” | TiLaker 团队访谈
数据湖是大数据领域近年来非常火热的技术,传统数仓无法实现增量数据的实时更新,也无法支持灵活的元数据格式,数据湖技术便在这一背景下诞生了.数据库的增量变更是数据湖中增量数据的主要来源,但目前 TiDB ...
- flink 开发平台Dinky 构建 Flink CDC 整库入仓入湖
原文:http://www.senlt.cn/article/866753893.html 摘要:本文介绍了如何使用 Dinky 实时计算平台构建 Flink CDC 整库入仓入湖.内容包括: 背景 ...
- 数据同步到数仓解决方案
数据同步到数仓解决方案 一.概述 在数据仓库建模中,未经任何加工处理的原始业务层数据,称之为ODS(Operational Data Store)数据.在互联网企业中,常见的ODS数据有业务日志数据( ...
- 亚马逊云科技Serverless构建的实时数仓解决方案,助力猎豹降低30%成本
也许你也听过这样一句话:"21世纪什么最贵?人才!"当数字经济全面席卷而来,这个问题的答案不可置否地变为了"数据".通过数据分析获取近乎实时的洞察,以驱动业务的 ...
- ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 解决方案
ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 解决方案 参考文章: (1)ERROR:org.ap ...
- 小米air13.3 i7 8550U MX150 指纹版使用电池开机无法正常进入系统解决方案
小米air13.3 i7 8550U MX150 指纹版使用电池开机无法正常进入系统解决方案 前言 我的小米air13.3是18年9月份买的,然后使用了差不多一年的时候,电池就无法充电,必须得插电源使 ...
- DBA高效入职指南学习笔记
(本文为本人自学oracle,读完DBA高效入职指南一书所记录的学习笔记,仅作为自己日后参考查询使用.) ----------------------------------------------- ...
最新文章
- python和linux哪个难学-“慢”下来的 Python 要怎么竞争?
- Windows下Python环境搭建
- Tomcat根目录下work文件夹的作用(转载)
- git pull 部分文件无法获取
- BitMapData知识 转
- JPA#Interfaces总结
- IOUtils pom 依赖
- 华佗穿越来教程序员睡觉
- php cms下载地址,phpcms将下载地址替换为图片显示
- 电商设计的文字的选择与排版
- 如何设置行间距和字间距?
- 学会区分 RNN 的 output 和 state
- AHB和VPB的区别
- wp mysql数据库大小_wordpress数据库容量
- java web 乱码_java web乱码解决方法
- 怎样在win7电脑桌面上显示便签
- Vue插件开发工具的安装 以及 解决Vue Devtools安装后语法启动,图标仍然不亮的问题
- Visual Studio 2017 安装Windows SDK10.0.17134.0 失败的解决办法
- Amount of Degrees
- Excel插入副坐标轴(组合图)
热门文章
- 异常处理与自定义异常
- net导出到excel数字变为科学技术法
- 分布式系统关注点(3)——过去这几十年,分布式系统的「数据一致性」精华都在这了!...
- HDU 1260: Tickets
- 将指定目录中的txt文件转化成excel文件
- 模态框 modal.js
- account for 与led to和result in的区别
- python怎么获取lol皮肤名称_英雄联盟手游免费皮肤获取攻略 LOL免费皮肤怎么得...
- 江苏计算机专业接本,江苏农牧科技职业学院专接本或专转本的通知
- Markdown 模板