クロスアカウントのS3にアクセスする際に、IAMの設定をして接続できるはずなのにMETASTORE_DOES_NOT_EXIST
エラーが出ることがあります。
Python
display(dbutils.fs.ls("s3a://ty-databricks-cross-account-bucket"))
AnalysisException: [RequestId=ac5c871a-62d6-4f43-8799-7ab10a58da75 ErrorClass=METASTORE_DOES_NOT_EXIST] No metastore assigned for the current workspace.
発生条件
これは、以下の条件で発生します。
- Unity Catalogがセットアップされていない。
- Personal Computeの(あるいはアクセスモードが設定されている)クラスターを使用している。
Personal Computeはこちらで説明していますが、Unity Catalogへの接続を前提としたクラスターを作成します。クロスアカウントのS3にアクセスするなどした際、Unity Catalogのメタストアを確認しに行くのですが、これが存在しないため、このようなエラーになっています。
対策
Unity Catalogをセットアップすればいいのですが、もう一つの方法として「Unity Catalogを参照しに行かないクラスター」を作成するというものがあります。これは現時点ではレガシーとなりますが、上述のアクセスモードを設定しないクラスターを作成することになります。
-
コンピューティングを作成をクリックします。
- 画面上のUIプレビューにマウスカーソルを移動します。トグルスイッチが表示されるので、これをオフにします。レガシーなクラスター作成画面に変更されます。
-
クラスターモードをシングルノードなどにして、クラスターを作成します。必要に応じて、インスタンスプロファイルやSpark設定を行い、S3やGlueにアクセスできるようにしておきます。
これでMETASTORE_DOES_NOT_EXIST
エラーを解消できるはずです。