<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[不甚了然的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/blackjjcat</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; blackjjcat]]></copyright><item><title><![CDATA[Merge-On-Read]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/136855273</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/136855273</guid><author>blackjjcat</author><pubDate>Sat, 20 Jul 2024 10:23:02 +0800</pubDate><description><![CDATA[Merge-On-Read，顾名思义，就是在读取的时候进行合并，是与Copy-On-Write相反的一种模式在Iceberg中，Merge-On-Read同样用于行级更新，整体过程如下当更新数据时，Iceberg不再Copy一份旧数据，而是直接将更新数据写入独立的一个文件用来标识需要删除的数据这种模式减少了写入时的合并操作，但是加重了读取数据时的合并操作，因此适合写多读少的场景。]]></description><category></category></item><item><title><![CDATA[Iceberg Copy-On-Write]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/136540588</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/136540588</guid><author>blackjjcat</author><pubDate>Sat, 20 Jul 2024 10:10:35 +0800</pubDate><description><![CDATA[Copy-On-Write：顾名思义，就是在写入的时候进行复制，最初是计算机领域用来解决读多写少场景下的并发访问控制问题的如下，在Copy-On-Write模式下，用户写数据时，会先将原始数据Copy出一份副本，此时其他用户读数据时仍然读取的是原始的数据；之后进行写的用户对副本进行修改，修改完成以后，将访问指向的原始数据替换为修改后的数据；替换完成后，用户访问都会访问这个被修改过的数据Copy-On-Write在读多写少的场景下可以提供有效的性能，因为读操作不受影响，可以一直正常访问资源数据。]]></description><category></category></item><item><title><![CDATA[Flink推测机制]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/138605327</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/138605327</guid><author>blackjjcat</author><pubDate>Tue, 09 Jul 2024 18:45:17 +0800</pubDate><description><![CDATA[Flink推测机制]]></description><category></category></item><item><title><![CDATA[StarRocks分布式元数据源码解析]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/140019288</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/140019288</guid><author>blackjjcat</author><pubDate>Tue, 09 Jul 2024 18:41:55 +0800</pubDate><description><![CDATA[StarRocks分布式解析Iceberg元数据流程]]></description><category></category></item><item><title><![CDATA[Iceberg Changelog]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/136461498</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/136461498</guid><author>blackjjcat</author><pubDate>Mon, 04 Mar 2024 20:20:51 +0800</pubDate><description><![CDATA[Iceberg流式更新目前只支持Append的数据，不支持更新删除。]]></description><category></category></item><item><title><![CDATA[FlinkSQL ChangeLog]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/136410406</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/136410406</guid><author>blackjjcat</author><pubDate>Sat, 02 Mar 2024 09:40:59 +0800</pubDate><description><![CDATA[登录sql-client，创建一个upsert-kafka的sql作业（注意，这里发送给kafka的消息必须带key，普通只有value的消息无法解析，这里的key即是主键的值）发送消息带key和消费消息显示key方式如下作业的DAG图如下。]]></description><category></category></item><item><title><![CDATA[Flink分区相关]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/131709674</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/131709674</guid><author>blackjjcat</author><pubDate>Thu, 29 Feb 2024 19:47:55 +0800</pubDate><description><![CDATA[真正有用的信息是在table表的信息当中，核心在tables.put(tablePath, table.copy());这一句当中，table.copy()存储了表信息，最终调用到实现类CatalogTableImpl，其父类的构造函数有分区信息。表中存储了相应的分区信息，SQL最终操作的都是表，所以都是从这取的分区信息，注意这是一个StringList。]]></description><category></category></item><item><title><![CDATA[Range-Encoded Bit-Slice Index]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/131976245</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/131976245</guid><author>blackjjcat</author><pubDate>Thu, 29 Feb 2024 09:43:07 +0800</pubDate><description><![CDATA[算法使用Bit-Sliced Range-Encoded BitMap算法，在基础bitmap的基础上，添加了范围查询和Bit-Sliced范围查询用来弥补bitmap范围查询能力弱的问题；Bit-Sliced用来降低索引Key值的存储数量，进而降低整体索引的空间占用BSI就是Bit-Sliced，即将数值按位切分表示，用更少的内容代表更多的数据，通常有十进制方式和二进制方式，二进制方式更佳。]]></description><category></category></item><item><title><![CDATA[Spark Bloom Filter Join]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/136337157</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/136337157</guid><author>blackjjcat</author><pubDate>Wed, 28 Feb 2024 10:15:04 +0800</pubDate><description><![CDATA[Bloom Filter Join，或者说Row-level Runtime Filtering（还额外有一条Semi-Join分支），是Spark 3.3对运行时过滤的一个最新补充之前运行时过滤主要有两个：动态分区裁剪DPP（开源实现）、动态文件裁剪DFP（Databricks实现），两者都能有效减少数据源层面的Scan IOBloom Filter Join的主要优化点是在shuffle层，通过在join shuffle前对表进行过滤从而提高运行效率。]]></description><category></category></item><item><title><![CDATA[Iceberg Flink FLIP-27实现]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/136336014</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/136336014</guid><author>blackjjcat</author><pubDate>Wed, 28 Feb 2024 09:37:56 +0800</pubDate><description><![CDATA[前面步骤完成后是把所有的分片全部放在了assigner当中，没有进行分配。分配在AbstractIcebergEnumerator接口当中定义，这是Iceberg当中enumerator的最上层父类，直接实现Flink的SplitEnumeratorSplitEnumerator定义了handleSourceEvent接口，负责处理来自读取器的自定义消息，有SourceCoordinator调用LOG.debug(subtask,]]></description><category></category></item><item><title><![CDATA[Flink动态分区裁剪]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/131101025</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/131101025</guid><author>blackjjcat</author><pubDate>Tue, 27 Feb 2024 20:38:48 +0800</pubDate><description><![CDATA[静态分区裁剪的原理跟谓词下推是一致的，只是适用的是分区表，通过将where条件中的分区条件下推到数据源达到减少分区扫描的目的动态分区裁剪应用于Join场景，这种场景下，分区条件在join的一侧，另一侧无法应用条件进行裁剪静态分区裁剪是静态的规则优化下推，动态分区裁剪是运行时过滤，通过对有条件一侧的表进行过滤，提取结果中的分区数据，然后传递到另一侧的表中进行数据过滤。]]></description><category></category></item><item><title><![CDATA[Iceberg小文件合并]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/130587253</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/130587253</guid><author>blackjjcat</author><pubDate>Tue, 27 Feb 2024 20:26:06 +0800</pubDate><description><![CDATA[Iceberg提供了Actions来进行小文件合并，需要手动调用执行这个任务目前仅仅将小文件进行了合并生成大文件，但旧的文件并没有删除，也就是文件反而变多了功能一路调用，到RowDataRewriter类中的rewriteDataForTasks这里构建Flink任务，核心是RewriteMap的算子，其map方法如下，本质是读取并写入数据注意，这边小文件合并任务是多并发的，目前flink的并发度这里不提供配置，所以用的是flink的parallelism.default的值。]]></description><category></category></item><item><title><![CDATA[hudi索引]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/130587223</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/130587223</guid><author>blackjjcat</author><pubDate>Tue, 27 Feb 2024 20:22:59 +0800</pubDate><description><![CDATA[索引实现的基类，核心方法是两个：tagLocation和updateLocation后续有不同的子类实现具体的索引。]]></description><category></category></item><item><title><![CDATA[FLIP27-Source]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/130587178</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/130587178</guid><author>blackjjcat</author><pubDate>Tue, 27 Feb 2024 20:16:24 +0800</pubDate><description><![CDATA[Source通常有两个核心的部件：当前的Source接口就是用来创建SplitEnumerator和Reader的工厂类。]]></description><category></category></item><item><title><![CDATA[DolphinScheduler]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/130587127</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/130587127</guid><author>blackjjcat</author><pubDate>Tue, 27 Feb 2024 20:03:55 +0800</pubDate><description><![CDATA[可以看到时间的具体处理在WorkflowExecuteRunnable的call，根据事件的状态不同，做分支处理，核心三个步骤：buildFlowDag、initTaskQueue、submitPostNode。转换之后，run方法中的最后一步就是执行ProcessInstance，这里是发送一个执行的事件请求，具体的操作在WorkflowExecuteRunnable。前面提到，点击执行后整个流程走到发送WorkflowEvent事件这一步，之后就是基于事件进行处理，这里有一个循环调用迭代处理的过程。]]></description><category></category></item><item><title><![CDATA[Flink Catalog]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/129195227</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/129195227</guid><author>blackjjcat</author><pubDate>Tue, 27 Feb 2024 19:59:13 +0800</pubDate><description><![CDATA[按照SQL的解析处理流程在Parse解析SQL以后，进入执行流程——executeInternal。其中有个分支专门处理创建Catalog的SQL命令创建Catalog会去全包查找对应的CatalogFactory的子类，然后使用配置的子类构建这里注意，上面的步骤只查询classpath下的类，像HiveCatalog这种外置增加的，在这个步骤里找不到，会抛出NoMatchingTableFactoryException异常之后继续其他步骤处理来获取。]]></description><category></category></item><item><title><![CDATA[计算引擎CodeGen]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/131647166</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/131647166</guid><author>blackjjcat</author><pubDate>Sat, 05 Aug 2023 16:00:24 +0800</pubDate><description><![CDATA[解释执行：生成的是非机器码，需要通过中间的解释器翻译成机器码然后执行，一行一行读取翻译，所以执行效率低编译执行：直接生成机器码，执行效率高，但编程难度也高，而且跨平台能力差。]]></description><category></category></item><item><title><![CDATA[Flink Adaptive Batch Scheduler]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/130587155</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/130587155</guid><author>blackjjcat</author><pubDate>Sat, 05 Aug 2023 15:52:01 +0800</pubDate><description><![CDATA[自适应批调度器，即自动推导设置作业并行度，无需用户手动设置作业并行度，由Flink根据用户设置的期望及作业执行情况，自动设置作业的并行度。]]></description><category></category></item><item><title><![CDATA[DolphinScheduler作业流程]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/130748810</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/130748810</guid><author>blackjjcat</author><pubDate>Sat, 05 Aug 2023 15:46:02 +0800</pubDate><description><![CDATA[之后第一个任务按正常流程走完，由WorkflowExecuteRunnable的handleEvents处理结束事件，到TaskStateEventHandler当中，走回WorkflowExecuteRunnable的taskFinished，成功和失败都有submitPostNode的调用，这次的输入是结束的任务。submitPostNode当中有工作流任务拆分的过程，在submitPostNode当中，解析DAG图，由于第一次进来parentNodeCode，所以这里只获取到第一个任务。]]></description><category></category></item><item><title><![CDATA[Flink Catalog]]></title><link>https://blog.youkuaiyun.com/blackjjcat/article/details/130587165</link><guid>https://blog.youkuaiyun.com/blackjjcat/article/details/130587165</guid><author>blackjjcat</author><pubDate>Thu, 03 Aug 2023 21:07:31 +0800</pubDate><description><![CDATA[Flink提供了基础的Catalog接口，自定义Catalog实现此接口即可此外还有一个CatalogFactory接口，用于创建Catalog。]]></description><category></category></item></channel></rss>