自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (14)
  • 收藏
  • 关注

原创 数据湖Iceberg、Hudi和Paimon比较

Iceberg 社区基本盘还是在离线处理,它在国外的应用场景主要是离线取代 Hive,它也有强力的竞争对手 Delta,很难调整架构去适配 CDC 流更新。同时,Iceberg 扩展性强,对其它计算引擎也暴露的比较多的优化空间,但是这也导致后续的发展难以迅速,涉及到众多已经对接好的引擎。这并没有什么错,后面也证明了 Iceberg 主打离线数据湖和扩展性是有很大的优势,得到了众多国外厂商的支持。

2024-02-22 14:26:20 1756 1

原创 数据湖存储解决方案之Paimon

Flink 社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合,推出新一代的 Streaming Lakehouse 技术,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。Flink 社区内部孵化了 Flink Table Store (简称 FTS )子项目,一个真正面向 Streaming 以及 Realtime的数据湖存储项目。

2024-02-21 15:39:49 1258

原创 数据湖存储解决方案之Hudi

Apache Hudi是一个Data Lakes的开源方案,Hudi是Hadoop Upserts Delete and Incremental的简写,它是由Uber开发并开源的Data Lakes解决方案。Hudi能够基于HDFS之上管理大型分析数据集,可以对数据进行插入、更新、增量消费等操作,主要目的是高效减少摄取过程中的数据延迟。官方对 Hudi 的定义如下:Apache Hudi将核心仓库和数据库功能直接引入数据湖。

2024-01-17 15:10:18 1065

原创 数据湖存储解决方案之Iceberg

Apache Iceberg 是由 Netflix 开发开源的,其于2018年11月16日进入 Apache 孵化器,是 Netflix 公司数据仓库基础。Apache Iceberg设计初衷是为了解决Hive离线数仓计算慢的问题,经过多年迭代已经发展成为构建数据湖服务的表格式标准。Iceberg 本质上是一种专为海量分析设计的表格式标准,可为主流计算引擎如 Presto、Spark 等提供高性能的读写和元数据管理能力。

2024-01-09 17:07:35 1290

原创 湖仓架构的演进

起初,业界数据处理首选方式是数仓架构。通常数据处理的流程是把一些业务数据库,通过ETL的方式加载到Data Warehouse中,再在前端接入一些报表或者BI的工具去展示。数据仓库概念是 Inmon 于 1990 年提出并给出了完整的建设方法。随着互联网时代来临,数据量暴增,开始使用大数据工具来替代经典数仓中的传统工具。此时仅仅是工具的取代,架构上并没有根本的区别,可以把这个架构叫做离线大数据架构。

2024-01-05 15:56:17 1147

原创 数据湖和传统数仓区别及湖仓一体

早期系统采用关系型数据库来存放管理数据,但是随着大数据技术的兴起,人们对于多方面数据进行分析的需求愈加强烈,这就要求建立一个能够面向分析、集成保存大量历史数据的新型管理机制,这一机制就是数据仓库。数据仓库通常存储来自不同源的数据,集成源数据以提供统一的视图。这些资源可以包括事务系统、应用程序日志文件、关系数据库等等。

2024-01-04 14:53:53 503

原创 数据湖的概念

数据湖应该是一种不断演进中、可扩展的大数据存储、处理、分析的基础设施;以数据为导向,实现任意来源、任意速度、任意规模、任意类型数据的全量获取、全量存储、多模式处理与全生命周期管理;并通过与各类外部异构数据源的交互集成,支持各类企业级应用。可扩展是指规模的可扩展和能力的可扩展,即数据湖不但要能够随着数据量的增大,提供“足够”的存储和计算能力;还需要根据需要不断提供新的数据处理模式,例如可能一开始业务只需要批处理能力,但随着业务的发展,可能需要交互式的即席分析能力;

2024-01-04 13:26:14 374

原创 Flink之Watermark

