hadoop-azure 与 DefaultAzureCredential

问题描述 投票:0回答:1

我们开发了一个 Spark 应用程序,并使用 abfss 协议来消费来自 azure 存储的数据。 Abfss 支持各种身份验证方法(如访问密钥、客户端信用、msi 等)。但是,我们想在 python 中使用 AzureDefaultCredential,获取用于存储的令牌并使用它进行身份验证。好处是我们可以使用相同的代码进行本地开发和生产。 如何实现这一目标?

python azure hadoop
1个回答
0
投票

根据此文档,可以选择从下面的数据块访问 adls gen 2。

  1. 具有 Microsoft Entra ID 服务主体的 OAuth 2.0
  2. 共享访问签名 (SAS)
  3. 账户密钥

我建议您使用

OAuth 2.0 with a Microsoft Entra ID service principal

但是您提到了可以使用相同的代码进行本地开发和生产的好处

DefaultAzureCredential

它在本地和生产中的工作方式完全不同,因为

DefaultAzureCredential
遵循此文档中提到的凭据,直到它获得一个。

在本地,它将有所不同,如 Azure CLI,而在生产中,它将有所不同,如 Azure 托管身份

您可以选择上述 3 种方法中的任何一种来代替此方法。

如果您仍希望使用默认凭据,请按照以下步骤操作。

首先,将 Storage Blob Data Contributor 角色授予您的用户分配的与 databricks 关联的托管标识。

接下来,使用默认凭据获取文件系统级别容器上的 SAS 令牌。

代码

account_url = f"https://{accountName}.dfs.core.windows.net"
token_credential = DefaultAzureCredential()

service_client = DataLakeServiceClient(account_url, credential=token_credential)

delegation_key_start_time = datetime.now(timezone.utc)
delegation_key_expiry_time = delegation_key_start_time + timedelta(days=1)

user_delegation_key = service_client.get_user_delegation_key(key_start_time=delegation_key_start_time,key_expiry_time=delegation_key_expiry_time)

start_time = datetime.now(timezone.utc)
expiry_time = start_time + timedelta(days=1)
sas_permissions=FileSystemSasPermissions(read=True,list=True)

containerLevelSasToken = generate_file_system_sas(accountName, file_system_name=fileSystemName,credential=user_delegation_key,expiry=expiry_time,start=start_time,permission=sas_permissions)

接下来,使用此令牌进行配置。

spark.conf.set(f"fs.azure.account.auth.type.{accountName}.dfs.core.windows.net", "SAS")
spark.conf.set(f"fs.azure.sas.token.provider.type.{accountName}.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set(f"fs.azure.sas.fixed.token.{accountName}.dfs.core.windows.net",containerLevelSasToken)

df = spark.read.csv(f"abfss://[email protected]/csv/bulk.csv",header=True)
df.show()

输出:

+-----------+----------+--------------------+--------------------+--------+---------------+------------------------------+-------+
|       Date|    Symbol|       Security Name|         Client Name|Buy/Sell|Quantity Traded|Trade Price / Wght. Avg. Price|Remarks|
+-----------+----------+--------------------+--------------------+--------+---------------+------------------------------+-------+
|29-JUL-2024| 20MICRONS|  20 Microns Limited|GRAVITON RESEARCH...|     BUY|         370921|                        274.92|      -|
|29-JUL-2024| 20MICRONS|  20 Microns Limited|AAKRAYA RESEARCH LLP|     BUY|         261663|                        281.14|      -|
|29-JUL-2024| 20MICRONS|  20 Microns Limited|   QE SECURITIES LLP|     BUY|         186016|                        279.92|      -|
|29-JUL-2024|     AARON|Aaron Industries ...|SILVER LINE VENTU...|     BUY|          67838|                        310.92|      -|
|29-JUL-2024|       AHL|Abans Holdings Li...|VT CAPITAL MARKET...|     BUY|         213586|                        565.09|      -|
|29-JUL-2024|   ALANKIT|     Alankit Limited|GRAVITON RESEARCH...|     BUY|        1567338|                         27.49|      -|

+-----------+----------+--------------------+--------------------+--------+---------------+------------------------------+-------+
only showing top 20 rows
© www.soinside.com 2019 - 2024. All rights reserved.