测试spark操作hudi 0.9 cdh6.3.2 版本不兼容时

本文详细记录了在CDH 6.3.2环境下,使用Spark 2.4.0操作Hudi 0.9时遇到的版本不兼容问题。在启动Spark Shell时,由于Spark-avro版本与Spark版本不匹配,导致写入Hudi表失败。通过对比不同Spark版本的源码,注释掉引起问题的部分代码并重新编译,成功解决了写入问题。此外,文章还涵盖了设置表名、插入、查询、修改、增量查询、时间点查询、删除和覆盖数据等操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark-shell操作
(1)spark-shell启动,需要指定spark-avro模块,因为默认环境里没有,spark-avro模块版本号需要和spark版本对应,(可以在maven仓库https://mvnrepository.com/查看spark 个版本对应的spark-avro有没有再maven仓),并且使用Hudi编译好的jar包。

发现spark-avro使用的3.0.0版本scala 是2.12,如果使用的spark 是apache spark3.0.0之后的可以参考第一节编译时使用scala版本取2.12

当前由于是cdh6.3.2,spark版本是2.4.0 使用如下命令启动spark-shell

local 模式 --master local[*] 

[xxx@xxx Hudi]# spark-shell 
--jars packaging/hudi-spark-bundle/target/hudi-spark-bundle_2.11-0.9.0.jar 
--packages org.apache.spark:spark-avro_2.11:2.4.4 
--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'

设置表名

scala> import org.apache.hudi.QuickstartUtils._
import org.apache.hudi.QuickstartUtils._
 
scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._
 
scala> import org.apache.spark.sql.SaveMode._
import org.apache.spark.sql.SaveMode._
 
scala> import org.apache.hudi.DataSourceReadOptions._
import org.apache.hudi.DataSourceReadOptions._
 
scala> import org.apache.hudi.DataSourceWriteOptions._
import org.apache.hudi.DataSourceWriteOptions._
 
scala> import org.apache.hudi.config.HoodieWriteConfig._
import org.apache.hudi.config.HoodieWriteConfig._
 
scala> val tableName = "hudi_trips_cow"
tableName: String = hudi_trips_cow
 
scala> val basePath = "file:///tmp/hudi_trips_cow"
basePath: String = file:///tmp/hudi_trips_cow
 
scala> val dataGen = new DataGenerator
dataGen: org.apache.hudi.QuickstartUtils.DataGenerator = org.apache.hudi.QuickstartUtils$DataGenerator@5cdd5ff9

插入数据

新增数据,生成一些数据,将其加载到DataFrame中,然后将DataFrame写入Hudi表


scala> val inserts = convertToStringList(dataGen.generateInserts(10))
scala> val df = spark.read.json(spark.sparkContext.parallelize(inserts, 2))
scala> df.write.format("hudi").
        options(getQuickstartWriteConfigs).
        option(PRECOMBINE_FIELD_OPT_KEY, "ts").
        option(RECORDKEY_FIELD_OPT_KEY, "uuid").
        option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath").
        option(TABLE_NAME, tableName).
        mode(Overwrite).
        save(basePath)

Mode(overwrite)将覆盖重新创建表(如果已存在)。可以检查/tmp/hudi_trps_cow 路径下是否有数据生成

报错

df.write.format("hudi").options(getQuickstartWriteConfigs).option(PRECOMBINE_FIELD_OPT_KEY, "ts").option(RECORDKEY_FIELD_OPT_KEY, "uuid").option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath").option(TABLE_NAME, tableName).mode(Overwrite).save(basePath)
warning: there was one deprecation warning; re-run with -deprecation for details
java.lang.NoSuchMethodError: org.apache.spark.sql.execution.datasources.DataSourceUtils$.PARTITIONING_COLUMNS_KEY()Ljava/lang/String;
  at org.apache.hudi.DataSourceWriteOptions$.translateSqlOptions(DataSourceOptions.scala:203)
  at org.apac
CDH(Cloudera Distribution of Hadoop)是一种用于大数据处理的分布式计算框架,它包含了Hadoop、Spark、Hive等组件,用于存储、处理和分析大规模的数据。 Hudi是一种开源数据湖工具,它 stands for Hadoop Upserts Deletes Incremental,可以在数据湖中实现增量更新和删除操作Hudi为大规模数据处理提供了高性能、低延迟和可靠性的解决方案,可以轻松处理PB级别的数据。 CDH 6.3.2Hudi的结合,使得在CDH集群上使用Hudi变得更加简单。通过CDH的集成,用户可以直接在CDH集群中安装和配置Hudi,无需额外的安装步骤。此外,CDH还提供了一些工具和管理界面,帮助用户更好地管理和监控Hudi在集群中的运行。 使用CDH 6.3.2搭配Hudi,可以实现以下功能: 1. 增量更新和删除操作Hudi可以在数据湖中实现增量更新和删除操作,从而减少数据处理的间和资源消耗。 2. 事务支持:HudiCDH集群中提供了事务支持,确保数据的一致性和可靠性。 3. 数据索引和查询:Hudi支持数据索引和查询,能够快速检索和分析大规模的数据。 4. 增量同步和复制:Hudi还提供了增量同步和复制功能,可以将数据湖中的数据复制到其他系统或平台上进行进一步的处理和分析。 综上所述,CDH 6.3.2Hudi的结合为大数据处理提供了更加灵活和高效的解决方案。通过它们的组合,用户可以在CDH集群中轻松地实现增量更新、删除和查询操作,从而更好地管理和处理大规模的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值