Apache Hudi初探(七)(与spark的结合)

背景

目前hudi的与spark的集合还是基于spark datasource V1来的,这一点可以查看hudi的source实现就可以知道:

class DefaultSource extends RelationProvider
  with SchemaRelationProvider
  with CreatableRelationProvider
  with DataSourceRegister
  with StreamSinkProvider
  with StreamSourceProvider
  with SparkAdapterSupport
  with Serializable {

闲说杂谈

接着Apache Hudi初探(二)(与spark的结合)中剩下的:

    val syncHiveSuccess = metaSync(sqlContext.sparkSession, writeConfig, basePath, df.schema)

这里主要是同步到数据到hive的元数据中,如果hoodie.datasource.hive_sync.enable开启(默认是false,不开启)
则会设置hoodie.datasource.meta.sync.enable为true(默认是false,不开启),于此同时会把HiveSyncTool类加入到syncClientToolClassSet集合中,便于后续调用,当然如果设置了hoodie.meta.sync.client.tool.class,也会加入到该集合中。
如果hoodie.datasource.meta.sync.enable为true ,
会设置hoodie.datasource.hive_sync.schema_string_length_threshspark.sql.sources.schemaStringLengthThreshold 默认是4000
设置hoodie.meta_sync.spark.versio当前spark的版本
设置hoodie.meta.sync.metadata_file_listinghoodie.metadata.enable (默认是true)
之后调用HiveSyncToolsyncHoodieTable方法来进行元数据的同步,
对于MOR表来说,会有两张表,一张是rt 表,一张是ro表,分别对应snapshot表(实时表)和读优化表
但是如果hoodie.datasource.hive_sync.skip_ro_suffixtrue (默认是false),则读优化表,则不会加 ro 后缀
最后还会在spark中刷新刚才建立的表,这样才spark的查询中就能查询到插入的hudi表

猜你喜欢

转载自blog.csdn.net/monkeyboy_tech/article/details/130798742