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 に直接アクセスできます。
サービスプリンシパルへの権限の作成と付与
選択したアクセス方法に適切な権限を持つサービスプリンシパルが必要で、権限がない場合は、次の手順を実行します。
-
リソースにアクセスできる Microsoft Entra ID (旧称 Azure Active Directory) アプリケーションとサービスプリンシパルを作成します。 次のプロパティに注意してください。
application-id
: クライアント アプリケーションを一意に識別する ID。directory-id
: Microsoft Entra ID インスタンスを一意に識別する ID。service-credential
: アプリケーションが ID を証明するために使用する文字列。
-
登録する サービスプリンシパル, アカウントに対する Contributorなどの正しいAzure Data Lake Storage Gen1 ロールの割り当て を許可します。
SparkAPIsサービスプリンシパルとOAuth 2.0を使用して で直接アクセス
Azure Data Lake Storage Gen1 アカウントから読み取るには、ノートブックで次のスニペットを使用して、サービス資格情報を使用するように Spark を構成できます。
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 を使用してリソースにアクセスできます。 例えば:
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 オプションとして指定する必要があります。
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.net
と adl://example2.azuredatalakestore.net
にアクセスする両方のアカウントの資格情報を設定する場合は、次のように実行できます。
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の設定でも機能します。
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 のこのリリースではサポートされていません。