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.enabled为true,并在属性文件中指定其他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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。


既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档

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

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
道常见面试题(含答案)+21条MySQL性能调优经验**小编已整理成Word文档或PDF文档
[外链图片转存中…(img-0xLEqo7L-1713563079831)]
还有更多面试复习笔记分享如下
[外链图片转存中…(img-x6Ub0CUe-1713563079833)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
本文详细介绍了Apache Hudi的异步Clustering部署,包括HoodieClusteringJob、HoodieDeltaStreamer和Spark Structured Streaming的用法。通过设置不同参数,如hoodie.clustering.async.enabled,实现Hudi表的高效管理和维护。

3991

被折叠的 条评论
为什么被折叠?



