可以将 hadoop-azure 配置为对 azure blob 使用活动目录(租户、appId、appSecret)身份验证吗

Posted

技术标签:

【中文标题】可以将 hadoop-azure 配置为对 azure blob 使用活动目录(租户、appId、appSecret)身份验证吗【英文标题】:Can hadoop-azure be configured to use active directory (tenant, appId, appSecret) auth for azure blob 【发布时间】:2021-11-30 09:22:09 【问题描述】:

我正在使用 Hadoop-azure lib 从 azure blob 存储读取文件。从文档中,我手动添加了 Hadoop 配置以使用共享访问签名 (sas) 或共享密钥身份验证。而可以通过 Active Directory(租户 ID/客户端 ID/客户端密码)进行身份验证。我找到了为 Azure-Data-Lake-Storage-gen2 配置它的下一种方法,而我仍然很好奇我能否以某种方式将它用于 azure blob (wasb/wasbs blobs)

hadoopConfig.set("fs.azure.account.auth.type", "OAuth");
hadoopConfig.set("fs.azure.account.oauth.provider.type.<storageName>.blob.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider");
hadoopConfig.set("fs.azure.account.oauth2.client.id.<storageName>.blob.core.windows.net", clientId);    
hadoopConfig.set("fs.azure.account.oauth2.client.secret.<storageName>.blob.core.windows.net", clientSecret);
hadoopConfig.set("fs.azure.account.oauth2.client.endpoint.<storageName>.blob.core.windows.net", "https://login.microsoftonline.com/" + tenantId
   +"/oauth2/token");

^ 不适用于 AZURE BLOB(异常仍然要求我提供共享密钥)

Hadoop-azure 中有 org.apache.hadoop.fs.azurebfs.oauth2.AzureADAuthenticator 类,但我不知道如何将它连接到配置。

我的主要代码:

public void readFile(String blobURI) 
    InputFile file = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(blobURI), hadoopConfig);
reader = AvroParquetReader.<GenericRecord> builder(file).build();

【问题讨论】:

【参考方案1】:

Hadoop中的ABFS(azure blob文件系统)支持读取和写入存储在一个Azure Blob Storage帐户中的数据,还支持配置多个Azure Blob Storage帐户

ABFS 驱动程序的所有配置都存储在core-site.xml 配置文件中

配置 Hadoop 以访问 ADLS 就是设置 Azure Data Lake 文件系统。编辑您的 core-site.xml,其中包含集群范围的配置。 core-site.xml 位于%HADOOP_HOME%\etc\hadoop 需要像这样设置配置

<configuration>  <property>
        <name>dfs.adls.oauth2.access.token.provider.type</name>
        <value>ClientCredential</value>
  </property>
  
  <property>
      <name>dfs.adls.oauth2.refresh.url</name>
      <value>YOUR TOKEN ENDPOINT</value>
  </property>  <property>
      <name>dfs.adls.oauth2.client.id</name>
      <value>YOUR CLIENT ID</value>
  </property>  <property>
      <name>dfs.adls.oauth2.credential</name>
      <value>YOUR CLIENT SECRET</value>
  </property>  <property>
      <name>fs.adl.impl</name>
      <value>org.apache.hadoop.fs.adl.AdlFileSystem</value>
  </property>  <property>
      <name>fs.AbstractFileSystem.adl.impl</name>
      <value>org.apache.hadoop.fs.adl.Adl</value>
  </property>  </configuration>

更多详情请参考document1和document2

【讨论】:

以上是关于可以将 hadoop-azure 配置为对 azure blob 使用活动目录(租户、appId、appSecret)身份验证吗的主要内容,如果未能解决你的问题,请参考以下文章

如何自动将构建日期转换为对我的代码可见的常量?

如何将 QWindow 设置为对鼠标和其他事件透明?

将 iOS 应用设置为对 App Store 上的选定用户可见

我们可以使用 Azure 存储队列作为事件源吗?

如何将 c# 数组转换为 JSON,其中一个数组项属性值设置为对另一个项的引用

将强引用转换为对自身的弱引用