java - 可以将 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();
}
解决方案
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>
推荐阅读
- mongodb - 使用从 Atlas 快照恢复的 mongodb 在本地运行流星时出现问题
- linux - 如何在 linux 命令/脚本中使用 sed、awk 或 grep 从文件中获取值?
- kubernetes - 如何在 kubernetes 的 pod 内维护 udp 会话?
- java - Windows 证书存储与 Java KeyStore:Java 服务器应用程序首选哪个?
- ruby - 使用 cygwin 和 Visual Studio 代码在 Windows 中调试 ruby
- python-3.x - 在 Django 中使用内联保存模型
- javascript - 在迭代 JSON 数组时出现错误:“data.id is undefined”
- ssh - 使用 JMeter 中的 OS Process Sampler 将文件从一个 Windows 远程服务器传输到另一个 Windows 远程服务器的步骤
- c# - 语音合成器阅读不适用于专有名词(文本到语音)
- python - Django get_user_model().objects.create() 密码没有得到散列