
源码
文章平均质量分 94
董可伦
博主曾获2014年全国数学建模竞赛国家一等奖;有八年大数据经验,大数据领域专家、优快云博客专家。Apache Hudi Active Contributor,喜欢开源,擅长并乐于分享Flink、Hudi、Spark等大数据领域的技术
展开
-
Spark 源码 | 脚本分析总结
最初是想学习一下Spark提交流程的源码,比如 Spark On Yarn 、Standalone。之前只是通过网上总结的文章大概了解整体的提交流程,但是每个文章描述的又不太一样,弄不清楚到底哪个说的准确,比如Client 和 CLuster 模式的区别,Driver到底是干啥的,是如何定义的,为了彻底弄清楚这些疑问,所以决定学习一下相关的源码。因为不管是服务启动还是应用程序启动,都是通过脚本提交的,所以我们先从分析脚本开始。原创 2025-02-10 16:29:02 · 1552 阅读 · 0 评论 -
Hudi 源码 | 索引总结 - tag/tagLocation
接上篇文章和之前的总结的源码文章,本文总结源码 tag/tagLocation ,对应功能:根据索引信息判断记录是否存在,如果不存在,代表是新增数据,如果记录存在则代表是更新数据,需要找到并设置 currentLocation。tag/tagLocation :根据索引信息判断记录是否存在,如果不存在,代表是新增数据,如果记录存在则代表是更新数据,需要找到并设置 currentLocation。tagLocation 会利用上篇文章讲的写到 parquet 文件中的 最大值最小值和布隆索引。原创 2024-07-15 14:17:18 · 218 阅读 · 0 评论 -
Hudi 索引总结 - Parquet布隆过滤器写入过程
上篇文章提到 :索引的逻辑主要是根据 parquet 文件中保存的索引信息,判断记录是否存在,如果不存在,代表是新增数据,如果记录存在则代表是更新数据,需要找到并设置 currentLocation。对于布隆索引来说,这里的索引信息其实是布隆过滤器,本篇文章主要是先总结布隆过滤器是如何保存到 parquet 文件中的(主要是源码调用逻辑)。原创 2024-07-10 10:09:10 · 299 阅读 · 0 评论 -
Hudi 写入流程(图)
主要为之前总结的源码文章补充流程图。总结一下整体流程。原创 2024-07-05 11:13:56 · 297 阅读 · 0 评论 -
Flink源码分析 | 读取HBase配置
上面文章中总结了Flink 获取 HBase 配置的逻辑和优先级,但是并没有对源码进行分析,本文主要是补充这一部分的源码分析。原创 2023-12-18 19:51:32 · 1198 阅读 · 0 评论 -
Flink 源码阅读笔记(3)- Flink 底层RPC框架分析
对于Flink中各个组件(JobMaster、TaskManager、Dispatcher等),其底层RPC框架基于Akka实现,本文着重分析Flink中的Rpc框架实现机制及梳理其通信流程。由于Flink底层Rpc是基于Akka实现,我们先了解下Akka的基本使用。Akka是一个开发并发、容错和可伸缩应用的框架。它是的一个实现,和Erlang的并发模型很像。在Actor模型中,所有的实体被认为是独立的actors。actors和其他actors通过发送异步消息通信。Actor模型的强大来自于异步。转载 2023-12-09 09:40:57 · 101 阅读 · 0 评论 -
Hudi Flink SQL源码调试学习(二)- Transformation/StreamOperator总结 - StreamGraph和JobGraph的生成过程
和上篇文章Hudi Flink SQL源码调试学习(一)一样:本着学习hudi-flink源码的目的,利用之前总结的文章中的代码进行调试,记录调试学习过程中主要的步骤及对应源码片段。本文主要总结 Flink 的, 写Hudi与的关系以及Hudi有哪些自定义的,还有Flink的四层执行图以及和JobGraph的生成构建过程。DummySink。原创 2023-08-29 09:10:53 · 269 阅读 · 0 评论 -
Flink 源码阅读笔记(1)- StreamGraph 的生成
Flink 源码阅读笔记(1)- StreamGraph 的生成StreamGraph 的生成转载 2023-08-25 15:41:58 · 187 阅读 · 0 评论 -
Hudi源码 | Insert源码分析总结(二)(WorkloadProfile)
Hudi源码 | Insert源码分析总结(一)(整体流程),继续进行Apache Hudi Insert源码分析总结,本文主要分析上文提到的关于的分析一共就这么多,主要是统计record中每个分区路径对应的insert/upsert数量以及upsert数据对应的fileId和,先持久化到.inflight文件中,然后给后面的使用。关于统计的这些信息是如何在中使用的,我们放在下篇文章中分析。原创 2022-11-17 07:00:00 · 3126 阅读 · 81 评论 -
Hudi源码|Insert源码分析总结(一)(整体流程)
Hudi Java Client总结|读取Hive写Hudi代码示例。以Java Client为例的原因:1、自己生产上用的Java Client,相比于Spark客户端更熟悉一点。2、Java Client和Spark、Flink客户端核心逻辑是一样的。不同的是比如Spark的入口是DF和SQL,多了一层API封装。3、Java Client更贴近源码,可以直接分析核心逻辑。不用剖析Spark、Flink源码。对Sprk、Flink源码不熟悉的更容易上手。原创 2022-11-11 07:00:00 · 3800 阅读 · 104 评论 -
Hudi master 0.13.0-SNAPSHOT Win10 打包异常解决
我一直是在Win10本地编译Hudi包的,因为这样可以直接在IDEA里修改并调试源码,但是前段时间打包Hudi master代码时,发现在Win10 本地打包出现了异常,原因是因为这个PR:[https://github.com/apache/hudi/pull/6135](https://github.com/apache/hudi/pull/6135) 引入了proto,需要使用protoc编译`.proto`文件,使用的是maven的protoc-jar-maven-plugin,但是通过maven下原创 2022-11-03 06:45:00 · 1325 阅读 · 32 评论 -
开源经验分享 | 如何从一名小白成为Apache Hudi Contributor
参与Apache Hudi开源有一年多的时间了,马上1024了,虽然距离成为Apache Hudi Commiter还有很遥远的距离,但还是想跟大家分享一下自己的开源经验,讲一下自己如何从开源小白成为Apache Hudi Contributor的。原创 2022-10-22 21:20:24 · 4018 阅读 · 132 评论 -
Hudi源码|bootstrap源码分析总结(写Hudi)
利用Hudi Bootstrap转化现有Hive表的parquet/orc文件为Hudi表本文简单的对Hudi bootstrap的一些关键的源码逻辑进行了分析,希望能对大家有所帮助。限于精力及能力的原因,有些地方可能不够深入,或者不对的地方,还请大家多多指正,让我们共同进步。原创 2022-10-18 10:38:36 · 3015 阅读 · 134 评论 -
写Hudi异常:‘Not an Avro data file‘ 解决方法
记录写Hudi时的一个异常的解决方法,其实这个异常从去年就发现并找到解决方法了,而且已经提交到社区merge了,PR:[HUDI-2675] Fix the exception ‘Not an Avro data file’ when archive and clean。之所以现在又要总结这个异常的处理方法是因为:我们生产环境用的 Hudi0.9.0版本,且没有升级,因为升级Hudi版本可能会有不兼容的问题,需要测试,比较费时,所以目前还没有升级版本,而这个PR合入的版本为0.11.0,所以本文主要总结在0原创 2022-10-14 17:23:42 · 1707 阅读 · 20 评论 -
Hudi Spark SQL源码学习总结-select(查询)
上一篇文章Hudi Spark源码学习总结-spark.read.format(“hudi”).load分析了load方法直接查询Hudi表路径的源码逻辑,那么Spark SQL select 表名的方式和load最终走的逻辑是一样的吗?本文带着这个疑问来分析一下select查询Hudi表的源码逻辑通过上面的分析,我们发现Spark查询Hudi表不管是通过load的方式还是通过sqlselect的方法最终走的逻辑都是一样的。都是先查找source=hudi的DataSource,Spark2对应的为。...原创 2022-08-17 09:52:25 · 660 阅读 · 1 评论 -
Hudi Spark源码学习总结-spark.read.format(“hudi“).load(2)
补充上一篇文章Hudi Spark源码学习总结-spark.read.format(“hudi”).load,由于上篇文章篇幅已经比较长了,所以单独写一篇补充一下,没有读过的可以先阅读一下,我们在上篇文章讲到返回的是,那么如果返回呢?本文总结了使用和的原因以及使用时查询Hudi的逻辑,知道了在使用是通过buildScan实现查询的。我在文章学习时,了解到是通过调用buildScan方法来获取数据源的RDD,所以也想看一下的buildScan方法是否也会在查询时用到以及什么情况下会用到,现在还不确定它和。..原创 2022-08-15 14:59:59 · 755 阅读 · 1 评论 -
Hudi Spark源码学习总结-spark.read.format(“hudi“).load
由于工作原因,之前查询Hudi主要是用Hive来查询的,所以对Hive查询Hudi的逻辑比较了解,但是对于Spark查询Hudi的逻辑不太了解。所以现在想要学习一下Spark查询Hudi的大概逻辑,搞清楚它是如何从Spark的源码跳转到Hudi源码执行Hudi查询的逻辑, 这样既能搞清楚Spark查询表的逻辑,也能搞清楚Spark查询Hudi的逻辑,也便于再后面使用Kyuubi Spark SQL 时出现问题能更好的定位解决。...原创 2022-08-11 15:11:27 · 1116 阅读 · 1 评论 -
Hudi Spark源码学习总结-df.write.format(“hudi“).save
在开始学习Hudi的时候,我们知道通过可以实现写Hudi,并且写Hudi的逻辑是在实现的,但是始终有一个疑问:它怎么从跳到中的呢?本文就是主要来回答这个问题的。本文分析总结了从到的调用逻辑,解决了自己最开始学习Hudi时的一个疑惑😄,希望对大家也能有所帮助。......原创 2022-08-03 18:37:45 · 1139 阅读 · 1 评论 -
Hudi Spark SQL源码学习总结-CTAS
上一篇文章Hudi Spark SQL源码学习总结-Create Table总结了Create Table的源码执行逻辑,这一篇继续总结CTAS,之所以总结CTAS,是之前在我提交的一个PR中发现,Spark2和Spark3.2.1版本的CTAS的逻辑不一样,最终走的Hudi实现类也不一样,所以本文分Spark2和Spark3.2.1两个版本分析......原创 2022-08-01 10:39:16 · 1024 阅读 · 1 评论 -
Hudi Spark SQL源码学习总结-Create Table
简要总结HudiSparkSql源码执行逻辑,从建表开始。其实从去年开始接触Hudi的时候就研究学习了HudiSparkSQL的部分源码,并贡献了几个PR,但是完整的逻辑有些地方还没有完全梳理清楚,所以现在想要从头开始学习,搞懂一些知识难点,这样以后看相关源码的时候就不会导致因为一些关键点不懂影响进度。由于本人能力和精力有限,本文只讲解自己觉得比较关键的点,主要目的是梳理整个流程。搞懂了SparkSQL默认的sqlParser为,那么Hudi是一样的吗?那我们就需要看一下开始的这里的f为为。...原创 2022-07-22 09:19:31 · 1826 阅读 · 1 评论 -
Hadoop源码编译打包
记录总结Hadoop源码编译打包过程,根据源码里的文档,一开始以为不支持在Windows系统上打包,只支持Unix和Mac,所以这里我在自己虚拟机centos7系统上编译,后来在文档后面部分才发现也支持在Windows上编译,不过还需要安装Visual Studio 2010,可能不如还不如在虚拟机上编译简单,如果想尝试在Windows上编译,可以看源码里的文档中的部分因之前没有下载过hadoop的源码,所以需要先下载hadoop的源码git命令克隆源码,克隆的过程中可能会有异常:因文件名过长,不能创建原创 2022-06-26 19:52:42 · 888 阅读 · 1 评论 -
Spark覆盖写入mysql表但不改变已有的表结构
前言本文记录Spark如何在表存在的情况时覆盖写入mysql但不修改已有的表结构,并进行主要的源码跟踪以了解其实现原理。主要场景为先用建表语句建好mysql表,然后用spark导入数据,可能会存在多次全表覆写导入的情况。代码已上传github主要的参数为.option(“truncate”, true),可以参考Spark官网http://spark.apache.org/docs/latest/sql-data-sources-jdbc.html主要代码逻辑为,读取csv,进行日期转化,然后覆盖原创 2021-12-02 19:13:09 · 2003 阅读 · 1 评论