概要
Databricks 上で Hadoop Catalog により Apache Iceberg を実行する際に発生した下記エラーの対応方法を紹介します。 Unity Cataglog を利用できるクラスターで発生するエラーのようです。対応方法は、 Unity Catalog を利用できない分離なし共有
アクセスモードに変更することです。
org.apache.spark.SparkClassNotFoundException: [DATA_SOURCE_NOT_FOUND] Failed to find data source: ICEBERG. Please find packages at
https://spark.apache.org/third-party-projects.html
.
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
と入力されたことを確認後に、インストール
を選択
エラーの再現方法
アクセスモードを 分離なし共有ではなく専用
に設定
エラーとなることを確認
%sql
CREATE TABLE ICEBERG_TBL(ID INT,NAME STRING) USING ICEBERG;
INSERT INTO ICEBERG_TBL VALUES(1,"Shraddha");
SELECT * FROM ICEBERG_TBL;
org.apache.spark.SparkClassNotFoundException: [DATA_SOURCE_NOT_FOUND] Failed to find data source: ICEBERG. Please find packages at
https://spark.apache.org/third-party-projects.html
.
エラーへの対応方法
クラスターのアクセスモードを分離なし共有
に変更
エラーとなったコードが正常終了することを確認
%sql
CREATE TABLE ICEBERG_TBL(ID INT,NAME STRING) USING ICEBERG;
INSERT INTO ICEBERG_TBL VALUES(1,"Shraddha");
SELECT * FROM ICEBERG_TBL;