Apache Hudi初探(十)(与spark的结合)--hudi的Compaction操作

ApacheHudi与Spark结合:深入理解异步与同步Compaction
文章详细阐述了ApacheHudi中的同步和异步Compaction概念,特别是如何在Spark中实现。当hoodie.compact.inline设置为true时,Hudi会启动同步Compaction流程,包括运行任何待处理的Compaction计划和生成新的Compaction计划。Hudi通过后台线程异步执行Compaction计划,确保写入的实时性和数据读取的效率。文章还介绍了Hudi如何生成和执行Compaction计划的详细步骤,涉及多个关键方法和配置选项。

背景

在之前的文章Apache Hudi初探(六)(与spark的结合)
中,我们没有过多的解释Spark中hudi Compaction的实现,在这里详细说一下
注意:在hudi中有同步,异步Compaction的概念,为了保证写入的及时性和数据读取的时效性,hudi在一步compaction的过程中会引入一个后台线程进行compaction,所以异步Compaction又分同步compaction计划生成和异步compaction计划生成和最终的Compaction计划的执行(而compaction计划的执行是在后台异步执行的)
对应的配置为:
hoodie.compact.inline 是否是同步进行Compaction
hoodie.compact.schedule.inline 是够是异步Compaction计划生成

详说杂谈

这里直接以同步Compaction为例,直接到BaseHoodieWriteClient runTableServicesInline方法

   if (config.inlineCompactionEnabled()) {
     runAnyPendingCompactions(table);
     metadata.addMetadata(HoodieCompactionConfig.INLINE_COMPACT.key(), "true");
     inlineCompaction(extraMetadata);
   } else {
     metadata.addMetadata(HoodieCompactionConfig.INLINE_COMPACT.key(), "false");
   }

假设hoodie.compact.inlinetrue,也就是config.inlineCompactionEnabled()true,那就直接执行Compaction流程:

  • runAnyPendingCompactions
    重新运行上次失败的Compaction计划

    • 过滤出没有完成的Compaction计划,并执行Compact操作,具体的为SparkRDDWriteClient.compact
      这里我们先略过,假设没有pending的Compaction操作,重点看inlineCompaction
  • me

<think>好的,用户想要下载特定版本的Hudi Spark bundle JAR包,具体是hudi-spark3.1-bundle_2.12-0.12.0.jar。我需要根据提供的引用信息来指导他如何找到或下载这个文件。 首先,看用户提供的引用内容。引用[1]和[4]提到了编译命令,其中使用了-Dspark3.1和-Dscala-2.12参数,这可能意味着Hudi的构建参数需要指定Spark和Scala的版本。但用户现在需要的是直接下载JAR包,而不是从源码编译。不过这些参数可以帮助确定正确的版本组合。 引用[2]和[3]是Maven仓库的URL示例。比如,引用[2]指向hudi-flink1.15-bundle的0.12.1版本,而引用[3]是Flink Hive连接器的例子。这些例子展示了Maven仓库的结构,用户可能需要按照类似的路径找到Spark bundle的JAR。 根据Maven仓库的通用结构,HudiSpark bundle包应该位于org/apache/hudi目录下。具体路径可能为:org/apache/hudi/hudi-spark3.1-bundle_2.12/0.12.0/,其中版本号是0.12.0。因此,完整的URL可能类似于: https://repo.maven.apache.org/maven2/org/apache/hudi/hudi-spark3.1-bundle_2.12/0.12.0/hudi-spark3.1-bundle_2.12-0.12.0.jar 需要确认这个URL是否正确。检查用户提供的引用,发现引用[2]中的hudi-flink1.15-bundle的路径结构是org/apache/hudi/hudi-flink1.15-bundle/0.12.1/,因此推断Spark bundle的路径应该类似,替换对应的模块名和版本即可。 另外,用户可能没有找到0.12.0版本,因为引用[1]和[4]中的版本是0.12.1,但用户需要的是0.12.0。需要确认该版本是否存在。在Maven仓库中,可以访问https://repo.maven.apache.org/maven2/org/apache/hudi/hudi-spark3.1-bundle_2.12/查看是否有0.12.0目录。如果存在,用户就可以下载对应的JAR。 如果用户无法通过直接访问URL下载,可能需要使用Maven或Gradle依赖配置,或者在构建工具中添加对应的仓库地址。但根据用户的问题,直接下载JAR包更直接,所以提供具体的URL路径和步骤是关键。 总结步骤: 1. 访问Maven中央仓库的Hudi Spark bundle路径。 2. 检查是否存在0.12.0版本。 3. 提供直接下载链接,如果存在的话。 4. 如果不存在,建议用户检查版本号是否正确,或考虑使用其他版本。 可能的问题:用户提供的版本是否在Maven仓库中可用?需要确认0.12.0是否被发布。例如,引用中提到的0.12.1存在,但0.12.0可能也存在,需要检查。</think>### 分步解答 要下载 `hudi-spark3.1-bundle_2.12-0.12.0.jar`,需通过以下步骤操作: 1. **确认Maven仓库路径** Apache Hudi的官方组件在Maven中央仓库的路径为: `org/apache/hudi/{模块名}/{版本号}` 根据文件名拆解: - 模块名:`hudi-spark3.1-bundle_2.12` - 版本号:`0.12.0` 完整路径应为: $$https://repo.maven.apache.org/maven2/org/apache/hudi/hudi-spark3.1-bundle_2.12/0.12.0/$$ 2. **直接访问JAR文件** 在路径末尾添加文件名即可下载: ```text https://repo.maven.apache.org/maven2/org/apache/hudi/hudi-spark3.1-bundle_2.12/0.12.0/hudi-spark3.1-bundle_2.12-0.12.0.jar ``` 若链接有效,浏览器会自动下载文件[^2]。 3. **验证版本可用性** 若链接返回404错误,说明该版本可能未发布或路径有误。可检查: - 版本号是否存在:访问父目录 $$https://repo.maven.apache.org/maven2/org/apache/hudi/hudi-spark3.1-bundle_2.12/$$ 查看是否有`0.12.0`文件夹。 - 确认命名规范是否Hudi官方一致(例如Spark 3.1Scala 2.12的组合是否支持)[^4]。 4. **替代下载方式** 若需通过构建工具下载,在`pom.xml`中添加依赖: ```xml <dependency> <groupId>org.apache.hudi</groupId> <artifactId>hudi-spark3.1-bundle_2.12</artifactId> <version>0.12.0</version> </dependency> ``` 执行 `mvn clean install` 自动从仓库拉取[^1]。 --- ### 关键提示 - **版本兼容性**:Hudi Bundle的版本需Spark、Scala版本严格匹配(例如`spark3.1`对应Spark 3.1.x,`_2.12`对应Scala 2.12)[^4]。 - **镜像仓库**:若中央仓库下载慢,可改用国内镜像(如阿里云Maven仓库)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值