自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(174)
  • 收藏
  • 关注

原创 13. 状态的底层存储——CopyOnWriteStateMap

不管是ValueState、ListState、MapState,它们的底层存储都是用的StateTable<K, N, S>,而StateTable的底层存储又是StateMap<K, N, S>的数组,每个StateMap代表一个keyGroup。在获取元素时,先根据key计算出来它所属的keyGroup,拿到对应的StateMap,再通过map.get(key)的方式获取到对应的元素。K:keyBy时用的keyN:namespace, 用于区分窗口。

2023-08-27 21:24:46 315

原创 Spark Shuffle

本文介绍了Spark Shuffle的演进,以及Spark中各种数据操作所应用的Shuffle类型,最后介绍了Spark Shuffle和MR Shuffle的优缺点

2023-01-13 18:35:45 813

原创 Kafka

文章目录一、Kafka 是什么1.1 Kafka 定义1.2 两类消息队列模式1.2.1 发布/订阅模式1.2.2 点对点模式(一对一)1.2.3 消息队列的好处1.2.4 Kafka 使用的消息队列二、Kafka 架构三、Kafka 工作流程3.1 概述3.2 实现细节——segment 和 index四、Kafka 生产者4.1 分区4.1.1 为什么要分区4.1.2 分区策略(写入哪个分区)...

2020-03-09 23:49:54 257

原创 4.Redis哨兵

本文介绍了Redis如何用哨兵实现高可用,保证Redis的自动故障转移

2024-09-30 17:38:18 813

原创 3.Redis复制

本文介绍了Redis的复制拓扑结构和复制过程,以及全量复制和部分复制的概念

2024-09-30 17:36:50 378

原创 2.Redis持久化

本文介绍了Redis的持久化的作用,RDB和AOF的概念及其使用场景,最后介绍了故障恢复时的流程

2024-09-30 17:33:48 904

原创 1.Redis基础知识

本文介绍了Redis的基础知识,包括Redis特性,支持的数据类型,pipeline以及事物等

2024-09-30 17:31:45 683

原创 ClickHouse 分片与副本

本文介绍了ClickHouse的分片和副本机制

2024-09-21 10:31:58 788

原创 ClickHouse MergeTree原理解析

本文介绍了ClickHouse MergeTree的基本原理

2024-09-21 10:21:13 909

原创 湖格式总结

本文介绍了湖格式带来的优化,以及介绍了目前国内比较热的Iceberg、Hudi、Paimon的文件布局,并且将三者进行了对比

2023-12-26 21:06:31 1730

原创 java io

本文介绍了java io和java nio,以及io模型

2023-12-19 08:47:23 1010

原创 1.Hudi基本概念

本文介绍了Hudi的基本概念

2023-12-10 20:24:59 1114 2

原创 hive任务优化经验总结

本文中介绍了工作中遇到的hive任务优化的方法

2023-11-23 09:47:17 989

原创 hive cbo优化引起的bug

有一个任务,在混部集群默认开启,导致任务reduce个数太小,只启了2个reducetask,而maptask中读取的数据又很大,使得大量数据都写到这2个reduce task中,任务最终失败,在关闭这个参数后,可以启动1100个reducetask。对比执行计划,在开启这个参数后,hive 认为只会读取50000多行数据,而实际上是几十亿。hive.stats.fetch.column.stats导致reduce个数划分太小。

2023-11-19 12:08:55 157

原创 Optimizing Joins in a Map-Reduce Environment

本文介绍了基于多路join的优化

2023-11-19 11:46:41 75

原创 Spark内存管理

spark内存管理机制

2023-10-31 20:14:39 179

原创 Spark物理执行计划

本文介绍了spark物理执行计划的生成方式

2023-10-27 08:08:46 157

原创 Spark逻辑执行计划

本文介绍了spark逻辑执行计划的生成逻辑

2023-10-27 08:01:53 218

原创 4. Scala不可变Set详解

本文介绍了Scala immutable.Set的底层实现,详细介绍了添加元素的过程,以及其对空间的消耗,最后对比了mutable.Set、AppendOnlySet、Java的HashSet内存占用

2023-09-10 22:59:52 976 2

原创 22. 数据结构——职责链模式

类图:Handler(如Manager):定义一个处理请求的接口实现后继链ConcreteHandler(如JingLi、ZongJingLi):处理它所负责的请求如果可处理该请求,就处理之;否则转发给它的后继者Client向链上的具体处理者对象提交请求有多个对象可以处理同一个请求,哪个对象处理该请求在运行时刻自动确定你想在不明确接受者的情况下,想多个对象中的一个提交一个请求可处理一个请求的对象集合应该被动态指定。

2023-08-30 20:24:30 71

原创 21. 数据结构——迭代器模式

类图:Iterator(迭代器)迭代器定义访问和遍历元素的接口ConcreteIterator(具体迭代器)具体迭代器实现迭代器接口对该集合遍历时跟踪当前位置Aggregate(聚合)集合接口具体集合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。

