- 博客(58)
- 资源 (4)
- 收藏
- 关注
原创 hudi系列-schema evolution(一)
在非schema on read模式下对schema进行变更需要注意以下情况可以增加新字段,但是建议只是追加,而且新schema数据需写入成功后才进行查询可以删减字段,一般不建议不可以改变列的数据类型不支持更改列名。
2024-06-27 18:42:07
624
原创 hudi系列-schema evolution
hudi对schema evolution进行了统一设计,在官网文档中也指明了从0.11版本开始,spark-sql ddl是支持schema evolution的,而flink-sql在旧版本中并不支持ddl方式对表结构,所以full schema evolution都隐藏在读写过程中。对于使用者,我们最终只关心表的读和写,但从实现层面来看,schema evolution需要覆盖不同的数据文件格式,还需要集成在各种hudi的表服务中。
2024-04-15 19:31:26
670
原创 hudi系列-KeyGenerator & 分区提取器
KeyGenerator和分区提取器都是插件化,并均提供了多种开箱即用实现,基本能覆盖常用的场景。两者的选择主要是依赖于分区的数量和数据类型。
2023-07-18 09:26:53
1240
原创 hudi系列-timeline service
Timeline Service(时间线服务)是hudi的一个组件,用于暴露接口给客户端,是一个基于Javalin+Jetty实现的web服务。当客户端使用远程文件系统视图()时,就是访问时间线服务http接口默认情况下,如果开启了时间线服务,则它运行在JobManager(如果是spark,则在driver中),所有写任务都会向它发出请求。
2023-06-26 19:23:54
1707
原创 hudi系列-文件系统视图(FileSystemView)
hudi表的数据一直在演变过程中,存储在文件系统中的数据文件也在不断增加和版本迭代,hudi提供了的文件系统视图(filesystem view)来简单、直观地了解表中的数据分布情况、数据文件的状态和变化,以及数据的版本控制信息。SliceView当然,文件系统视图持续进行着自我更新、重置,以保持最新视图。
2023-06-13 14:08:01
2085
原创 hudi系列-append写过程
Append模式每次都生成新的parquet文件,不涉及数据修改、去重。cow+insert一直是append模式,mor+insert在0.13.1后也统一走append写流程append写过程比upsert简单直接得多,因此写入性能远优于upsert.
2023-06-08 14:51:38
2037
原创 hudi系列-小文件优化
hudi使用mvcc来实现数据的读写一致性和并发控制,基于timeline实现对事务和表服务的管理,会产生大量比较小的数据文件和元数据文件。大量小文件会对存储和查询性能产生不利影响,包括增加文件系统的开销、文件管理的复杂性以及查询性能的下降。对于namenode而言,当整个集群中文件数到了几千万,就已经会变得很不稳定了。
2023-06-05 15:04:48
2271
原创 hudi系列-upsert写过程
hudi有很多种写入流程,使用不同的表类型、写类型()、索引类型(IndexType),流程上都会有所差异。使用flink流式写MOR表场景比较多,顺道梳理一下这个流程的细节。
2023-04-23 18:11:55
2064
原创 hudi系列-增量查询ckp超时
hudi在对mor进行增量查询时会出现首次checkpoint超时报错,从现象到原因分析,并提出几种解决方案进行对比。
2023-04-08 19:00:00
1664
原创 hudi系列-基于cdc应用与优化
曾经做数据同步受存储引擎和采集工具的限制,经常都是全量定时同步,亦或是以自增ID或时间作为增量的依据进行增量定时同步,无论是哪种,都存在数据延时较大、会重复同步不变的数据、浪费资源等问题。后来刚接触canal时还大感惊奇,基于mysql的binlog可以这么方便实时同步最新数据,然而历史数据的初始化仍然得使用第三方ETL工具来全量同步。直到flink cdc项目诞生,完全解决了前面的痛点。实时技术的发展已经不能满足于数据只能实时采集,还需要实时地进行数据建模和数据分析,即全链路实时。
2023-03-30 20:03:21
1378
原创 hudi系列-数据写入方式及使用场景
hudi支持多种数据写入方式:insert、bulk_insert、upsert、boostrap,我们可以根据数据本身属性(append-only或upsert)来选择insert和upsert方式,同时也支持对历史数据的高效同步并嫁接到实时流程。
2023-03-14 16:51:14
2654
2
原创 hudi系列-不支持flink计算列
有个hudi mor的事实表,需要与外部的维表进行关联以生成明细宽表,方案是基于flink sql对事实表进行增量查询,同时与外部的维表进行lookup join,除了无需编码之外,通过jdbc的方式连接外部表还能利用flink jdbc-connector的缓存功能。这种join方式要求事实表必须有一个处理时间(process time)属性,所以在定义事实表时增加了一个计算列从flink sql的角度来看,这并没什么毛病,但是直接查这个表的数据时就会报错。
2023-02-18 22:55:59
2055
1
原创 hudi系列-文件布局(file layout)
hudi的文件布局是能实现增量查询、数据更新等特性的基础,每个hudi表有一个固定的目录,存放元数据(.hoodie)以及数据文件,其中数据文件可以以分区方式进行划分,每个分区有多个数据文件(基础文件和日志文件),这些数据文件在逻辑上被组织为文件组、文件分片上面的示例中,2023-02-15这个分区下有一个文件组,文件中组中有3个文件切片,其中一个只有log文件,一个只有base文件。
2023-02-16 09:17:33
2008
原创 hudi系列-索引机制
hudi的索引机制是为了加速upsert/delete操作,它维护着(分区 + key)-> fileID之间的映射关系,所以可以减少对非必要base文件的合并key是指索引key,可以是表的任意字段,在全局索引中常用主键key作为索引。
2023-01-03 09:50:15
2412
原创 hudi系列-设置合理清理策略
在中介绍了清理的大致流程,除了可以防止文件系统的无限膨胀,它是必须的。hudi提供三种查询方式:读优化、快照读、增量读,无论是哪种方式,由于hudi的文件组织是有版本的概念(FileGroup,FileSlice),旧版本的文件持续在执行清理,如果被清理的文件正在读取或者即将被读取到,那岂不是很影响使用,所以我们需要设置合理的清理策略保障上层数据处理任务的平稳运行,提高系统的容错性。可以通过来配置使用以上哪一种清理策略。
2022-11-08 20:56:32
3571
1
原创 hudi系列-文件归档(archive)
hudi会不断生成commit、deltacommit、clean等类型的Instant从而形成活跃时间轴(ActiveTimeline),随着时间增长,时间轴变长,.hoodie元数据目录下的文件不断累积,为了限制元数据文件数量,需要对一些比较久远的元数据文件进行归档,保存到.hoodie/archived目录下,可以称之为归档时间轴(ArchivedTimeline)。
2022-09-16 15:43:18
6321
原创 hudi系列-文件压缩(compaction)
压缩(compaction)仅作用于MergeOnRead类型表,MOR表每次增量提交(deltacommit)都会生成若干个日志文件(行存储的avro文件),为了避免读放大以及减少文件数量,需要配置合适的压缩策略将增量的log file合并到base file(parquet)中。...
2022-08-17 17:13:17
8389
原创 hudi系列-旧文件清理(clean)
hudi采用的是mvcc设计,提供了清理工具cleaner来把旧版本的文件分片删除,默认开启了清理功能,可以防止文件系统的存储空间和文件数量的无限增长。
2022-08-04 15:30:00
8987
原创 hudi系列-流式增量查询
hudi的两大特性流式查询和支持upsert/delete,hudi的数据变更是基于timeline的,所以时间点(Instant)就成为了实现增量查询的依据。在与flink集成中,当开启了流式读,其实就是一个持续的增量查询的过程,可以通过配置参数read.start-commit和read.end-commit来指定一个无状态的flinkjob的初始查询范围。...............
2022-07-29 17:06:24
8545
原创 Spark序列化 & Encoders
spark序列化方式分布式的程序存在着网络传输,无论是数据还是程序本身的序列化都是必不可少的。spark自身提供两种序列化方式:java序列化:这是spark默认的序列化方式,使用java的ObjectOutputStream框架,只要是实现了java.io.Serializable接口的类都可以,这种方式虽然通用但是性能差,占用的空间也比较大kryo序列化:相比于java序列化,kryo更高效且序列化结果紧凑,占用空间小,但是不能序列化所有数据类型,且为更好的性能,需要在程序中注册需要序列化的类
2022-02-12 12:56:05
11138
原创 Spark数据格式UnsafeRow
1. 简介UnsafeRow是InternalRow的子类,它表示一个可变的基于原始内存(raw-memory)的二进制行格式,简单来说UnsafeRow代表一行记录,用于替代java对象(属于Tungsten计划的一部分,可以减少内存使用以及GC开销)InternalRow:spark sql内部使用的表示行的抽象类,对应表示输出的行有org.apache.spark.sql.Row/GenericRow/GenericRowWithSchema2. 类属性private Object base
2022-01-14 12:49:22
8881
2
原创 Spark统一内存划分
文章目录executor内存逻辑架构Executor 界面内存计算UnrollMemory理解参考executor内存逻辑架构堆内存,由JVM分配和回收,由spark.executor.memory控制大小,JVM中序列化的对象是以字节流形式,其占用内存大小可直接计算,对于非序列化对象,其占用的内存是通过周期性地采样近似估算,且被spark标记为释放的对象实例也有可能并没有被JVM回收,所以spark并不能准确记录实际可用堆内存,也就无法避免内存溢出非堆内存,不受JVM管理,有两部分,其中一部分通
2022-01-06 11:29:08
8619
原创 kudu设计-tablet
1. 逻辑组成tablettablet是kudu表的一个水平分区,类似于Hbase的region概念。每个tablet包含一个连续主键范围的记录,不同tablet的键范围不会有重叠,一个表的所有tablet就组成了这个表完整的键空间,充分利用kudu的分区功能,可以有效避免数据热点问题。RowSet每个tablet由若干个RowSet构成,一个RowSet由一组行数据组成,对于给定一个k......
2020-05-07 11:26:58
8337
4
原创 java并发-AbstractQueuedSynchronizer
AQS是个什么东西AbstractQueuedSynchronizer是java并发包下大部分的同步组件的底层基础框架,包括ReentrantLock、Semaphore、CountDownLatch等,有点类似在上文中可以基于ThreadPoolExecutor构造FixedThreadPool,CachedThreadPool,SingleThreadExecutor。虽然在开发中很少基于A...
2020-01-21 15:17:06
7809
原创 java并发-ThreadPoolExecutor
线程池,使用池中某线程来执行提交的任务,通常使用Executors的工厂方法来生成线程池解决两个问题:当有大量异步任务时,使用线程池可以减少了每个任务的调用开销,所以提供了比较好的性能它们还提供了绑定和管理资源的方法,包括执行任务集合时消耗的线程。每个ThreadPoolExecutor还维护一些基本统计信息,比如已完成任务的数量。状态变量RUNNING:接受新任务并且处理阻塞队...
2019-11-26 17:39:33
7089
原创 Thread类相关方法
Thread各状态线程某时间点只能处于一种状态。这些状态是虚拟机状态,与操作系统线程状态无关。NEW:线程尚未启动的状态,调用start之前RUNNABLE:可运行、就绪状态,表示已经在JVM中执行,但是同一时间只有一线程获取到CPU资源,所以虽然在JVM层面多个线程一直处理RUNNABLE状态,但是在操作系统层面并不是真正得到CPU资源运行BLOCKED:线程因为等待monitor锁而...
2019-08-14 17:47:43
7134
原创 Object类相关方法
1.equals实现对非null对象的等价关系判断自反性,对于任何非null引用对象x,x.equals(x)=true对称性,对于任何非null引用对象x和y,x.equals(y)=y.equals(x)传递性,对于任何非null引用对象x,y和z,如果x.equals(y),y.equals(z),则x.equals(z)一致性,对于任何非null引用对象x和y,多次调用x....
2019-06-11 17:11:35
7015
原创 impala+kerberos配置
1.环境centos 6.5192.168.17.138 master NameNode,SecondaryNameNode,impala-catalog,impala-state-tore192.168.17.153 slave1 DateNode,impala-server192.168.17.156 slave2 DateNode,impala-server2.安装K...
2019-05-27 17:44:20
11440
原创 impala创建kudu表过程,并发时异常
1.环境impala版本2.11.0-cdh5.14.0,kudu版本2.11.0-cdh5.14.02.问题现象最近使用impala+kudu时遇到个问题,有个程序会定时通过jdbc来创建kudu表,但是开发时,多个服务同时启动,就会并发创建同一个kudu表,有时会导致表创建异常,此时,在impala-shell中可以查到该表存在,但是实际kudu中不存在该表[gbdts02:21000......
2019-05-22 15:49:26
14327
3
原创 极大似然估计
引用维基百科上对概率与似然的说明 在数理统计学中,似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。似然函数在统计推断中有重大作用,如在最大似然估计和费雪信息之中的应用等等。“似然性”与“或然性”或“概率”意思相近,都是指某种事件发生的可能性,但是在统计学中,“似然性”和“或然性”或“概率”又有明确的区分。概率用于在已知一些参数的情况下,预测接下来的观测所得到的结果,而似然.........
2018-08-03 16:49:39
9631
原创 导数、微分、偏导数、全微分、方向导数、梯度的定义与关系
学习到机器学习线性回归和逻辑回归时遇到了梯度下降算法,然后顺着扯出了一堆高数的相关概念理论:导数、偏导数、全微分、方向导数、梯度,重新回顾它们之间的一些关系,从网上和教材中摘录相关知识点。通过函数的极限定义出导数(以一元函数为例)函数f(x)在点x0可微的充分必要条件是函数f(x)在点x0处可导扩展到多元函数时,衍生出偏导数导数定义:设函数y=f(x)y=f(x)y=f(x......
2018-07-24 16:54:08
49759
16
原创 spark TF-IDF特征提取生成文章关键词
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I......
2018-07-18 16:03:34
11335
30
原创 kettle5.3批量插入impala
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I......
2018-06-11 16:28:22
16324
4
原创 spark1.6.1集群部署(standalone)
1. 节点准备192.168.137.129 spslave2192.168.137.130 spmaster192.168.137.131 spslave12. 修改主机名3. 配置免密码登录首先到用户主目录(cd ~),ls -a查看文件,其中一个为“.ssh”,该文件价是存放密钥的。待会我们生成的密钥都会放到这个文件夹中。现在执行命令生成密钥:ssh-keygen -t rsa -
2017-08-04 19:43:23
7450
原创 hadoop2.6分布式环境搭建
1. 前言在3个系统centos6.5的linux虚拟机搭建一个分布式hadoop环境,hadoop版本为2.6,节点ip分别为192.168.17.133 192.168.17.134 192.168.17.135 2. 配置hosts文件分别在3个节点上配置/etc/hosts文件,内容如下:192.168.17.133 master 192.168.17.134 slave1 192.
2017-08-04 19:25:05
7310
原创 kettle5.3扩展step插件支持元数据注入
1. 前言虽然说kettle提供了可视化的操作界面,但对于一些共有相同功能的ETL流程我们不希望每次都在spoon上面拖拉组件去创建流程,感觉比较繁琐,所以在基于kettle做二次开发的时候希望可以把相同类型的流程提取成公共的模板,每次只需要把不同的参数传入到插件里面即可实例化成不同的模板作业,kettle的插件式设计很符合我们的需求,它提供的变量设置、获取以及元数据注入组件基本能满足工们所有的功能...
2017-07-10 13:54:39
9966
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