一文彻底掌握Apache Hudi异步Clustering部署

本文详细介绍了Apache Hudi的异步Clustering部署,包括HoodieClusteringJob、HoodieDeltaStreamer和Spark Structured Streaming的用法。通过设置不同参数,如hoodie.clustering.async.enabled,实现Hudi表的高效管理和维护。

4.1 HoodieClusteringJob

随着Hudi版本0.9.0的发布,我们可以在同一步骤中调度和执行Clustering。我们只需要指定-mode-m选项。有如下三种模式:

  • schedule(调度):制定一个Clustering计划。这提供了一个可以在执行模式下传递的instant

  • execute(执行):在给定的instant执行Clustering计划,这意味着这里需要instant

  • scheduleAndExecute(调度并执行):首先制定Clustering计划并立即执行该计划。

请注意要在原始写入程序仍在运行时运行作业请启用多写入:

hoodie.write.concurrency.mode=optimistic_concurrency_control

hoodie.write.lock.provider=org.apache.hudi.client.transaction.lock.ZookeeperBasedLockProvider

使用spark submit命令提交HoodieClusteringJob示例如下:

spark-submit \

–class org.apache.hudi.utilities.HoodieClusteringJob \

/path/to/hudi-utilities-bundle/target/hudi-utilities-bundle_2.12-0.9.0-SNAPSHOT.jar \

–props /path/to/config/clusteringjob.properties \

–mode scheduleAndExecute \

–base-path /path/to/hudi_table/basePath \

–table-name hudi_table_schedule_clustering \

–spark-memory 1g

clusteringjob.properties配置文件示例如下

hoodie.clustering.async.enabled=true

hoodie.clustering.async.max.commits=4

hoodie.clustering.plan.strategy.target.file.max.bytes=1073741824

hoodie.clustering.plan.strategy.small.file.limit=629145600

hoodie.clustering.execution.strategy.class=org.apache.hudi.client.clustering.run.strategy.SparkSortAndSizeExecutionStrategy

hoodie.clustering.plan.strategy.sort.columns=column1,column2

4.2 HoodieDeltaStreamer

接着看下如何使用HudiDeltaStreamer。现在我们可以使用DeltaStreamer触发异步Clustering。只需将hoodie.clustering.async.enabledtrue,并在属性文件中指定其他Clustering配置,在启动Deltastreamer时可以将其位置设为-props(与HoodieClusteringJob配置类似)。

使用spark submit命令提交HoodieDeltaStreamer示例如下:

spark-submit \

–class org.apache.hudi.utilities.deltastreamer.HoodieDeltaStreamer \

/path/to/hudi-utilities-bundle/target/hudi-utilities-bundle_2.12-0.9.0-SNAPSHOT.jar \

–props /path/to/config/clustering_kafka.properties \

–schemaprovider-class org.apache.hudi.utilities.schema.SchemaRegistryProvider \

–source-class org.apache.hudi.utilities.sources.AvroKafkaSource \

–source-ordering-field impresssiontime \

–table-type COPY_ON_WRITE \

–target-base-path /path/to/hudi_table/basePath \

–target-table impressions_cow_cluster \

–op INSERT \

–hoodie-conf hoodie.clustering.async.enabled=true \

–continuous

4.3 Spark Structured Streaming

我们还可以使用Spark结构化流启用异步Clustering,如下所示。

val commonOpts = Map(

“hoodie.insert.shuffle.parallelism” -> “4”,

“hoodie.upsert.shuffle.parallelism” -> “4”,

DataSourceWriteOptions.RECORDKEY_FIELD.key -> “_row_key”,

DataSourceWriteOptions.PARTITIONPATH_FIELD.key -> “partition”,

DataSourceWriteOptions.PRECOMBINE_FIELD.key -> “timestamp”,

HoodieWriteConfig.TBL_NAME.key -> “hoodie_test”

)

def getAsyncClusteringOpts(isAsyncClustering: String,

clusteringNumCommit: String,

executionStrategy: String):Map[String, String] = {

commonOpts + (DataSourceWriteOptions.ASYNC_CLUSTERING_ENABLE.key -> isAsyncClustering,

HoodieClusteringConfig.ASYNC_CLUSTERING_MAX_COMMITS.key -> clusteringNumCommit,

HoodieClusteringConfig.EXECUTION_STRATEGY_CLASS_NAME.key -> executionStrategy

)

}

def initStreamingWriteFuture(hudiOptions: Map[String, String]): Future[Unit] = {

val streamingInput = // define the source of streaming

Future {

println(“streaming starting”)

streamingInput

.writeStream

.format(“org.apache.hudi”)

.options(hudiOptions)

.option(“checkpointLocation”, basePath + “/checkpoint”)

.mode(Append)

.start()

.awaitTermination(10000)

println(“streaming ends”)

}

}

def structuredStreamingWithClustering(): Unit = {

val df = //generate data frame

val hudiOptions = getClusteringOpts(“true”, “1”, “org.apache.hudi.client.clustering.run.strategy.SparkSortAndSizeExecutionStrategy”)

val f1 = initStreamingWriteFuture(hudiOptions)

Await.result(f1, Duration.Inf)

}

5. 总结和未来工作


在这篇文章中,我们讨论了不同的Clustering策略以及如何设置异步Clustering。未来的工作包括:

  • Clustering支持更新。

  • 支持Clustering的CLI工具。
    另外Flink支持Clustering已经有相应Pull Request,有兴趣的小伙伴可以关注该PR。
    可以查看JIRA了解更多关于此问题的开发,我们期待社会各界的贡献,希望你喜欢这个博客!

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档

MySQL全家桶笔记

还有更多面试复习笔记分享如下

Java架构专题面试复习

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
道常见面试题(含答案)+21条MySQL性能调优经验**小编已整理成Word文档或PDF文档

[外链图片转存中…(img-0xLEqo7L-1713563079831)]

还有更多面试复习笔记分享如下

[外链图片转存中…(img-x6Ub0CUe-1713563079833)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值