如何访问数据块笔记本中具有相同容器名称的不同存储帐户
How to access different storage accounts with same container name in databricks notebooks
我有 2 个具有相同容器名称的不同存储帐户。假设 tenant1 和 tenant2 作为存储帐户名称,两个帐户中的容器名称均为“appdata”。我可以创建两个容器并将其挂载到 dbfs。但是我无法通过将存储帐户名称传递给挂载点代码来动态 read/write。由于 dbfs 将 mnt/containername 作为 dbfs 中的挂载点,因此在 databricks 中仅引用最新或先前传递的存储帐户的挂载点。如何在这里实现我的目标?
挂载点应该是静态的,所以你只需要有两个不同的挂载点指向正确的容器,像这样:
/mnt/storage1_appdata
/mnt/storage2_appdata
因此,如果您希望代码是动态的,请使用 f"/mnt/{storage_name}_appdata"
。
不建议动态重新挂载容器 - 当有人正在 reading/writing 数据使用它时重新挂载挂载点时,您可能会遇到神秘错误。
此外,如果您为 cluster/job 指定了正确的配置,您可以直接访问 ADLS(参见 doc)——您甚至可以同时访问两个容器,只需要为两个存储帐户:
spark.conf.set("fs.azure.account.auth.type.<storage-account-name>.dfs.core.windows.net",
"OAuth")
spark.conf.set(
"fs.azure.account.oauth.provider.type.<storage-account-name>.dfs.core.windows.net",
"org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set(
"fs.azure.account.oauth2.client.id.<storage-account-name>.dfs.core.windows.net",
"<application-id>")
spark.conf.set(
"fs.azure.account.oauth2.client.secret.<storage-account-name>.dfs.core.windows.net",
dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"))
spark.conf.set(
"fs.azure.account.oauth2.client.endpoint.<storage-account-name>.dfs.core.windows.net",
"https://login.microsoftonline.com/<directory-id>/oauth2/token")
我有 2 个具有相同容器名称的不同存储帐户。假设 tenant1 和 tenant2 作为存储帐户名称,两个帐户中的容器名称均为“appdata”。我可以创建两个容器并将其挂载到 dbfs。但是我无法通过将存储帐户名称传递给挂载点代码来动态 read/write。由于 dbfs 将 mnt/containername 作为 dbfs 中的挂载点,因此在 databricks 中仅引用最新或先前传递的存储帐户的挂载点。如何在这里实现我的目标?
挂载点应该是静态的,所以你只需要有两个不同的挂载点指向正确的容器,像这样:
/mnt/storage1_appdata
/mnt/storage2_appdata
因此,如果您希望代码是动态的,请使用 f"/mnt/{storage_name}_appdata"
。
不建议动态重新挂载容器 - 当有人正在 reading/writing 数据使用它时重新挂载挂载点时,您可能会遇到神秘错误。
此外,如果您为 cluster/job 指定了正确的配置,您可以直接访问 ADLS(参见 doc)——您甚至可以同时访问两个容器,只需要为两个存储帐户:
spark.conf.set("fs.azure.account.auth.type.<storage-account-name>.dfs.core.windows.net",
"OAuth")
spark.conf.set(
"fs.azure.account.oauth.provider.type.<storage-account-name>.dfs.core.windows.net",
"org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set(
"fs.azure.account.oauth2.client.id.<storage-account-name>.dfs.core.windows.net",
"<application-id>")
spark.conf.set(
"fs.azure.account.oauth2.client.secret.<storage-account-name>.dfs.core.windows.net",
dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"))
spark.conf.set(
"fs.azure.account.oauth2.client.endpoint.<storage-account-name>.dfs.core.windows.net",
"https://login.microsoftonline.com/<directory-id>/oauth2/token")