Watermark是Apache Flink提出的一种用来解决乱序、延迟数据等情况的解决方案。它是建立在事件时间上的一个概念,用来刻画数据流的完整性。如果按照处理时间来衡量事件,一切都是有序的、完美的,自然而然也就不需要Watermark了。换句话说事件时间带来了乱序的问题,而Watermark就是用来解决乱序问题。所谓的乱序,其实就是有事件延迟了,对于延迟的元素,我们不可能无限期的等下去,必须要有一种机制来保证一个特定的时间后,必须触发Window进行计算。

2023-08-31 15:18:18 1418

原创 Flink状态和状态管理

官方定义:当前计算流程需要依赖到之前计算的结果,那么之前计算的结果就是状态。这句话还是挺好理解的,状态不只存在于Flink,也存在生活的方方面面,比如看到一个认识的人,如果识别认识呢?就是眼睛看到这个人的样子,再和大脑记忆中的人做对比,就知道认识这个人,其中大脑记忆中的人就是存储在状态中。状态又分为无状态和有状态。

2023-08-17 16:29:56 647

原创 Flink作业调度的9种状态

Flink 通过 Task Slots 来定义执行资源。每个 TaskManager 有一到多个 task slot,每个 task slot 可以运行一条由多个并行 task 组成的流水线。这样一条流水线由多个连续的 task 组成,比如并行度为 n 的 MapFunction 和 并行度为 n 的 ReduceFunction。

2023-08-03 22:50:43 1005

原创 Flink回撤流

Flink 的回撤流是指在 Flink 的流处理算法中,撤回已经发送到下游节点的数据。这是因为在实际应用场景中,有些错误数据可能会发送到下游节点,因此需要回撤流以保证数据的准确性。回撤流可以理解为流式场景下对数据进行更新,这里的更新数据并不是将发往下游的历史数据进行更改,要知道,已经发往下游的消息是追不回来的。

2023-07-27 23:20:47 2649 1

原创 Flink SQL之常用函数(二)

例如:select CURRENT_DATE;返回 2021-10-08例如:select CURRENT_TIME;返回 09:25:28.137例如:select CURRENT_TIMESTAMP;返回 2021-10-08T09:23:15.180 --注意和时区有关系例如:select LOCALTIMESTAMP;返回 2021-10-08T17:19:47.787例如:select LOCALTIME;返回 17:22:16.212。

2023-07-20 22:37:43 4256

原创 Flink SQL之常用函数(一)

可根据使用的版本查找,该链接为1.12版本。

2023-07-13 17:22:28 1366

原创 Flink SQL之窗口JOIN

滚动窗口有固定的尺寸,窗口间的元素无重复示例:每10分钟将10分钟内的金额汇总计算。

2023-07-07 08:50:07 559

原创 Flink SQL之Temporal Joins

时态表是一个随时间演变的表,在Flink中也称为动态表。时态表中的行与一个或多个时态周期相关联,并且所有Flink表都是时态的(动态的)。时态表包含一个或多个版本化的表快照,它可以是跟踪更改的更改历史表(例如数据库更改日志,包含所有快照),也可以是具体化更改的维表(例如包含最新快照的数据库表)。时态表可以分为和。时态join类型。

2023-06-29 16:22:10 1506

原创 Flink SQL之Interval Joins

区间是双流join的优化,基于处理时间或事件时间,在一定时间区间内数据,相同的key进行join(支持 Batch\Streaming)。Interval Join 可以让一条流去 Join 另一条流中前后一段时间内的数据。对于stream查询,时间区间oin只支持有时间属性的 append-only表。由于时间属性是准单调递增的,Flink可以从其状态中删除旧值,而不会影响结果的正确性。优点:由于给定了关联的区间,因此只需要保留很少的状态,内存压力较小。

2023-06-14 16:10:06 1737 4

原创 Flink SQL之Regular Joins

双流join是最通用的联接类型(支持 Batch\Streaming),其中任何新记录或联接两侧的更改都是可见的,并影响整体的Join结果。适用场景:因为资源问题 Regular Join 通常是不可持续的,一般只用做有界数据流的 Join。

2023-06-01 16:36:35 566

