热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据湖使用分享

1引入背景:目前我们实时接入binlog,用的是kudu,但kudu对大事务支持不好,关键成本比较高,大数据加胜同学建议尝试数据湖,从而开始了数据湖的探索。后续与培殿同学一直配合跟

1 引入背景:

目前我们实时接入binlog,用的是kudu,但kudu对大事务支持不好,关键成本比较高,大数据加胜同学建议尝试数据湖,从而开始了数据湖的探索。后续与培殿同学一直配合跟进数据湖,发掘出数据湖更多功能,用于生产。



2 数据湖基本概念



本质来讲,数据湖是一个关于存储的设计模式

2.1 数据湖基础概念snapshot

snapshot是iceberg比较重要的概念。Iceberg 基于MVCC(Multi-Version Concurrency Control)设计,每次commit都会生成一个快照(Snapshot),该快照包含唯一的snapshotId、时间戳timestamp及对应的manifest文件。

如下图所示,最新 snapshot 拥有该表的全局视图,每个snapshot包含多个manifest文件,每个manifest文件中记录本次事务中记录写入文件与分区的对应关系,且包含一些文件记录的统计信息(如lower_bound、upper_bound、added_rows_count、deleted_rows_count)用来快速筛选文件。一定程度上可以把 manifest 文件理解为索引文件。

基于Snapshot的设计,用户需要通过snapshot来访问iceberg中的数据,如果数据写入但没有commit成功,就不会生成新的snapshot,也因此不会访问到这部分不完整数据。

3 根据数据湖特点,我们能做什么事情

头脑风暴时刻,它有什么特性,为什么要引入,引入到底能解决什么问题

3.1 支持事务,行级别更新

利用这个特性,我们可以:

flink实时cdc

对于实时数仓,我们可以用更好的离线修复,做到万无一失

同时也可代替kudu,节约成本,提高实时性

3.2 去分区概念,小文件问题

iceberg使用不用care分区,解决hive分区痛点,hive如果不添加分区,可能造成灾难性的后果。iceberg有类似分桶概念,且后台可自助合并数据

对使用方更友好,直接给我表名完了呗,干啥又让我知道分区概念

3.3 实时兼容更好,生态形式

一个新组件的前景,可以从其特性与依赖的生态来推测。iceberg上接计算引擎,下接底层存储hdfs,像kudu就是自己搞的一套,提高读性能,牺牲写性能,定位介于hdfs,hadoop之间。

3.4 读写分离

基于snapshot,如果读写同时进行,当前写snapshot没有完成commit,读不可见,但可以读历史snapshot

3.5 schema动态切换

主要为更改schema结构,对非结构化数据比较好

3.6 统一存储

底层存储统一用iceberg,代替hive

二 我们的使用与规划

不支持在 Docs 外粘贴 block

引入数据湖,首先需要解决与优化目前已有的痛问题为切入点去推动数据湖,随着使用的积累,可优化目前的实时架构。

两个能落地的项目

1 简化同步实时链路

前几版大致介绍,中间结果(timetravel spark找),最新版本介绍

1.1 监控hdfs路径

flink监控hdfs路径,只要这个路径下面有新增文件即同步。有几个缺点,读只有一个并发,新增与删除是两个流;对于重新回溯数据不太友好,需要删除所有数据;

1.2 基于talos,解决以上缺点



  1. SparkStreaming 常驻进程写talos

  2. Flink读取talos,通过状态对比,只发送更新或者新增数据

  3. Binlog数据实时入kudu,hive与kudu表格对比找到删除数据;但kudu有延时,事务等问题

链路多了,数据量大了,各种问题就会被慢慢放大

1.3 中间过渡版本

数据湖支持timetravel,每个snapshot的数据都可以拿到,通过前后两个snapshot对比就可以拿到差异数据。不过目前不支持sql 方式,需要写代码解决

1.4 实时同步第三版

不支持在 Docs 外粘贴 block

经过多天运行后,事实如下:

flink可直接读取到变化数据,直接同步到下游

2 实时数仓

构建实时数仓的两种方式

1 cdc入湖,实时更强

cdc目前有两种方式mysql或者talos

1.1直连mysql方式

目前有集群白名单问题,不过感觉加个代理也可以解决

1.2 talos方式:自己生成或者已经授权的Talos

如果是我们自己的库比较方便,但其它业务业务系统,一般我们拿不到mysql连接,对方更愿暴露talos。

目前公司主要使用的方式,采集binlog到talos,再入kudu或者iceberg。

重新回溯数据一般采用置位删除

一般在建表之初直接采集binlog,如果后期,数据量太大,初始化会有几分钟的延迟

2 基于已有表格

基于其它已经表格之上构建实时数仓,得益于大数据培殿同学大力支持,我们可以自己使用merge into构建cdc数据

原理:

merge into 新语法+iceberg V2表格=带有新增,删除,更新功能的表格

数据生成:

新beeline(类似miquery) 读取hive等数据,使用merge into 语法,写入到iceberg

对于公共模块在精减ing,减少冗余

3 另外数据湖支持事务,可离线进行校正

不支持在 Docs 外粘贴 block

底层直接使用merge into,后面ads表格根据底层聚合后,也能识别,所以不需要再使用merge into,直写sql即可

三 切换步骤

1 队列改造

2 建表语句与sql改造

3 build脚本改造,能公用的都公用,去除重复劳动,

4 beeline 采用token方式,也没有了kerberos问题


推荐阅读
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 先记住几个专用名词,如下:Workspace:工作区IndexStage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个G ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 如何方便地退订邮件列表,避免混乱和烦恼
    本文介绍了如何方便地退订邮件列表,避免混乱和烦恼。文章指出,退订邮件列表可能会造成混乱,特别是当被意外添加到列表中时。为了快速、轻松地取消订阅,建议不要将退订电子邮件发送到用于发布消息的电子邮件地址。文章还介绍了邮件列表由邮件列表软件控制,作为邮件列表成员,可以对该软件进行一些用户控制。一些邮件列表允许使用自动电子邮件地址退订,但这可能会带来一些混乱。最后,文章提到退订邮件列表需要向电子邮件服务器发送特殊命令来脱离列表。 ... [详细]
  • 本文简述了数据库的概念、作用及发展阶段的特点。数据管理技术的发展经历了人工管理阶段、文件系统阶段和数据库系统阶段,分别描述了各个阶段的特点。数据库、数据库管理系统和数据库系统的含义和联系也进行了简述。数据库是长期存储在计算机内、有组织、可共享的大量数据的集合,而数据库管理系统是整个数据库系统的核心部分,负责统一管理和控制用户对数据库的操作。数据库系统是以数据库为基础的应用系统。总结了数据库的保存方式、管理方式、共享性和独立性等特点。 ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
author-avatar
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有