一、方案背景

现阶段部分业务数据存储在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海量数据高效入仓解决方案相关推荐

  1. 如何解决HBase海量数据高效入仓的问题?

    如何解决HBase海量数据高效入仓的问题?数据仓库的数据来源于各方业务系统,高效准确的将业务系统的数据同步到数仓是数仓建设的根本.部分业务数据存储在HBase中,这部分数据体量较大达到数十亿.大数据需 ...

  2. 刷脸秒入仓,阿里云云盾实人认证助力心怡科技迎战双11

    在物流公司心怡科技下沙菜鸟网络的跨境仓内,每天早晚上下班的高峰期,员工排出长长的队伍进出仓库成为一道特殊的"风景". 据了解,心怡科技在全国拥有88个RDC(区域分拨)中心.仓配网 ...

  3. Tapdata Connector 实用指南:数据入仓场景之数据实时同步到 BigQuery

    [前言]作为中国的 "Fivetran/Airbyte", Tapdata 是一个以低延迟数据移动为核心优势构建的现代数据平台,内置 60+ 数据连接器,拥有稳定的实时采集和传输能 ...

  4. 当 TiDB 遇上 Flink:TiDB 高效入湖“新玩法” | TiLaker 团队访谈

    数据湖是大数据领域近年来非常火热的技术,传统数仓无法实现增量数据的实时更新,也无法支持灵活的元数据格式,数据湖技术便在这一背景下诞生了.数据库的增量变更是数据湖中增量数据的主要来源,但目前 TiDB ...

  5. flink 开发平台Dinky 构建 Flink CDC 整库入仓入湖

    原文:http://www.senlt.cn/article/866753893.html 摘要:本文介绍了如何使用 Dinky 实时计算平台构建 Flink CDC 整库入仓入湖.内容包括: 背景 ...

  6. 数据同步到数仓解决方案

    数据同步到数仓解决方案 一.概述 在数据仓库建模中,未经任何加工处理的原始业务层数据,称之为ODS(Operational Data Store)数据.在互联网企业中,常见的ODS数据有业务日志数据( ...

  7. 亚马逊云科技Serverless构建的实时数仓解决方案,助力猎豹降低30%成本

    也许你也听过这样一句话:"21世纪什么最贵?人才!"当数字经济全面席卷而来,这个问题的答案不可置否地变为了"数据".通过数据分析获取近乎实时的洞察,以驱动业务的 ...

  8. ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 解决方案

    ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 解决方案 参考文章: (1)ERROR:org.ap ...

  9. 小米air13.3 i7 8550U MX150 指纹版使用电池开机无法正常进入系统解决方案

    小米air13.3 i7 8550U MX150 指纹版使用电池开机无法正常进入系统解决方案 前言 我的小米air13.3是18年9月份买的,然后使用了差不多一年的时候,电池就无法充电,必须得插电源使 ...

  10. DBA高效入职指南学习笔记

    (本文为本人自学oracle,读完DBA高效入职指南一书所记录的学习笔记,仅作为自己日后参考查询使用.) ----------------------------------------------- ...

最新文章

  1. python和linux哪个难学-“慢”下来的 Python 要怎么竞争?
  2. Windows下Python环境搭建
  3. Tomcat根目录下work文件夹的作用(转载)
  4. git pull 部分文件无法获取
  5. BitMapData知识 转
  6. JPA#Interfaces总结
  7. IOUtils pom 依赖
  8. 华佗穿越来教程序员睡觉
  9. php cms下载地址,phpcms将下载地址替换为图片显示
  10. 电商设计的文字的选择与排版
  11. 如何设置行间距和字间距?
  12. 学会区分 RNN 的 output 和 state
  13. AHB和VPB的区别
  14. wp mysql数据库大小_wordpress数据库容量
  15. java web 乱码_java web乱码解决方法
  16. 怎样在win7电脑桌面上显示便签
  17. Vue插件开发工具的安装 以及 解决Vue Devtools安装后语法启动,图标仍然不亮的问题
  18. Visual Studio 2017 安装Windows SDK10.0.17134.0 失败的解决办法
  19. Amount of Degrees
  20. Excel插入副坐标轴(组合图)

热门文章

  1. 异常处理与自定义异常
  2. net导出到excel数字变为科学技术法
  3. 分布式系统关注点(3)——过去这几十年,分布式系统的「数据一致性」精华都在这了!...
  4. HDU 1260: Tickets
  5. 将指定目录中的txt文件转化成excel文件
  6. 模态框 modal.js
  7. account for 与led to和result in的区别
  8. python怎么获取lol皮肤名称_英雄联盟手游免费皮肤获取攻略 LOL免费皮肤怎么得...
  9. 江苏计算机专业接本,江苏农牧科技职业学院专接本或专转本的通知
  10. Markdown 模板