概要
Databricks 上で Hadoop Catalog により Apache Iceberg を実行する際に発生した下記エラーの対応方法を紹介します。Databricks Runtime 12.2 の Java のバージョンが原因のようです。 Iceberg 関連のライブラリのバージョンを 1.6.1 にすることで解決できました。
Failure starting repl. Try detaching and re-attaching the notebook.
java.lang.Exception: java.lang.UnsupportedClassVersionError: org/apache/iceberg/spark/SparkCatalog has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
Databricks Runtime 12.2 のバージョンは、ドキュメントに記載されてます。
引用元:Databricks Runtime 12.2 LTS - Azure Databricks | Microsoft Learn
Databricks 上で Hadoop Catalog により Apache Iceberg を利用するには、下記の設定が必要です。
- Databricks Runtime のバージョンを 12.2LTS 以前にすること
- アクセスモードを分離なし共有(Uniyt Catalog 利用不可のモード」)にすること
- Java 8 に対応したライブラリ(Iceberg 1.6.1 以前のライブラリ)を利用すること
- Spark 構成に Iceberg 関連の設定を実施
事前準備
ベースとなるクラスターを作成
Databricks Runtime にて12.2
を選択
アクセスモードを 分離なし共有に設定
Spark 構成に Iceberg 関連の設定を実施
spark.sql.catalog.spark_catalog.warehouse
にて指定してディレクトリにテーブルのデータが書きこまれる。
spark.sql.catalog.spark_catalog = org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.spark_catalog.type = hadoop
spark.sql.catalog.spark_catalog.warehouse = dbfs:/Iceberg
spark.sql.extensions = org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
Iceberg 関連ライブラリであるorg.apache.iceberg:iceberg-spark-runtime-3.3_2.13:1.6.1
をインストール
クラスターのライブラリタブにて、新規インストール
を選択し、ライブラリをインストール
ウィドウにてMave
をチェック後に、
org.apache.iceberg iceberg-spark-runtime
と入力すると下記のようにバージョンごとのライブラリを表示し、org.apache.iceberg:iceberg-spark-runtime-3.3_2.13
の1.6.1
リリースを選択後に選択
を選択
org.apache.iceberg:iceberg-spark-runtime-3.3_2.13:1.6.1
と入力されたことを確認後に、インストール
を選択
エラーの再現方法
インストール済みの Iceberg 関連ライブラリをアンインストール
Iceberg 関連ライブラリを(org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.8.0
)に変更
エラーとなることを確認
%sql
CREATE TABLE ICEBERG_TBL_4(ID INT,NAME STRING) USING ICEBERG;
INSERT INTO ICEBERG_TBL_4 VALUES(1,"Shraddha");
SELECT * FROM ICEBERG_TBL_4;
Failure starting repl. Try detaching and re-attaching the notebook.
java.lang.Exception: java.lang.UnsupportedClassVersionError: org/apache/iceberg/spark/SparkCatalog has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
エラーへの対応方法
既存の Iceberg 関連ライブラリをアンインストール
Iceberg 関連ライブラリであるorg.apache.iceberg:iceberg-spark-runtime-3.3_2.13:1.6.1
をインストール
クラスターを再起動
エラーとなったコードが正常終了することを確認
%sql
CREATE TABLE ICEBERG_TBL_4(ID INT,NAME STRING) USING ICEBERG;
INSERT INTO ICEBERG_TBL_4 VALUES(1,"Shraddha");
SELECT * FROM ICEBERG_TBL_4;