概要
Databricks 上で Hadoop Catalog により Apache Iceberg を実行する際に発生した下記エラーの対応方法を紹介します。推測でありますが、 Databricks Runtime 13.3 以降で Apache Iceberg 関連の機能実装が原因の可能性があります。 Databricks Runtime 12.2 にすることでエラーの解消ができました。
AnalysisException: Multiple sources found for ICEBERG (com.databricks.sql.transaction.tahoe.uniform.sources.IcebergBrowseOnlyDataSource, org.apache.iceberg.spark.source.IcebergSource), please specify the fully qualified class name.
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
と入力されたことを確認後に、インストール
を選択
エラーの再現方法
Databricks Runtime 13.3 に変更
Databricks Runtime の Spark バージョン合わせた Iceberg のライブラリ(org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.6.1
)を変更
クラスターを再起動
エラーとなることを確認
%sql
CREATE TABLE ICEBERG_TBL_2(ID INT,NAME STRING) USING ICEBERG;
INSERT INTO ICEBERG_TBL_2 VALUES(1,"Shraddha");
SELECT * FROM ICEBERG_TBL_2;
AnalysisException: Multiple sources found for ICEBERG (com.databricks.sql.transaction.tahoe.uniform.sources.IcebergBrowseOnlyDataSource, org.apache.iceberg.spark.source.IcebergSource), please specify the fully qualified class name.
エラーへの対応方法
Databricks Runtime を12.2
に変更
Databricks Runtime の Spark バージョン合わせた Iceberg のライブラリ(org.apache.iceberg:iceberg-spark-runtime-3.3_2.13:1.6.1
)を変更
エラーとなったコードが正常終了することを確認
%sql
CREATE TABLE ICEBERG_TBL_2(ID INT,NAME STRING) USING ICEBERG;
INSERT INTO ICEBERG_TBL_2 VALUES(1,"Shraddha");
SELECT * FROM ICEBERG_TBL_2;