自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 order、sort、distribute和cluster by(Spark/Hive)

ORDER BY:完整查询结果的全局行排序。与SORT BYCLUSTER BY互斥,不能同时使用。示例SORT BY:只在每个分区内排序,局部排序结果不是全局有序。与ORDER BYCLUSTER BY互斥,不能同时指定。示例sort by和order by的区别:二者都是进行排序,区别在于sort by仅在partition中进行排序,而order by在全局进行排序,因此sort by无法保证整体有序性。:按指定列对数据进行重新分区,并不控制排序。

2025-06-25 00:06:56 1026

原创 Lookup join,何为Lookup?

既然是单流操作,Lookup join可以简单解释为左表记录作为事件输入到operator中,在operator内部提供了一个方法,对每条记录根据join条件去外部存储中(如mysql)查询并输出结果的操作。fetcher和collector属性表示由代码生成器生成的子类实现,实际内容在运行时在内存中生成具体的、可执行的实现代码。后输出,(重试开启时)会按照1s的时间间隔进行重试。类负责完成Lookup Join具体实现的实例化,该抽象类统一封装了批和流模式下Lookp join的公共逻辑。

2025-06-25 00:06:18 1077

原创 Temporal Join,一探究竟

flink sql的join分为Regular Joins、Interval Joins、Temporal Joins和Lookup Join。尽管官方文档中对上述几种join类型的概念和原理有很好的解释,但针对Temporal Joins仍有以下一些疑惑。带着上述问题,开始尝试从源码中(1.16)获取答案。temporal join两种时间属性的Operator实现类在方法中初始化。ps: 一件事找到正确入口便已成功了30%,那么这个入口是如何找到的?在源码中通过关键字硬硬硬搜出来的……

2025-06-25 00:05:51 757

原创 Hive decimal类型详解

Hive 中的 DECIMAL 类型基于 Java 的 BigDecimal,它用于在 Java 中。所有常规数字运算(例如+、-、*、/)和相关的 UDF(例如 Floor、Ceil、Round 等)都处理 decimal 类型。可以像处理其他数字类型一样进行 decimal 类型的转换。。因此,无论是4.004E+3(科学记数法)或 4004(非科学记数法)或两者的组合,都可以使用 DECIMAL。

2025-06-25 00:05:23 804

原创 合并小文件汇总(Hive/Spark)

合并小文件的原因:过多的小文件会导致HDFS上元数据负载增加。并且小文件也会导致计算性能下降。

2025-06-25 00:05:00 699

原创 Flink状态和容错-基础篇

但是和checkpoint的概念是不同的。流计算和批计算在数据源上最大的区别是,流计算中的数据是无边界的,数据持续不断,而批计算中数据是有边界的,在计算时可以一次性将数据全部拿到。状态大小受限于集群可用的内容大小。FileSystemCheckpointStorage,配置了checkpoint路径后将会使用此方式,在执行checkpoint期间,状态快照将写入配置的文件系统和目录中的文件中。state backend表示的是状态,而checkpoint和savepoint表示的是状态在某个时刻的快照。

2025-06-25 00:03:54 1214

原创 Flink内存配置

通过本文可以解决以下3个问题。

2025-06-25 00:03:23 1207

原创 自动类型转换导致join结果错误-问题记录

当表A或表B中存在id较长的值,在转换为double类型时会因精度原因改变原本的值,造成无法正确join的结果。因此当类型不同时建议手动在sql中显示将bigint类型转换成string类型,从而避免隐式类型产生意料之外的问题.假设在如下表A和B的join场景中id字段业务含义相同,但该字段在两个表中类型不同(A表中为bigint,B表中为String)。在底层执行join时,由于二者类型不同会自动将二者强转成double类型后在进行连接比较。

2024-07-10 21:07:33 512

原创 Hive/Spark窗口函数

本文介绍了Hive和Spark SQL中的窗口函数使用,重点分析了窗口函数三要素(聚合函数、over()子句和窗口规范)以及各类窗口函数(如ROW_NUMBER、RANK等)的功能特点。文章通过实例演示了不同排名函数在分组排序中的应用,并详细解释了ROWS和RANGE两种窗口框架的差异:ROWS基于物理行偏移,RANGE基于值范围。最后通过员工薪酬分析案例,展示了RANK和DENSE_RANK等函数在实际查询中的效果,帮助读者理解窗口函数在数据分析中的应用场景。

2024-07-09 21:02:55 1174