原创 Flink自定义函数之表值聚合函数(UDTAGG函数)

自定义表值聚合函数(UDTAGG)可以把一个表(一行或者多行,每行有一列或者多列)聚合成另一张表,结果中可以有多行多列。理解:假设有一个饮料的表,这个表有 3 列,分别是 id、name 和 price,一共有 5 行。假设你需要找到价格最高的两个饮料,类似于 top2() 表值聚合函数。你需要遍历所有 5 行数据,结果是有 2 行数据的一个表。

2023-05-25 15:38:04 954

原创 Flink自定义函数之表值函数(UDTF函数)

用户定义的表函数将零个,一个或多个标量值作为输入参数。返回任意数量的行作为输出,返回的行可以包含一个或多个列。与标量函数区别:相同:都是将零个、一个或多个标量值作为输入参数差异:标量函数返回单个值作为输出,表值函数返回任意数量的行作为输出。

2023-05-18 17:40:06 354

原创 Flink自定义函数之聚合函数(UDAGG函数)

聚合函数:将一个表的一个或多个行并且具有一个或多个属性聚合为标量值。聚合函数理解:假设一个关于饮料的表。表里面有三个字段,分别是 id、name、price,表里有 5 行数据。假设你需要找到所有饮料里最贵的饮料的价格,即执行一个 max() 聚合。你需要遍历所有 5 行数据,而结果就只有一个数值。

2023-05-11 20:16:20 1043

原创 Flink自定义函数之标量函数(UDF函数)

flink本身给我们提供了大量的内置函数,已经能满足我们绝大部分的需求,但是如果确实是碰到了一些特殊的场景,无法满足我们的需求的时候,我们可以使用自定义函数来解决。自定义函数大致可以分为标量函数(UDF函数)、表值函数(UDTF函数)、聚合函数(UDAGG函数)和表值聚合函数(UDTAGG函数)。

2023-04-27 16:28:54 894

原创 Flink窗口函数

Flink窗口函数是指对数据流中的数据进行分组和聚合操作的函数。FlinkSQL支持对一个特定的窗口的聚合。例如有用户想统计在过去的1分钟内有多少用户点击了某个的网页。在这种情况下,我们可以定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行计算。在Flink中,窗口函数可以分为两种类型:时间窗口和计数窗口。时间窗口是指按照时间对数据流进行分组和聚合操作。计数窗口是指按照数据条数对数据流进行分组和聚合操作。

2023-04-21 15:27:34 592

原创 Flink时间属性

Flink支持三种与流数据处理相关的时间概念:Processing Time、Event Time和Ingestion Time。具体如下图所示:当前Flink仅支持Processing Time和Event Time。

2023-04-14 14:34:49 791

原创 Flink内存模型

flink内存按功能模块可分为taskmanager与jobmanger。

2023-03-30 18:00:28 609

原创 java多线程(三)之线程池

写在前面:当使用线程的时候就创建一个线程,这样实现起来非常简单,但是当并发的线程数量很多时,每个线程只执行一个时间很短的任务就结束了,而频繁的创建和销毁线程需要时间,会大大降低系统的效率。同时,线程的管理变得极为困难。因此在JAVA1.5中引入了Executor框架,将任务的提交和执行进行解耦。当需要线程时,只需要定义好任务,然后提交给线程池,而不用关心该任务是如何执行、被哪个线程执行以及什么时间

2017-11-26 23:25:58 317

原创 java多线程(二)之线程安全和线程同步

多线程提高了程序的性能,但是也引发了安全问题。例如多线程交替执行时,执行顺序的不同可能得出不同的结果,这不是我们想得到的结果,因此,如何保证线程安全是程序开发中经常遇到的问题。1.what is 线程安全?当多个线程访问一个对象时,如果不考虑这些线程在运行时环境的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就

2017-10-22 18:53:59 245

原创 openstack(一)之虚拟化简介

