发布日期:2022-11-13 VIP内容

配置Hudi

使用Spark数据源,可以插入和更新具有默认表类型(Copy on Write)的Hudi表。在每次写操作之后,还将展示如何同时读取快照数据和增量数据。

Hudi当前最新版本是0.12.1,支持Spark 2.4.3+和Spark 3.x版本。

配置Hudi

分别运行支持Hudi的spark-shell、pyspark和Spark SQL。

使用spark-shell时的命令如下:

// Spark 3.3
$ spark-shell \
  --packages org.apache.hudi:hudi-spark3.3-bundle_2.12:0.12.1 \
  --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
  --conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog' \
  --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'

// Spark 3.2
$ spark-shell \
  --packages org.apache.hudi:hudi-spark3.2-bundle_2.12:0.12.1 \
  --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
  --conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog' \
  --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'

// Spark 3.1
$ spark-shell \
  --packages org.apache.hudi:hudi-spark3.1-bundle_2.12:0.12.1 \
  --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
  --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'

// Spark 2.4
spark-shell \
  --packages org.apache.hudi:hudi-spark2.4-bundle_2.11:0.12.1 \
  --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
  --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'

通过HoodieSparkSessionExtension SQL扩展,Hudi支持使用Spark SQL写入和读取数据。从提取的目录运行Spark SQL与Hudi,命令如下:

# Spark 3.3
$ spark-sql --packages org.apache.hudi:hudi-spark3.3-bundle_2.12:0.12.1 \
--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
--conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' \
--conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog'

# Spark 3.2
$ spark-sql --packages org.apache.hudi:hudi-spark3.2-bundle_2.12:0.12.1 \
--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
--conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' \
--conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog'

# Spark 3.1
$ spark-sql --packages org.apache.hudi:hudi-spark3.1-bundle_2.12:0.12.1 \
--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
--conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'

# Spark 2.4
$ spark-sql --packages org.apache.hudi:hudi-spark2.4-bundle_2.11:0.12.1 \
--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
--conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'

以上命令会自动下载需要的 jar 包。

注意以下几点:

(1)对于Spark 3.2及以上版本,需要额外的spark_catalog配置:

--conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog'

本书中使用了为Scala 2.12构建的hudi-spark-bundle,因为所使用的spark-avro模块也依赖于2.12。

如果是使用Maven进行项目开发,则要在项目的pom.xml文件中添加依赖,内容如下:

// Spark 3.3
<dependency>
    <groupId>org.apache.hudi</groupId>
    <artifactId>hudi-spark3.3-bundle_2.12</artifactId>
    <version>0.12.1</version>

其他Spark版本配置类似。

如果是使用Zeppelin执行交互式开发,则需要执行如下配置:

(1) 把 spark-avro_2.12-3.1.2.jar 拷贝到$ZEPPELIN_HOME/lib/目录下。

(2) 在运行所有的Spark代码之前,先执行如下配置:

%spark.conf
spark.jars.packages org.apache.hudi:hudi-spark3.3-bundle_2.12:0.12.1
spark.serializer     org.apache.spark.serializer.KryoSerializer
spark.sql.extensions org.apache.spark.sql.hudi.HoodieSparkSessionExtension

其他Spark版本配置类似。