原创 Flink作业执行之 4.JobGraph

前文了解了由Transformation到StreamGraph的过程,StreamGraph即作业的逻辑拓扑结构。生成逻辑结构后,接下来的操作往往是对逻辑结构的优化。在很多组件中都是这样的处理,如hive、spark等都会执行“逻辑计划->优化计划->物理计划”的处理过程。从StreamGraph到JobGraph的过程中很重要的事情是将节点组成节点链。在方法中调用方法完成JobGraph实例的生成。接口根据提供的配置执行管道。接口内只有一个execute方法。

2024-06-29 13:32:12 1606

原创 Flink作业执行之 3.StreamGraph

在前文了解Transformation和StreamOperator后。接下来Transformation将转换成StreamGraph,即作业的逻辑拓扑结构。在方法中调用方法生成实例。由负责生成。实例中封装了前面生成的Transformation集合。方法核心逻辑如下,首先创建一个空的StreamGraph实例。然后通过遍历transformations集合,依次调用transform方法完成StreamGraph中节点和边实例的创建,并将节点和边加入到StreamGraph中。

2024-06-14 13:09:48 1349 1

原创 Flink作业执行之 2.算子 StreamOperator

前文介绍了Transformation创建过程,大多数情况下通过UDF完成DataStream转换中,生成的Transformation实例中,核心逻辑是封装了SimpleOperatorFactory实例。UDF场景下,DataStream到Transformationg过程中,SimpleOperatorFactory实例的创建过程大致如下伪代码所示。这里的UDF可以简单理解为需要我们自己传入对应Function实现类的操作,如map、filter等。问题:StreamOperator是什么?

2024-06-12 09:35:10 1725

原创 Flink作业执行之 1.DataStream和Transformation

在使用Flink完成业务功能之余,有必要了解下我们的任务是如何跑起来的。知其然,知其所以然。既然重点是学习应用程序如何跑起来,那么应用程序的内容不重要,越简单越好。WordCount示例作为学习数据引擎时hello word程序,再合适不过。接下来便以任务执行顺序为线索开启对源码逐步学习。为了使示例代码足够纯粹(直接复制粘贴后即可跑起来的那种),因此在示例中直接使用List数据作为Source。最后,计划将自己学习的过程以系列文档的形式作为记录。

2024-06-06 20:45:17 1412 1

原创 FlinkSql使用ES sink并指定主键,为什么数据还是会被覆盖?

源码基于flink 1.14.4根据官方文档中对自定义sink的描述,connector sink的的工作原理如下元数据的内容由create table语句所定义,通过的实例表示,该实例表示Catalog中未解析的元数据,包含可以在create table语句中表示的所有特征,框架将其解析为实例(一个经过验证的CatalogTable),然后再将其传递给,最终传入到,用于insert into语句的写入。负责提供connector的具体实现逻辑。用于将的元数据转化为。其接口中仅有一个方法,返回实例。

2024-05-05 22:17:24 1734 2

原创 Spark pivot数据透视详解

上述sql中根据subject和name进行旋转,并对score字段聚合计算,表中全部字段都参与了旋转和聚合,相当于是对全表进行分组。上述sql中指定按subject列进行旋转并对socre聚合,将按照原表中剩下的name字段进行分组。cube方法将得到字段全部组合结果进行分组分组,分别得到(A,B,C),(A,B),(A,C),(B,C),(A),(B),©以及全表的分组。rollup方法将按照从左到右的依次忽略最右侧字段结果进行分组,分别得到(A,B,C),(A,B),(A)以及全表的分组。

2024-04-24 20:12:39 1166 1

原创 事件时间+时间窗口,最后一个窗口不执行问题踩坑与源码分析

举例说明,在按小时的滚动窗口中,假设当前时间是12:05点,按照正常预想13:00时窗口会触发执行,但是在12:00到13:00的时间段内,最后一个事件的时间是12:50,之后再未产生新的事件,那么在13:00的时候,窗口并不会触发执行,只有当后续再产生新的事件,并且事件时间大于13:00时,12-13的窗口才会执行。在实际开发过程中可能会带来一些问题,当事件不是源源不断的产生时,最后一个窗口不执行,影响结果。示例代码见末尾。

2024-04-07 09:46:14 926 1

原创 HiveSQL如何生成连续日期剖析

