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

问题描述

我正在使用 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();
}

标签: javaazurehadoopazure-blob-storage

解决方案


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

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>

有关更多详细信息,请参阅此文档 1文档 2


推荐阅读