我正在尝试使用 Apache Spark 3.5.2 在 docker 容器中设置 unity 目录,但遇到了错误。
build/sbt clean package publishLocal spark/publishLocal
但是我在 delta-spark 和 unity 目录中都遇到错误:
对于 delta-spark 它会出现错误:
java.lang.NoClassDefFoundError: scala/collection/IterableOnce
,看起来像 scala 版本冲突,但我尝试了多种组合,例如 delta-spark_2.12:3.0.0 等。
对于 Unity 目录,它会抛出:
java.lang.ClassNotFoundException: io.unitycatalog.client.ApiException
有人可以检查一下这个,并帮助我消除这些错误。我的目标是能够在 Docker 容器中通过 Apache Spark 设置和使用 Unity 目录。
这是我的 github 分支,重现它的步骤写在拉取请求评论中: https://github.com/experientlabs/spark-dp-101/pull/1
1。将这个
dev_branch
放入您的机器中
https://github.com/experientlabs/spark-dp-101/pull/1
2。进行 docker 构建,您可以使用以下命令。 构建(docker构建命令):
docker build -t spark-delta-unity-catalog .
3.运行 docker run 命令 运行(docker运行命令)
hostfolder="$(pwd)"
dockerfolder="/home/sparkuser/app"
docker run --rm -it --name spark-uc \
-p 4040:4040 -p 18080:18080 -p 8080:8080 \
spark-delta-unity-catalog:latest bashed
4。进入 docker 容器 bash shell 后,运行以下命令来启动 Spark-shell
/home/spark/bin/spark-shell --verbose \
--jars /home/spark/jars/unitycatalog-spark-0.2.0-SNAPSHOT.jar \
--packages io.delta:delta-spark_2.13:3.2.0 \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=io.unitycatalog.connectors.spark.UCSingleCatalog \
--conf spark.sql.catalog.spark_catalog.uri=http://localhost:8080 \
--conf spark.sql.catalog.unity=io.unitycatalog.connectors.spark.UCSingleCatalog \
--conf spark.sql.catalog.unity.uri=http://localhost:8080
5。获得 Spark shell 后,尝试运行任何目录查询:
sql("SET spark.sql.defaultCatalog").show(truncate=false)
或
sql("SELECT current_catalog()").show(truncate=false)
尝试运行任何目录查询时出现 io.unitycatalog.client.ApiException。
请注意您需要的 Apache Spark™ 和 Unity Catalog 之间的版本兼容性:
您可以至少更新到这些版本吗?截至撰写本文时,我们目前也在更新 UC docker 以简化此过程。