情景假设:有一结果表,表中有start_dt和end_dt两个字段,,想要根据开始和结束时间生成连续日期的多条数据,应该怎么做?直接上结果sql。(为了便于演示和测试这里通过模拟一个结果表数据)如果对涉及到的函数和语法不是特别了解,直接看到上述结果可能有点懵,接下来换个形式理解下,即如下sql如上sql结构比较简单,即t1表和t2表进行笛卡尔集,t1是原始表只有1行数据,但是结果是6行数据,因此关键点是t2的结果。

2024-04-07 09:42:12 1529

原创 kafka-consumer-groups.sh

通过kafka-consumer-groups.sh 脚本查看或变更消费组的信息。消费组一共有 Dead 、Empty 、PreparingRebalance 、CompletingRebalance 、Stable 这几种状态,正常情况下, 一个具有消费者成员的消费组的状态为Stable 。可以通过 state 参数来查看消费组当前的状态, 示例如下:./kafka-consumer-groups.sh --bootstrap-server 169.163.100.10.208.180.222.

2023-10-31 16:38:00 1933

原创 Hive分位数函数percentile和percentile_approx区别

分位数函数percentile和percentile_approx区别

2022-10-24 16:56:48 6037

原创 HiveQL和SparkSQL中的正则

hive和spark中的正则

2022-10-24 16:54:29 6007

原创 spark-sql脚本-e和-f两种方式转义处理的区别

spark-sql脚本-e和-f两种方式转义处理的区别

2022-08-21 11:38:01 646

原创 select字段列表中无法使用计算出来的值进行再次计算

select字段列计算出来的结果无法在当前列中再次使用,需要嵌套子查询才可以使用

2022-08-21 11:30:20 634

原创 Left join结果却是Inner join?(Spark/Hive)

join中on条件和where条件中区别、以及多个join的执行顺序

2022-08-21 11:21:12 4461

原创 Hive collect_list和concat_ws函数null值处理

collect_list和concat_ws函数null处理

2022-08-21 11:07:48 5815

原创 Hive group by或partition by中null值处理

在group by或partition by中如果字段列中包含null,null会被正常分组。

2022-08-21 10:54:39 2467

原创 期望值、方差和标准差分别描述了什么?

期望值、方差和标准差的定义和描述了什么。

2022-07-30 17:21:45 4760 1

原创 hadoop dfs、hadoop fs和hdfs dfs的区别

执行 hdfs 命令后可以看到如下帮助信息:Usage: hdfs [--config confdir] [--loglevel loglevel] COMMAND where COMMAND is one of: dfs run a filesystem command on the file systems supported in Hadoop. classpath prints the classpath nam

2022-04-14 10:56:11 4208

原创 5步完成IDEA自定义TODO和快捷键设置

文章目录5步完成IDEA自定义TODO和快捷键设置5步完成IDEA自定义TODO和快捷键设置在setting中选择TODO,先设置Pattrens设置Filters,选择第一步新增的Patterns完成以上两步骤后,自定义的TODO已经设置完成,但是还无法通过像默认的todo一样,输入todo+tab键快捷输入,需要设置以下步骤选择Live Templates,并增加Live Template如下图所示进行设置设置Template生效的文件类型以上步骤设置完

2022-01-24 11:11:16 5650

原创 Hadoop Configuration 类加载属性解析

文章目录Hadoop Configuration 类加载属性解析1. 疑问1.1. 结论2. 从源码中一探究竟2.1. `new Configuration()`时发生了什么2.2. `configuration.get("fs.defaultFS")`时发生了什么Hadoop Configuration 类加载属性解析以下过程在3.2.2版本的源码上分析1. 疑问当我们创建HDFS client时,最简单的做法如下:Configuration configuration = new Conf

2021-12-25 16:16:25 2849

原创 SUM(A)+SUM(B)和SUM(A+B)结果不同?

null值在聚合函数中的处理和影响

2021-12-14 13:32:42 3148

原创 基于MeteStore查看hive磁盘占用

文章目录1. 相关元数据表介绍2. 示例关于hive中Statistics特性请查看Statistics in Hive1. 相关元数据表介绍DBS 表用于存储hive数据库信息, 包含数据库名、文件系统路径等。通过DB_ID字段与其他表相关联。TBLS 表用于存储Hive表、视图、索引表的基本信息,包含表名、表类型(外部表等)、所属数据库id、创建时间等信息。该表中有全部hive表信息TABLE_PARAMS 表存储全部hive表的一些额外信息(表属性以及其他统计信息)。该表只有3个

