欢迎访问我的博客
Apache Hudi 是下一代流数据湖平台。Apache Hudi 将数仓和数据库核心功能迁移到数据湖。Hudi 提供表、 事务、高效的 upserts/deletes、高级索引、 流式摄取、数据集群/压缩优化和并发,同时将数据使用开源文件格式。
mvn clean package -DskipTests -Dscala-2.12 -Dspark3
packaging
下的hudi-spark-bundle
目录hudi-spark3.1.1-bundle_2.12-0.10.1.jar
,大小约38M之前的hudi 0.9.0 版本在和spark3.1一起使用时有明显的问题,可以和spark3.0.3搭配使用。当然,这在hudi的发版说明里也有提及。
hudi-spark3.1.2-bundle_2.12-0.10.1.jar
hudi-spark3.0.3-bundle_2.12-0.10.1.jar
这两个包不用自己编译,可以从maven中央仓库获取,(页面很不好找,hudi得把仓库类目梳理一下了)贴一下。
# 3.1.2版本
<!-- https://mvnrepository.com/artifact/org.apache.hudi/hudi-spark3.1.2-bundle -->
<dependency>
<groupId>org.apache.hudi</groupId>
<artifactId>hudi-spark3.1.2-bundle_2.12</artifactId>
<version>0.10.1</version>
</dependency>
# 3.0.3版本
<!-- https://mvnrepository.com/artifact/org.apache.hudi/hudi-spark3.0.3-bundle -->
<dependency>
<groupId>org.apache.hudi</groupId>
<artifactId>hudi-spark3.0.3-bundle_2.12</artifactId>
<version>0.10.1</version>
</dependency>
使用上述预编译的包,就省略自己编译的过程了。
官网发布的支持矩阵:
Spark 3 Support Matrix
Hudi | 支持的 Spark 3 版本 |
---|---|
0.10.0 - 0.10.1 | 3.1.x (default build), 3.0.x |
0.7.0 - 0.9.0 | 3.0.x |
0.6.0 and prior | 不支持 |
可以看到hudi 0.10版本默认构建出来是spark3.1的,也可以构建spark3.0的。
把hudi jar拷贝到spark安装目录的jars中,例如
cp hudi-spark3.1.1-bundle_2.12-0.10.1.jar /usr/hdp/3.0.1.0-187/spark3/jars
启动spark-sql客户端看看是否正常:
因为我们已经把hudi-spark的jar放入spark的jar包加载路径中,我们无需再显式指定它。
此外,如果有报权限类的错误,可以切换有访问hive权限的用户,这里是使用hive用户执行的操作。
./bin/spark-sql --master yarn --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'
显示 > 等待输入命令即可!(这时我还没有拷贝avro的包,也没有报错。)
创建一张不分区的hudi表:
默认就是cow格式的表,默认主键是uuid,没有预聚合字段。
create table hudi_cow_nonpcf_tbl (
uuid int,
name string,
price double
) using hudi;
查看表:show tables
,可以看到一行刚才的表名:default hudi_table0 false
给表插入2条数据:
insert into hudi_table0 select 1, 'my name is kiki', 20;
insert into hudi_table0 select 2, 'qiqi', 16;
查询刚才的数据:
select * from hudi_table0;
……
Time taken 0.361 seconds,Fetched 2 row(s)