2023-08-30 20:23:35 95

原创 20. 数据结构——组合模式

为组合中的对象声明接口在适当的情况下,实现所有类共有接口的缺省行为声明一个接口用于访问和管理Component的子组件Leaf(Rectangle、Line、Text等)在组合中表示叶节点对象,叶节点没有子节点在组合中定义图元对象的行为定义有子部件的那些部件的行为存储子部件在Component接口中实现与子部件相关的操作Client通过Component接口操纵组合部件的对象你想表示对象的部分-整体层次结构。

2023-08-30 20:22:07 71

原创 19. 状态变化——备忘录模式

​ 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

2023-08-30 20:20:25 51

原创 18. 状态变化——状态模式

​ 与许一个对象在其内部状态改变时改变其行为,这个对象看起来就像改变了其类。​状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。

2023-08-30 20:18:55 70

原创 17. 接口隔离——中介者模式

​ 用一个中介对象来封装一些列对象的交互。中介者使得个对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。类图:**减少了子类生成。**中介者将原本分布于多个对象间的行为集中在一起。改变这些行为只需生成Meditator的子类即可。这样各个Colleague类可被复用**它将各Colleague解耦。**Mediator有利于各Colleague间的松耦合,你可以独立改变和复用各Colleague类和Mediator类**它简化了对象协议。

2023-08-30 20:18:04 56

原创 16. 接口隔离——适配器模式

​ 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。你想使用一个已经存在的类,而它的接口不符合你的要求;你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作。

2023-08-30 20:16:11 60

原创 15. 接口隔离——代理模式

上述场景分析中涉及到的是一种称为 “虚代理” 的情况,代理模式一共有4种常见情况。

2023-08-30 20:15:14 69

原创 14. 接口隔离——门面模式

​ 为子系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(服用)。Facade门面角色:客户端可以调用这个角色的方法。此角色直销子系统的所有功能和责任。一般情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去,也就说该角色没有实际的业务逻辑,只是一个委托类。subsystem子系统角色:可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。子系统并不知道门面的存在。

2023-08-30 20:11:45 56

原创 11. 对象创建——Builder模式

PersonDirector类就可以根据用户的选择来建造小人了,而在建造的过程在指挥者这里完成了,用户就不需要知道了,而且,由于这个过程每一步都是一定要做的,那就不会少让少画一只手、少画一条腿的问题出现了。像这种因为粗心而导致程序异常在平时开发中还是比较常见的,比如我们在程序里需要画100个不同的小人,在高矮胖瘦上有细微的差别,我们在每次创建小人时都用上述的代码,这样是很容易有遗漏。**主要解决:**主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;

2023-08-30 19:04:25 112

原创 10. 对象创建——原型模式

原型模式是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

2023-08-30 19:02:10 67

原创 9. 对象创建——抽象工厂

​ 提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们的具体类。

2023-08-30 19:00:48 40

原创 8. 对象创建——工厂方法

​ 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使得一个类的实例化延迟到子类。

2023-08-30 18:59:48 47

原创 7. 对象创建——简单工厂

依据上面的实现方法,我们可以直接在Operation里新添加一个switch分支,但是这样导致的问题是如果频繁地添加运算符,就会频繁地修改Operation类,很容易在添加代码的时候将原有的代码改变。**分析:**其实,上面的实现方式违反了开放封闭原则,我们要使用一种结构,使得可以在不修改原有代码的基础上增加功能。此时,对于客户端来说,业务层使用的是什么计算逻辑是无感知的,就可以动态的添加运算符了,这就是简单工厂模式。**需求变更:**此时,我们需要新添加一个运算符,取余运算。

2023-08-30 18:50:49 43

原创 3. 组件协作——策略模式

​ 定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。

2023-08-30 18:46:38 47

原创 hive写动态分区加distribute by

在程序的最后,按照动态分区的字段在程序最后加一个distribute by,在本例中,就是加distribute by type, salt,此时就可以保证相同的type 和 salt的数据,会在同一个task中执行,最后输出的文件个数也是在可接受范围内的,输出文件个数为 type * salt * ceil(file_size / 256m),在本例中,因为每个文件都小于256m,所以生成的文件个数就是4 * 512 * 1 = 2048。

2023-08-29 16:18:43 311

原创 14.Flink双流Join——DataStream

本文介绍了基于flink datastream的双流join

2023-08-27 21:46:24 347 2

原创 17.Flink双流Join——SQL

本文介绍了基于flink sql的双流join

2023-08-27 21:11:39 509

原创 16.Flink Table——时态表

本文介绍了flink时态表

2023-08-27 21:10:59 127

原创 15.Flink Table——动态表

本文介绍了flink动态表

2023-08-27 21:09:54 211

原创 14.Flink双流Join——DataStream

本文介绍了基于flink datastream的双流join

2023-08-27 21:01:23 250

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除