写在前面:云计算在服务器端提供集中的物理计算资源,然后将这些物理资源进行虚拟化,为用户提供一个隔离、安全、可信的虚拟工作环境。因此在学习云计算和openstack之前应先了解下虚拟化技术。1.what is 虚拟化本质上,虚拟化就是由位于下层的软件模块,根据上一层软件模块的期待,抽象出一个虚拟的软件或硬件接口,使上一层软件可以直接运行在与自己所期待的运行环境完全一致的虚拟环境上。在云计

2017-10-15 17:56:07 4115

原创 java多线程(一)之多线程基础

写在前面:我们知道程序在运行的时候,CPU在很多时候都是出于空闲状态,合理的利用空闲的CPU,这就是多线程编程。多线程能够提高程序的性能,因此多线程也是每个程序员必须掌握的技能。1.线程和进程的区别当前的操作系统是多任务操作系统,其中多线程就是实现多任务的一种方式。进程:进程是一个计算机程序的运行实例,包含了需要执行的指令,有自己的独立地址空间,包含程序内容和数据。不同进程的地址空

2017-10-15 03:10:04 278

原创 计算机网络基础(一)之OSI模型

写在前面:真正的投入到工作当中,还是希望继续坚持写博客,既可以回顾以前的知识,将其进行梳理总结,也可以学到很多以前没注意到的知识点。希望自己坚持下去,加油!1.计算机网络OSI模型模型把网络通信的工作分为7层。1至4层被认为是低层,这些层与数据移动密切相关。5至7层是高层,包含应用程序级的数据。每一层负责一项具体的工作,然后把数据传送到下一层。由低到高具体分为:物理层、数据链路层、

2017-09-01 00:05:09 4483

原创 设计模式学习(四)之建造者模式

写在前面:今天被调到了解决方案开发部,感觉比之前好多了,讲真还是开代码比较舒服。希望顺顺利利的吧。在平时的生活中,有很多复杂的事务,比如汽车是由发动机、方向盘、车座椅等组成,建造大楼是由打地基、建立框架等过程组成。建造者模式就如同盖楼一样,必须保证其流程不变,但每个流程实现的具体细节是经常变化的。1.what is 建造者模式?建造者模式将一个复杂对象的构建与表示分离,

2017-08-30 23:32:58 241

原创 java学习——java基础(十二)之内存泄漏、内存溢出及JVM内存调优

写在前面:人生中的又一个选择,不知道选的是对还是错。昨天写的很晚了,今天补完剩下的。1.what is 内存泄漏和内存溢出?内存泄露:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收,它始终占用内存。即被分配的对象可达但已无用。内存溢出:指程序运行过程中无法申请到足够的内存而导致的一种错误。内存溢出通常发生于OLD段或Perm段垃圾回收后,仍然无内存空间容纳新的Ja

2017-08-29 23:43:46 742

原创 java学习——java基础(十一)之JVM内存模型

