メインコンテンツまでスキップ

Databricks から Azure Data Lake Storage Gen1 にアクセスする

Microsoftは、 Azure Data Lake Storage Gen1 (旧Azure Data Lake Store、ADLSとも呼ばれる)の計画的な廃止を発表し、すべてのユーザーに Azure Data Lake Storage Gen2への移行を推奨しています。 Databricks では、最適なパフォーマンスと新機能を得るために、Azure Data Lake Storage Gen2 にアップグレードすることをお勧めします。

サービスプリンシパルを使用して、 Azure Data Lake Storage Gen1 に直接アクセスできます。

サービスプリンシパルへの権限の作成と付与

選択したアクセス方法に適切な権限を持つサービスプリンシパルが必要で、権限がない場合は、次の手順を実行します。

  1. リソースにアクセスできる Microsoft Entra ID (旧称 Azure Active Directory) アプリケーションとサービスプリンシパルを作成します。 次のプロパティに注意してください。

    • application-id: クライアント アプリケーションを一意に識別する ID。
    • directory-id: Microsoft Entra ID インスタンスを一意に識別する ID。
    • service-credential: アプリケーションが ID を証明するために使用する文字列。
  2. 登録する サービスプリンシパル, アカウントに対する Contributorなどの正しいAzure Data Lake Storage Gen1 ロールの割り当て を許可します。

SparkAPIsサービスプリンシパルとOAuth 2.0を使用して で直接アクセス

Azure Data Lake Storage Gen1 アカウントから読み取るには、ノートブックで次のスニペットを使用して、サービス資格情報を使用するように Spark を構成できます。

Python
spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("fs.adl.oauth2.client.id", "<application-id>")
spark.conf.set("fs.adl.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"))
spark.conf.set("fs.adl.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

ここでは

  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") シークレットスコープ に シークレット として保存されているストレージアカウントアクセスキーを取得します。

資格情報を設定したら、標準の Spark と Databricks APIs を使用してリソースにアクセスできます。 例えば:

Scala
val df = spark.read.format("parquet").load("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")

dbutils.fs.ls("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")

Azure Data Lake Storage Gen1 はディレクトリ レベルのアクセス制御を提供するため、サービスプリンシパルは、読み取り元のディレクトリと Azure Data Lake Storage Gen1 リソースにアクセスできる必要があります。

メタストア経由のアクセス

adl://メタストアで指定されたHadoop Sparkの場所にアクセスするには、クラスターを作成するときに、対応する 構成キーに プレフィックスを追加して、メタストアで使用される 構成に伝達することで、spark.hadoop. Hadoop資格情報構成オプションをHadoop オプションとして指定する必要があります。

ini
spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential
spark.hadoop.fs.adl.oauth2.client.id <application-id>
spark.hadoop.fs.adl.oauth2.credential <service-credential>
spark.hadoop.fs.adl.oauth2.refresh.url https://login.microsoftonline.com/<directory-id>/oauth2/token
警告
  • これらの資格情報は、クラスターにアクセスするすべてのユーザーが使用できます。

複数のアカウントのサービス資格情報を設定する

構成キーに account.<account-name> を追加することで、1 つの Spark セッションで使用する複数の Azure Data Lake Storage Gen1 アカウントのサービス資格情報を設定できます。 たとえば、 adl://example1.azuredatalakestore.netadl://example2.azuredatalakestore.netにアクセスする両方のアカウントの資格情報を設定する場合は、次のように実行できます。

Scala
spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")

spark.conf.set("fs.adl.account.example1.oauth2.client.id", "<application-id-example1>")
spark.conf.set("fs.adl.account.example1.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example1>"))
spark.conf.set("fs.adl.account.example1.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example1>/oauth2/token")

spark.conf.set("fs.adl.account.example2.oauth2.client.id", "<application-id-example2>")
spark.conf.set("fs.adl.account.example2.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example2>"))
spark.conf.set("fs.adl.account.example2.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example2>/oauth2/token")

これは、クラスター Sparkの設定でも機能します。

ini
spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential

spark.hadoop.fs.adl.account.example1.oauth2.client.id <application-id-example1>
spark.hadoop.fs.adl.account.example1.oauth2.credential <service-credential-example1>
spark.hadoop.fs.adl.account.example1.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example1>/oauth2/token

spark.hadoop.fs.adl.account.example2.oauth2.client.id <application-id-example2>
spark.hadoop.fs.adl.account.example2.oauth2.credential <service-credential-example2>
spark.hadoop.fs.adl.account.example2.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example2>/oauth2/token

次のノートブックは、Azure Data Lake Storage Gen1 に直接アクセスする方法を示しています。 このノートブックの例では、DBFS マウントでのアクセスの使用も示されていますが、これは Databricks on Google Cloud のこのリリースではサポートされていません。

ADLS Gen1 サービスプリンシパル ノートブック

Open notebook in new tab
この記事は役に立ちましたか?