Hudi中MOR与COW区别,MOR表新建后ro/rt区别

近期在频繁与数据湖hudi打交道,将一些心得进行简要总结,供大家参考。

首先,Hudi表可以支持多种数据类型,如

(1)Merge-On-Read(MOR-读时合并);

(2)Copy-On-Write(COW-写时复制);

其次,区别如下:

(1)MOR,写入快,适用于源端数据快速接入ODS层,也就是常说的贴源层的场景;

(2)COW,读取快,适用于从贴源层取数据,经过处理后在存储至标准层的场景;

最后,对MOR方式存储时产生的三种格式进行简要总结。

当hudi表按照MOR格式新建以后,会默认生成3个表,如新建 hudi_os_dev表,则会生成

        常规类型:hudi_os_dev

        ro类型:hudi_os_dev_ro :主要优化读取性能,适用于读取操作频繁的场景

         rt类型:hudi_os_dev_rt:主要优化数据写入和实时同步,适用于需要快速写入和实时数据同步的场景。

        数据接入后,可使用Dbeaver工具对ro表或rt表进行数据查询。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java使用Hudi的Spark客户端创建Hudi写入数据,你可以按照以下步骤进行操作: 1. 首先,确保你已经在项目添加了Hudi和Spark依赖。你可以在pom.xml文件添加以下依赖项: ```xml <dependencies> <!-- Hudi --> <dependency> <groupId>org.apache.hudi</groupId> <artifactId>hudi-spark-bundle_2.12</artifactId> <version>0.9.0</version> </dependency> <!-- Spark --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>3.1.1</version> </dependency> </dependencies> ``` 2. 在Java创建SparkSession对象: ```java import org.apache.spark.sql.SparkSession; SparkSession spark = SparkSession.builder() .appName("HudiExample") .master("local[*]") // 根据实际运行环境设置 .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") .getOrCreate(); ``` 3. 创建Hudi,指定名、类型(如COPY_ON_WRITE或MERGE_ON_READ)、键名和分区列: ```java import org.apache.hudi.DataSourceWriteOptions; import org.apache.hudi.HoodieDataSourceHelpers; import org.apache.hudi.config.HoodieWriteConfig; String tableName = "my_hudi_table"; String basePath = "/path/to/hudi_table"; String primaryKey = "id"; String partitionColumn = "date"; HoodieWriteConfig writeConfig = HoodieWriteConfig.newBuilder().withPath(basePath) .withSchema(HoodieDataSourceHelpers.createHoodieWriteSchema(schema)) // 设置数据模式 .withParallelism(2, 2) // 设置并行度 .forTable(tableName) .withIndexConfig(HoodieIndexConfig.newBuilder().withIndexType(HoodieIndex.IndexType.BLOOM).build()) // 设置索引类型为Bloom .withCompactionConfig(HoodieCompactionConfig.newBuilder().archiveCommitsWith(30, TimeUnit.SECONDS).build()) // 设置30s内自动归档 .build(); HoodieSparkEngineContext context = new HoodieSparkEngineContext(spark.sparkContext()); HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(spark.sparkContext().hadoopConfiguration()) .setBasePath(basePath) .setLoadActiveTimelineOnLoad(true) .build(); HoodieTable table = HoodieSparkTable.create(writeConfig, context, metaClient); ``` 4. 将数据写入Hudi: ```java import org.apache.hudi.common.model.HoodieRecord; // 创建要写入的数据集 List<HoodieRecord> records = Arrays.asList( new HoodieRecord(new HoodieKey("1", "2021-01-01"), data1), new HoodieRecord(new HoodieKey("2", "2021-01-02"), data2), new HoodieRecord(new HoodieKey("3", "2021-01-03"), data3) ); JavaRDD<HoodieRecord> recordRDD = JavaSparkContext.fromSparkContext(spark.sparkContext()).parallelize(records); String commitTime = HoodieTestUtils.makeNewCommitTime(); HoodieWriteClient<HoodieRecord> writeClient = new HoodieWriteClient<>(context, writeConfig); writeClient.startCommit(commitTime); writeClient.insert(recordRDD, commitTime); writeClient.commit(commitTime, recordRDD); ``` 以上是使用Hudi Spark客户端在Java创建Hudi写入数据的基本步骤。请根据你的实际情况进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值