在JAVA开发中,字节码是在JRE上运行的,而JVM则是JRE中的核心组成部分,它可以分析和执行JAVA字节码文件。虽然开发中并不需要了解JVM运行机制便可以开发出应用程序,但是掌握JVM的内部机制,则可以解决复杂的性能问题,也是JAVA程序员必备知识之一。1.什么是JVMJVM是Java Virtual Machine(Java虚

2017-08-28 22:18:50 438

原创 设计模式学习(三)之单例模式

写在前面:难得周末休息,今天偷懒下,就回顾下设计模式吧。单例模式是23种设计模式最简单的一种,但是越简单的东西越容易出现问题,今天我们就来一起学习下。1.what is 单例模式单例模式,就是在整个应用中保证只有一个类的实例存在。它属于创建型模式,提供了一种创建对象的最佳模式。特点:(1) 单例类只能有一个实例。(2) 单例类必须自己创建自己的唯一实

2017-08-27 23:20:22 228

原创 java学习——java基础(十)之类加载机制

写在前面:除了焦躁还是焦躁,唯有学习,才能静下心来。在开发中经常会出现ClassNotFoundException这个异常,那么类是否可以找到就与类加载机制关系有着密切关系。明白类加载机制能在平时的撸码中快速的找到类加载失败等问题。1.what is 类加载机制Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知C

2017-08-27 00:21:22 259

原创 java学习——java基础(九)之序列化

写在前面:月末惯例周六加班,不管怎样,今天至少有了一丝留下来的希望,希望顺顺利利,然后努力投入到工作中。在平时的java应用中,经常需要将对象在网络上进行传送,或者将对象的字节序列保存在文件中,此时,就需要进行序列化。那么,今天,我们就复习下序列化相关的一些知识。1.序列化和反序列化概念:序列化:把对象转换为字节序列的过程。反序列化:把字节序列恢复为对象的过程。

2017-08-25 23:21:10 270

原创 java学习——java基础(八)之java进阶及新特性

写在前面:又是周四的晚上,不知道前四天怎么过的,突然觉得时间原来可以过的这样快。明天又是约定好的日子,不知道前面的路是什么样子,真是命运多舛。今天不知道该怎么分类写了,就把一些java新特性和进阶的散碎知识点复习下吧。1.静态导入静态导入语法用于导入类的某个静态属性或方法。使用静态导入可以简化程序对类静态属性和方法的调用。语法:import static 包名.类名.静态属性|

2017-08-24 22:58:38 237

原创 java学习——java基础(七)之 IO

Java中经常会遇到文件的读写操作,这时就需要IO,JAVA中的IO关系比较复杂和繁琐,因此今天我们来复习下IO的相关知识。1.文件在学习IO流之前,先要了解文件,因为流的本质也是对文件的处理。File类描述的是一个文件或文件夹。(文件夹也可以称为目录)该类的出现是对文件系统的中的文件以及文件夹进行对象的封装

2017-08-23 23:47:32 219

原创 设计模式学习(二)之工厂模式(简单工厂+工厂方法+抽象工厂)

写在前面:说好的这周五就有结果呢,其实心里还是蛮忐忑的,不过自己选择的路,跪着也要走完。还是好好复习重新吧。工厂模式属于创建型模式。当我们在撸码的时候,如果在A类里创建一个B类的对象,那么A和B就产生了依赖关系,当后期需求发生变更时需要修改B,那么就需要修改所有相关的类。工厂模式正是为了解决该问题,目的是为了解耦。1.简单工厂模式简单工厂模式又叫做静态工厂方法模式,它不

2017-08-22 22:42:42 226

原创 java学习——java基础(六)之集合类实现原理

在上节中我们详细学习了Java中集合类的使用方法以及其各自特点,今天我们来学习这些集合类底层源码实现。1.ArrayList实现原理ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外

2017-08-21 23:19:47 257

原创 设计模式学习(一)之设计模式简介

设计模式概述

2017-08-21 00:06:23 194

微信登录源码

微信登录源代码

2017-03-07

微信、微博和qq分享和登录

微信、微博和qq分享和登录实例代码

2017-03-07

CloudSim学习笔记

CloudSim学习笔记,有详细的代码注解

2017-03-07

CloudSim扩展包

CloudSim扩展包,完美运行《云计算》代码,云计算仿真工具

2017-03-07

操作系统考研辅导教程part6

操作系统考研书~分享下。。很珍贵的。。PDF格式的

2011-03-31

操作系统考研辅导教程part5

操作系统考研书~分享下。。很珍贵的。。PDF格式的

2011-03-31

操作系统考研辅导教程part4

操作系统考研书~分享下。。很珍贵的。。PDF格式的

2011-03-31

操作系统考研辅导教程part3

操作系统考研书~分享下。。很珍贵的。。PDF格式的

2011-03-30

操作系统考研辅导教程part2

操作系统考研书~分享下。。很珍贵的。。PDF格式的

2011-03-30

操作系统考研辅导教程part1

操作系统考研书~分享下。。很珍贵的。。FTP格式的

2011-03-29

离散数学(高等教育出版社的)课件

很珍贵的离散数学PPT,更容易的去学习离散,很不错的!

2009-03-01

空空如也

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

TA关注的人

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