- 博客(41)
- 收藏
- 关注
原创 Spark内存迭代计算
窄依赖:父RDD的一个分区数据全部发往子RDD的一个分区宽依赖:父RDD的一个分区数据发往子RDD的多个分区,也称为shuffle。
2025-02-26 19:18:24
427
原创 redis是如何保证数据安全的?
redis的内存读写操作是单线程的,保证操作的线程安全。redis6之后,redis的读写操作是多线程的,但核心的内存计算操作仍然是单线程的。
2024-12-31 20:34:48
667
原创 设计模式-创建型模式-工厂模式
工厂模式提供了一种创建对象的方法,使得创建对象的过程与使用对象的过程相分离。使用工厂模式,将对象的创建逻辑封装再一个工厂类中,而不是再客户端代码中直接实例化对象,提高了代码的可维护性和可拓展性。
2024-12-29 19:59:29
646
原创 Flink状态编程
Flink处理机制的核心就是“有状态的流处理”,在某些情况下,一条数据的计算不仅要基于当前数据自身,还需要依赖数据流中的一些其他数据。这些在一个任务中,用来辅助计算的数据我们就称之为这个任务的状态。
2024-12-29 19:16:17
1255
原创 Flink的多流转换(分流-侧输出流、合流-union、connect、join)
在实际应用中,我们可能要将多个不同来源的数据连接合并在一起进行处理,也有可能要将一条流拆分成多条流进行处理,这就涉及到了Flink的多流转换问题。简单来说,就是分流和合流两大操作,分流主要通过侧输出流实现,合流的算子就比较丰富了,有union、connect、join等。
2024-12-28 19:20:02
1098
原创 Flink窗口window详解(分类、生命周期、窗口分配器、窗口函数、触发器)
时间窗口:滚动(窗口大小)、滑动(窗口大小、滑动步长)、会话(会话超时时间)计数窗口:滚动、滑动。
2024-12-27 17:06:30
1353
原创 Flink如何处理迟到数据?
在flink中进行窗口计算时,由于乱序流数据的问题,往往会出现迟到数据,迟到数据未参与所属窗口的计算会对计算结果的准确性产生影响,对此,Flink有如下三种方法来保障结果的准确性。
2024-12-27 15:38:47
1203
原创 Flink的Watermark水位线详解
Flink有如下三种时间语义:在实际应用中,一般会采用事件时间语义。而正如前面所说的,事件时间语义需要等窗口的数据全部到齐了,才能进行窗口计算。那么,什么时候数据就都到齐了呢?这里我们引入水位线的概念。二、为什么要引入水位线?不能用数据本身带有的时间戳来驱动吗?如果用数据本身所带有的时间戳来进行驱动,将会面临如下问题:(1)如果面临聚合计算,数据本身所带有时间戳也会参与聚合,则聚合之后一批数据只会输出一个结果,那么下游的数据量就会变少,进而影响时间进度控制的精细程度。
2024-12-26 14:06:23
1542
原创 Flink的三种时间语义
在流数据处理中,一个很重要也很常见的操作就是窗口计算。窗口计算与时间密不可分。窗口的计算在分布式流处理环境中,可能会面临如下问题:数据由上游发送到下游的过程中,可能是跨节点传输的,而网络传输存在延迟,数据到达下游节点的时间则有先有后,则会产生乱序数据问题,如8点59分59秒产生的数据可能比9点01分01秒产生的数据后到达下游节点,那么它究竟是属于8-9点的时间窗口,还是9-10点的时间窗口呢?这就首先需要我们明确Flink中的不同时间语义。
2024-12-26 10:56:32
655
原创 Hbase的特点、特性
hbase中存储的表的每一行可以有不同数量的列(在关系型数据库的二维表中,某一行的某一个列值不存在则会标记为null,这在顶层是存储了空值的;而在hbase中,逻辑上的空单元格在底层也根本不存储,因此每一行数据所具有的列是疯狂变化的。数据存储整体有序,按照RowKey的字典序排序,RowKey为byte数组。Hbase是分布式、可拓展的,以hdfs为数据存储。Hbase是一种非关系型数据库,它的存储基于hdfs,是一种。映射是指非关系型数据库的key-value结构。hbase的列族使得其具有多维特点。
2024-12-25 19:47:00
412
原创 Flink中并行度和slot的关系——任务和任务槽
Flink的每一个TaskManager是一个JVM进程,在其上可以运行多个线程(任务task),那么每个线程可以拥有多少进程资源呢?任务槽就是这样一个概念,对taskManager上每个任务运行所占用的资源做出明确的划分,即每个任务槽就表示了TaskManager拥有计算资源的一个固定大小的子集。
2024-12-25 19:46:17
1226
原创 Hadoop组成概述
Hadoop主要由HDFS、Mapreduce、yarn三部分组成,hdfs负责分布式文件数据的存储,yarn复杂资源的调度,mapreduce负责运算。
2024-12-24 18:42:44
214
原创 MapReduce工作流程+Shuffle机制
(1)数据切片Split。,默认情况下,一个切片大小=块大小。切片不是针对整体数据集,而是针对每一个文件单独切片,所以会有小文件问题(CombineTextInputFormat可用于小文件过多的场景,可以将多个小文件在逻辑上划分到一个切片中)。(2)map。每个maptask并行执行,调用map方法对数据进行业务逻辑处理,并输出kv键值对。(3)shuffle。
2024-12-24 18:41:27
473
原创 Hive建表语句详解
在进行数据的持久化存盘和网络传输时,需要对数据进行序列化处理,也就是将内存中的对象转换为字节码序列;hive是分布式框架,涉及到不同节点之间的网络传输,需要为数据指定序列化和反序列化方法,即指定SERDE(Serializer 和 Deserializer)。如在使用flume将数据从Kafka读取到hdfs上时,读取的数据是json格式,则不同通过delimited关键字指定分隔符,此时需要用serde关键字,告诉hive数据格式, hive才能正确解析。添加sorted by关键字,创建分桶排序表。
2024-12-21 21:25:44
1472
原创 Hive解决数据倾斜
数据倾斜(Data Skew)问题是指在分布式计算系统中,由于某些数据分布不均匀,导致某些节点处理的数据量远远大于其他节点,从而引起性能瓶颈、计算延迟甚至计算失败的现象。在Hive中,在处理或者问题时,如果分组字段或者连接字段存在分布不均匀,即某个key或者某些key的数量远超其他key,就会造成在按key分区发往reduce端的时候,某个reduce接收了大量的数据,所需的处理时间也会远超其他reduce,成为整个任务的瓶颈。
2024-12-20 16:43:35
1314
原创 notepad++快捷键-多行编辑中如何使所有行的光标都向后移动一个单词的长度(每行单词长度不一定一致)
在使用notepad++进行多行编辑(多行光标移动一个单词长度)时(将下图由左边变为右边),在使用Ctrl+左键拖拽选中多行后,想要将每行的光标向后移动一个单词的长度(每行的单词长度不一样),查阅官方文档是使用快捷键Ctrl+向右方向键,但是失败了,使用这个快捷键光标会自动变为一个。因此要所有行的光标向后移动一个单词的长度,由于单词长度不一致,列模式下就无法实现,需要打开多编辑模式。启用多编辑模式后,通过Ctrl+鼠标左键点击每一个单词的左侧。就可以将所有光标右移一个单词的长度了。
2024-12-20 16:43:04
1023
原创 Hadoop2.X和3.X常用端口号
hadoop2.x hadoop3.x web端访问hdfs 50070 9870 web端访问yarn 8088 8088 历史服务器 19888 19888 内部通信端口 8020/9000 8020/9000/9820
2024-12-18 19:00:49
327
原创 Hive函数-UDTF-炸裂函数-lateral view
在hive中,udtf(user defined tableGenerating function)是指接收一行数据,输出一行或者多行数据的函数,也称制表函数,通常指的是炸裂函数。
2024-12-18 18:45:43
958
原创 Hive内部表和外部表的区别
Hive是基于Hadoop的数据仓库工具,hive本身并不存储数据,而是将表数据文件存储在hdfs中,hive能将此数据文件映射为一张表,并提供解析编译sql的功能,将用户提交的sql转换为mr job,在mapreduce引擎上对数据进行查询、统计和分析。对于内部表,drop会删除元数据以及实际表数据,因此内部表不适合和其他表共享数据;而外部表只会删除它的元数据,hdfs上的表数据不会被删除,因此更安全,更适合共享数据。Hive管理内部表的元数据以及实际的表数据,而对于外部表只管理它的元数据。
2024-12-16 13:08:17
551
原创 Redis缓存穿透、缓存击穿、缓存雪崩
缓存穿透可以理解为同时穿透了redis(缓存)层和mysql(数据库)层。具体而言,当客户端请求查询一个的数据时,在redis缓存中无法命中时就会去查询数据库,查不到数据也无法写入缓存中,这将导致这个不存在的数据的每次请求都将频繁访问数据库,高并发场景下将造成缓存穿透,压垮数据库,导致系统崩溃。
2024-12-13 16:34:34
132
原创 数据库设计规范——范式
范式是指数据表设计的基本原则、规则。范式存在不同的等级,不同等级之间是层层递进的,如满足了第二范式就一定满足了第一范式。范式的等级越高,数据的冗余程度越低,适合在增删改更多的场景下,用来保证数据的一致性,更适合OLTP型任务;但在复杂数据查询中所要join的表就越多,数据查询的性能就越低,不适合OLAP型任务。
2024-12-07 14:15:40
289
原创 HDFS的读写流程
(1)客户端向namenode发出写数据请求,namenode会对用户写权限+写入目录树路径是否存在两者进行校验,校验通过则响应可以上传文件;(2)客户端请求上传第一个block文件块(128M),请求namenode返回写入的datanode(3)假设是三副本机制,则namenode会返回dn1、dn2、dn3三个节点,表示可以采用这三个节点存储数据(namenode选取datanode时综合考虑距离最近和负载均衡)
2024-12-04 21:32:44
415
原创 Flink的容错机制总结
基本思想是将事务与检查点绑定,用一个事务来进行数据向外部系统的写入,具体而言,当Sink任务遇到barrier时,在保存当前状态的同时开启一个事务,通过这个事务将数据写入。(1)输入端:输入端主要用来保证发生故障时,数据不丢,因此数据源输入端只要能够重放数据即可,如Kafka的偏移量,这样就至少达到了AT-LEAST-ONCE一致性语义的要求,在此基础上才能实现端到端的EXACTLY-ONCE。=> 当所有任务都恰好处理完同一个数据输入的时候,我们就对这一时间点的所有任务的状态进行保存。
2024-12-04 19:38:03
919
原创 Flume 启动卡住(netcat -> console)
source:netcat sink: console channel: memory问题:在启动flume时卡在如图所示的地方。解决方法:进入到配置文件conf目录下,编辑log4j2.xml,修改LogFile为Console即可,如果有绑定异常,可以重启虚拟机。重新运行启动命令,成功绑定:
2024-11-25 19:59:42
346
原创 MySQL JDBC 连接常见参数
在使用 JDBC(Java Database Connectivity)连接数据库时,连接 URL 中可以包含许多参数来配置连接的行为。下面是一些常见的 JDBC 连接参数及其说明,适用于 MySQL.
2024-11-14 19:18:08
819
原创 hive与mysql8.0的安装配置中,进行初始化报错问题
MySQL 公钥检索错误,MySQL 8.0 默认启用了公钥检索(public key retrieval)功能,而有时需要在 JDBC 连接 URL 中明确指定允许公钥检索。: 在你的 JDBC 连接 URL 中,添加。
2024-11-13 20:56:36
459
原创 MySQL 8.0 新特性 —— 窗口函数 详解
窗口函数介于单行函数和分组函数之间。与分组函数相比,窗口函数对记录进行分组聚合之后,将聚合结果置于每一条记录之中。窗口函数根据窗口是否可变可以分为静态窗口函数和动态窗口函数。
2024-05-14 21:46:14
1143
2
原创 Decimal模块对dataframe列进行四舍五入
Decimal('0')保留整数,不要小数(0.0一位小数;0.00两位小数);先进行Decimal实例化,然后通过quantize方法四舍五入保留整数位。(2)假设对dataframe的average_age列应用。apply方法可以对该列的每个值都进行四舍五入操作。ROUND_HALF_UP四舍五入,对.5也进一。
2024-01-16 17:13:47
831
1
原创 mysql中的group_concat函数用法
group_concat(distinct product order by product separator ',') 将不同日期的不同产品按照字典序顺序进行连接,分隔符是‘,’。: 可选的关键字,用于指定升序(默认)或降序排序。: 可选的子句,用于限制连接后的字符串的长度。将多行中的值连接成一个单一的字符串。子句一起使用,以便在每个组内进行值的连接。: 可选的关键字,用于指定仅包括唯一值。是 MySQL 中的一个函数,它。在此示例中,它将为每个唯一的。: 用于指定连接后的值的。
2023-12-14 15:08:37
393
1
原创 pandas中reset_index()函数的参数及使用
默认为False。如果为True,则修改原始DataFrame,而不是返回一个新的DataFrame。:用于指定新的索引列的名称。如果提供了多个级别的新名称,可以传递一个元组,每个级别对应一个名称。如果为True,则删除索引列,而不是将其作为数据列添加到DataFrame中。:要重置的层级(可以是索引的名称、索引的位置或索引的列表)。默认情况下,将重置所有层级的索引。默认drop=False,将Name重新还原为了普通列。:指定要用作列级别的级别的名称或级别编号。:如果指定,用于替换丢失的列级别的值。
2023-12-13 13:33:53
5273
原创 reset_index()函数,以及在groupby后使用reset_index()函数的作用
当你对数据框进行一些操作,如set_index、groupby等,之后,会导致数据框索引发生变化(比如原来是整数索引,现在变为了层次化索引),reset_index()可以帮你重新设置索引,将之前的索引还原成数据框中的普通列,并生成一个新的整数索引。打印结果如下所示,将普通列Name设置为了索引列, 通过reset_index将其还原为了普通列,并重新添加了整数索引列。打印结果如下所示:groupby会导致分组变量Name自动成为索引列,通过reset_index将其还原。
2023-12-12 13:47:42
4291
原创 dataframe 中列中字符串的首字母大写 字符串首字母大写(title()和 capitalize()函数区别)
【代码】dataframe 中列中字符串的首字母大写 字符串首字母大写(title()和 capitalize()函数区别)
2023-12-05 19:56:51
178
1
原创 mysql 计算字符串长度方法 char_length(str) 和 length(str)
而length(str)返回字符串 str的字节数,因此如果str中含有特殊字符,两者可能会返回不同的结果。对于SQL表,用于计算字符串中字符数的最佳函数是。返回结果为 2,因为该字符串包含 2 个字节。
2023-12-05 16:56:08
600
1
原创 DataFrame 去除重复行(移除重复数据)drop_duplicates()方法
其中subset是根据哪些列来查找重复项,inplace表明是否原地修改(false即不原地修改,而是返回一个dataframe)dataframe中去除重复行数据使用drop_duplicates方法。在筛选玩浏览了自己博客的作者后,需要进行去重,具体如下。例题:leetcode 1148题。
2023-12-04 21:30:07
1392
原创 pandas 过滤数据 ,布尔型数组索引Series, DataFrame
过滤Series中或DataFrame列中数据,在pandas中,可以用isin(values)函数。
2023-12-02 19:46:07
129
1
原创 pandas 筛选 DataFrame数据的两种方式
注意对列的筛选有一个易错点,需要嵌套一层中括号, 不能写作['name', 'population', 'area']其中第一个括号是对行的筛选,第二个括号是对列的筛选(world['area']也可写作world.area)pandas筛选dataframe主要有 df[][] 和 df.loc[ , ]两种方式。二、df.loc[ , ] (注意这里也是中括号!(1) 对单条件的筛选,如果只要求筛选面积。逗号前是对行的筛选,逗号后是对列的筛选。(1) 对单条件的筛选。(2)对多条件的筛选。
2023-12-01 18:53:41
1058
1
原创 pd.DataFrame格式更改列的数据类型(astype方法)
3. 而students['grade']返回的是Series格式,因此用 students['grade'] = students['grade'].astype(int) 来更改时可能会出错,这里首先应该将列转换为浮点数,然后再将其转换为整数。2. students[['grade']] = students[['grade']].astype(int),students[['grade']]是包含grade列的Dataframe格式。1. 转换数据类型用astype方法,可以通过两种索引方式。
2023-11-30 10:12:29
1090
原创 pd.DataFrame索引列的两种索引方式的区别,students[‘grade‘]和students[[‘grade‘]]的区别
3. students[['grade']]是个只包含一列的Dataframe,但可以在处理多列时保持一致性,因为无论选择一列还是多列,结果始终是一个 DataFrame。2. students[['grade']]返回的是包含grade列的pd.Dataframe格式。1. students['grade']返回的是pd.Series格式。
2023-11-30 09:53:03
249
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人