发布日期: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版本配置类似。