Hudi + Spark3入门第一课

Hudi + Spark3入门第一课

Apache Hudi 是下一代流数据湖平台。Apache Hudi 将数仓和数据库核心功能迁移到数据湖。Hudi 提供表、 事务、高效的 upserts/deletes、高级索引、 流式摄取、数据集群/压缩优化和并发,同时将数据使用开源文件格式。

hudi 0.10.1源码编译

  • maven 3.5.4,spark3.1.1,配置了aliyun的maven源
  • hudi目录修改pom.xml中的spark version为3.1.1,本来是3.1.2的,小版本的差异不大,看自己的环境。
  • 编译命令mvn clean package -DskipTests -Dscala-2.12 -Dspark3
  • 编译产物在packaging下的hudi-spark-bundle目录
  • spark绑定jar包名称为: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.13.1.x (default build), 3.0.x
0.7.0 - 0.9.03.0.x
0.6.0 and prior不支持

可以看到hudi 0.10版本默认构建出来是spark3.1的,也可以构建spark3.0的。

测试步骤

环境信息

  1. 已安装了Spark3.1.1
  2. 已安装Hive3.1
  3. 操作系统:CentOS 7.4
  4. Java 8

Spark3快速测试

  1. 把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
    
  2. 启动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'
    
  3. 显示 > 等待输入命令即可!(这时我还没有拷贝avro的包,也没有报错。)

  4. 创建一张不分区的hudi表:

    默认就是cow格式的表,默认主键是uuid,没有预聚合字段。

    create table hudi_cow_nonpcf_tbl (
      uuid int,
      name string,
      price double
    ) using hudi;
    
  5. 查看表:show tables,可以看到一行刚才的表名:default hudi_table0 false

  6. 给表插入2条数据:

    insert into hudi_table0 select 1, 'my name is kiki', 20;
    insert into hudi_table0 select 2, 'qiqi', 16;
    
  7. 查询刚才的数据:

    select * from hudi_table0;
    ……
    
    Time taken 0.361 seconds,Fetched 2 row(s)
    
  8. 小试牛刀,ok。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024点线面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值