Apache Hudi初探(八)(与spark的结合)--非bulk_insert模式

文章详细探讨了在非bulk_insert模式下,ApacheHudi与Spark结合进行数据写入的过程。涉及的内容包括schema的合并、Avro转换、HoodieRecord的创建、去重策略以及异步的Compaction和Clustering配置。在开启SchemaEvolution时,会根据现有schema和内部schema进行合并。同时,文章提到了如何处理插入时的去重,以及在写操作中的索引使用和提交流程。

背景

之前讨论的都是’hoodie.datasource.write.operation’:'bulk_insert’的前提下,在这种模式下,是没有json文件的已形成如下的文件:

/dt=1/.hoodie_partition_metadata
/dt=1/2ffe3579-6ddb-4c5f-bf03-5c1b5dfce0a0-0_0-41263-0_20230528233336713.parquet
/dt=1/30b7d5b2-12e8-415a-8ec5-18206fe601c0-0_0-22102-0_20230528231643200.parquet
/dt=1/4abc1c6d-a8aa-4c15-affc-61a35171ce69-0_4-22106-0_20230528231643200.parquet
/dt=1/513dee80-2e8c-4db8-baee-a767b9dba41c-0_2-22104-0_20230528231643200.parquet
/dt=1/57076f86-0a62-4f52-8b50-31a5f769b26a-0_1-22103-0_20230528231643200.parquet
/dt=1/84553727-be9d-4273-bad9-0a38d9240815-0_0-59818-0_20230528233513387.parquet
/dt=1/fecd6a84-9a74-40b1-bfc1-13612a67a785-0_0-26640-0_20230528231723951.parquet

因为是"bulk insert"操作,所以没有去重的需要,所以直接采用spark原生的方式,
以下我们讨论非spark原生的方式,

闲说杂谈

继续Apache Hudi初探(二)(与spark的结合)
剩下的代码:

 val reconcileSchema = parameters(DataSourceWriteOptions.RECONCILE_SCHEMA.key()).toBoolean
 val (writeResult, writeClient: SparkRDDWriteClient[HoodieRecordPayload[Nothing]]) =
 ...
  case _ => { // any other operation
   // register classes & schemas
   val (structName, nameSpace) = AvroConversionUtils.getAvroRecordNameAndNamespace(tblName)
   sparkContext.getConf.registerKryoClasses(
     Array(classOf[org.apache.avro.generic.GenericData],
       classOf[org.apache.avro.Schema]))

   // TODO(HUDI-4472) revisit and simplify schema handling
   val sourceSchema = AvroConversionUtils.convertSt
<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仓库)。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值