源码探索
文章平均质量分 73
探索大数据框架源码,收费文章迁移
orange大数据技术探索者
这个作者很懒,什么都没留下…
展开
-
flink Unsupported operand types: IF(boolean, NULL, String)
结果遇到了 Unsupported operand types: IF(boolean, NULL, String),根据报错反馈,很明显应该是没有对 null 自动转换(Spark 是会自动转的)if 的源码我以前看过,就是calcyte自动生成的,在org.apache.flink.table.planner.codegen.calls 的 IfCallGen 类。问题:业务方存储了NULL 字符串,需要处理为 null。原创 2024-04-22 20:16:31 · 473 阅读 · 1 评论 -
flink写入paimon流程代码
RowDataStoreWriteOperator继承TableWriteOperator,这个类又通过provider初始化了write,RowDataStoreWriteOperator类刚才用到了父类TableWriteOperator的write对象。以StoreSinkWrite.Provider是StoreSinkWriteImpl为例,那上面的write()实际调用就是这个类的write()最终走到了MergeTreeWriter的write(),判断内存是否满了,满了就溢出磁盘。原创 2024-01-30 14:19:44 · 512 阅读 · 0 评论 -
spark window源码探索
1. WindowExec 物理执行逻辑入口,主要doExecute()和父类WindowExecBase2. WindowFunctionFrame 窗框执行抽象,其子类对应sql语句的不同窗框其中又抽象出BoundOrdering类, 用于判断一行是否在界限内(Bound), 分为RowBoundOrdering和RangeBoundOrdering我们的UDAF在何时已什么顺序接受数据, 何时会被执行eval, 都取决于窗框内方法调用逻辑!原创 2024-01-29 13:57:15 · 1004 阅读 · 0 评论 -
Spark AQE源码探索
Spark AQE特性介绍和AQE源码的学习和分享原创 2024-01-19 10:49:35 · 940 阅读 · 0 评论 -
sql执行计划源码探索
大致的流程是这样的,先记好每个阶段,我们来一起探索每个阶段在哪里,又做了什么。原创 2024-01-28 13:05:16 · 846 阅读 · 0 评论 -
flink if函数false时对字符串做阶段的bug
我们之前在使用flink1.12时候也没有发现问题,但是最近一个1.15的任务出现了一个bug。最终在flink issues找到了这个bug,在这个issues里对代码做了修复。我们找了一下这个函数,发现代码确实是这样理解的,但是和官网描述明显不一致。flink官网对if函数就是我们正常的理解。本来应该返回cdefg,但是返回了cde。合并这个issues,问题解决。原创 2024-01-21 17:33:11 · 581 阅读 · 0 评论 -
Spark的几种AggMode
PartialMerge: 主要是对Partial返回的聚合缓冲区(局部聚合结果)进行合并,但此时仍不是最终结果,还要经过Final才是最终结果(count distinct 类型)在hive中,我们常用两次group代替count(distinct)来做优化,避免结果数据在一个reduce运行,但是spark其实帮我们做了优化。会根据读入的原始数据更新对应的聚合缓冲区,当处理完所有的输入数据后,返回的是局部聚合的结果。Final: 起到的作用是将聚合缓冲区的数据进行合并,然后返回最终的结果。原创 2020-04-18 22:15:34 · 258 阅读 · 1 评论 -
Spark Exchange节点和Partitioning
spark exchange和不同的分区方式原创 2024-01-28 12:51:17 · 1083 阅读 · 0 评论 -
spark的checkpoint的深入解析
目录checkpoint目录下有什么无效rdd的checkpoint怎么办开启配置注册清理事件弱引用回收线程特殊操作的意思一定可以被回收吗checkpoint目录下有什么无效rdd的checkpoint怎么办当我们使用checkpoint将rdd保存到hdfs文件时,如果任务的临时文件长时间不删除,长此以往,hdfs会出现很多没有用的文件,spark也考虑到了这一点,因此,用了一些取巧的方式来解决这种问题默认情况下,保存的文件一直都会放在dfs中,除非人工删除开启配置spark.cleaner原创 2020-08-07 11:02:27 · 339 阅读 · 1 评论 -
sparksql join方式
Broadcast Hash Join:适合一张很小的表和一张大表进行JoinShuffle Hash Join:适合一张小表(比上一个大一点)和一张大表进行JoinSort Merge Join:适合两张大表进行JoinCartesian Hash Join: 笛卡尔连接方式,性能很差NestedLoopJoin : 性能很差对应以下几个类,Spark会根据CBO和AQE来决定使用哪种join方式。原创 2020-05-14 16:23:30 · 951 阅读 · 0 评论 -
spark shuffle解析
依赖(血缘)的作用RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(即血统,依赖)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。spark的宽窄依赖RDD和依赖的父RDD关系有两种,就是宽依赖和窄依赖宽依赖: 多个子RDD的partition会依赖同一个父RDD的partition窄依赖:指的是每一个父RDD的Partition最多被原创 2020-07-14 15:30:46 · 260 阅读 · 1 评论