2021-12-05 21:46:26 533

原创 Git 使用小结

文章目录GIT1. 仓库1.1. 创建本地仓库2. 暂存区2.1. 得到上一次commit后的所有改动详情2.2. 提交修改2.3. 查看commit历史记录3. 关于远程仓库3.1. 位置3.2. 创建远程仓库3.3. origin3.4. 连接一个远程仓库3.5. 整合远程分支中的内容到本地分支3.6. 将本地分支推送到远程仓库4. GIT分支4.1. 本地创建新分支4.2. 暂时保存更改4.3. checkout到指定分支4.4. 分支的模式4.4.1. release分支4.4.2. hotfix分

2021-11-21 15:01:18 910

原创 Process

在编写Java程序时,有时候需要在Java程序中执行另外一个程序。Java提供了两种方法用来启动其它程序:1. 使用Runtime的exec()方法2. 使用ProcessBuilder的start()方法不管在哪种操作系统下,程序具有基本类似的一些属性。一个程序启动后就是程序操作系统的一个进程,进程在执行的时候有自己的环境变量、工作目录。能够在Java中执行的外部程序,必须是一个实...

2021-01-26 00:39:55 1205

原创 Java Timer使用

Timer类是一种线程设施,可以用来实现某一个时间或某一段时间后安排某一个任务执行一次或定期重复执行。该功能和TimerTask抽象类配合使用。TimerTask抽象类实现了Runnable接口,用于实现由Timer安排的一次或重复执行的某个任务。每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否则会延迟后续的任务执行。java.util.Timer类1、vo...

2021-01-18 10:47:35 384

原创 YARN基本架构

文章目录1. YARN基本架构1.1. YARN基本组成结构1.2. YARN工作流程1. YARN基本架构YARN是Hadoop2.0中的资源管理系统,基本设计思想是将MRv1中的JobTracker拆分成两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序持有的ApplicationMaster。ResourceManager:负责整个系统的资源管理和分配ApplicationMaster:负责单个应用程序的管理1.1. YARN基本组成结构YARN总体上仍然

2020-10-30 00:00:45 3378

原创 Post 方式请求 Nginx 返回413状态码

Syntax client_max_body_size size; Default client_max_body_size 1m; Context http, server, location 设置客户端请求主体的最大允许大小,在“Content-Length”请求头字段中指定。如果请求中的大小超过配置的值,则将413(请求实体太大)错误返回给客户机。请注意浏览器无...

2020-10-24 21:38:11 2078

原创 查看 hdfs 上文件的文件状态、所属块信息等

执行 hdfs fsck 可以得到如下帮助信息:Usage: hdfs fsck <path> [-list-corruptfileblocks | [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]] [-includeSnapshots] [-storagepolicies] [-blockId <blk_Id>] <path> start che

2020-10-24 21:35:38 2803

原创 HBase Compaction

文章目录1. Compaction1.1. 基本原理1.2. Compaction 的核心作用1.3. Compaction 基本流程1.3.1. Compaction 触发时机1.3.2. 待合并 HFile 集合选择策略1. CompactionCompaction是以Store为单位进行的Compaction使读取延迟更加稳定,但是读取时间产生了很大的毛刺Compaction 操作的主要源头来自flush操作根据待合并HFile文件的选择策略可以得知,正在进行Compaction的HFi

2020-10-21 23:59:12 2710 1

原创 RegionServer 宕机恢复流程

根据上节的基本原理,本节介绍HBase故障恢复的具体流程,重点讨论RegionServer的宕机恢复。Master检测RegionServer宕机HBase使用ZooKeeper协助Master检测RegionServer宕机。所有RegionServer在启动之后都会在ZooKeeper节点/rs上注册一个子节点,这种子节点的类型为临时节点(ephemeral)。临时节点的意义是,一旦连...

2020-10-21 23:55:47 1515 1

原创 HBase故障恢复基本原理

Master故障恢复原理在HBase体系结构中,Master主要负责实现集群的负载均衡和读写调度,并没有直接参与用户的请求,所以整体负载并不很高。HBase采用基本的热备方式来实现Master高可用。通常情况下要求集群中至少启动两个Master进程,进程启动之后会到ZooKeeper上的Master节点进行注册,注册成功后会成为ActiveMaster,其他在Master节点未注册成功的进...

2020-10-21 23:54:56 1310 1

空空如也

空空如也

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

TA关注的人

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