hadoop-azure-datalake
模块提供对 Azure Data Lake Store 集成的支持。此支持通过 JAR 文件 azure-datalake-store.jar
提供。
adl
方案进行安全 Webhdfs(即 SSL 加密访问)。setOwner()
、setAcl
、removeAclEntries()
、modifyAclEntries()
接受 UPN 或 OID(对象 ID)作为用户和组名称。对以下操作的部分或不支持
listStatus()
和 getFileStatus()
返回的用户和组信息采用与 Azure Active Directory 中关联的 GUID 形式。Azure Data Lake Storage 访问路径语法为
adl://<Account Name>.azuredatalakestore.net/
有关使用存储的详细信息,请参阅 使用 Azure 门户开始使用 Azure Data Lake Store
使用 Azure Data Lake Storage 需要根据 OAuth2 规范在 HTTPS 标头中提供 OAuth2 持有者令牌。必须从 Azure Active Directory 服务获取有效的 OAuth2 持有者令牌,以供有权访问 Azure Data Lake Storage 帐户的有效用户使用。
Azure Active Directory (Azure AD) 是 Microsoft 的多租户云目录和标识管理服务。请参阅 什么是 ActiveDirectory。
以下部分介绍了 core-site.xml
中的 OAuth2 配置。
可以使用刷新令牌(与用户关联)或客户端凭据(类似于服务主体)来配置凭据。
将以下属性添加到集群的 core-site.xml
<property> <name>fs.adl.oauth2.access.token.provider.type</name> <value>RefreshToken</value> </property>
应用程序必须从与客户端 ID 关联的 Azure Active Directory 服务设置客户端 ID 和 OAuth2 刷新令牌。请参阅 适用于 Java 的 Active Directory 库。
不要共享客户端 ID 和刷新令牌,必须对其保密。
<property> <name>fs.adl.oauth2.client.id</name> <value></value> </property> <property> <name>fs.adl.oauth2.refresh.token</name> <value></value> </property>
访问控制 (IAM)
将以下属性添加到您的core-site.xml
<property> <name>fs.adl.oauth2.access.token.provider.type</name> <value>ClientCredential</value> </property> <property> <name>fs.adl.oauth2.refresh.url</name> <value>TOKEN ENDPOINT FROM STEP 7 ABOVE</value> </property> <property> <name>fs.adl.oauth2.client.id</name> <value>CLIENT ID FROM STEP 7 ABOVE</value> </property> <property> <name>fs.adl.oauth2.credential</name> <value>PASSWORD FROM STEP 7 ABOVE</value> </property>
Azure VM 可以使用 VM 中的标识扩展管理的“服务标识”进行预配。这样做的优点是凭据由扩展管理,并且不必放入 core-site.xml。
要使用 MSI,请修改 VM 部署模板以使用标识扩展。注意您在模板中指定的端口号:这是标识扩展在 VM 中向本地主机公开的令牌服务 REST 终结点的端口号。建议的默认端口号为 50342 - 如果使用建议的端口号,则可以在配置中省略下面的 msi.port 设置。
将以下属性添加到您的core-site.xml
<property> <name>fs.adl.oauth2.access.token.provider.type</name> <value>Msi</value> </property> <property> <name>fs.adl.oauth2.msi.port</name> <value>PORT NUMBER FROM ABOVE (if different from the default of 50342)</value> </property>
注意:此身份验证方法适用于运行交互式工具,但对提交到群集的任务不起作用。
为了使用基于用户的登录,Azure ActiveDirectory 提供了使用设备代码的登录流。
要使用设备代码流,用户必须首先在 Azure 门户中创建一个本机应用程序注册,并将应用程序的客户端 ID 作为配置提供。以下是步骤
将以下属性添加到您的core-site.xml
<property> <name>fs.adl.oauth2.devicecode.clientappid</name> <value>APP ID FROM STEP 5 ABOVE</value> </property>
通常不建议将 DeviceCode 添加为默认令牌提供程序类型。但它可以在使用本地命令时使用
hadoop fs -Dfs.adl.oauth2.access.token.provider.type=DeviceCode -ls ...
运行此命令将打印一个 URL 和设备代码,可用于从任何浏览器(甚至在不同的计算机上,在 ssh 会话之外)登录。一旦登录完成,该命令将继续执行。
在许多 Hadoop 集群中,core-site.xml
文件是世界可读的。为了保护这些凭据,建议您使用凭据提供程序框架安全地存储和访问它们。
所有 ADLS 凭据属性都可以通过凭据提供程序进行保护。有关凭据提供程序 API 的其他阅读内容,请参阅 凭据提供程序 API。
hadoop credential create fs.adl.oauth2.client.id -value 123 -provider localjceks://file/home/foo/adls.jceks hadoop credential create fs.adl.oauth2.refresh.token -value 123 -provider localjceks://file/home/foo/adls.jceks
<property> <name>fs.adl.oauth2.access.token.provider.type</name> <value>RefreshToken</value> </property> <property> <name>hadoop.security.credential.provider.path</name> <value>localjceks://file/home/foo/adls.jceks</value> <description>Path to interrogate for protected credentials.</description> </property>
hadoop distcp [-D fs.adl.oauth2.access.token.provider.type=RefreshToken -D hadoop.security.credential.provider.path=localjceks://file/home/user/adls.jceks] hdfs://<NameNode Hostname>:9001/user/foo/srcDir adl://<Account Name>.azuredatalakestore.net/tgtDir/
注意:您可以选择将提供程序路径属性添加到 distcp
命令行,而不是将特定于作业的配置添加到通用 core-site.xml
。上面的方括号说明了此功能。`
在 core-site.xml
中配置凭据后,任何 Hadoop 组件都可以使用以下格式的 URL 引用该 Azure Data Lake Storage 帐户中的文件
adl://<Account Name>.azuredatalakestore.net/<path>
方案 adl
标识由 Azure Data Lake Storage 支持的 Hadoop 兼容文件系统上的 URL。adl
利用加密的 HTTPS 访问与 Azure Data Lake Storage API 的所有交互。
例如,以下 文件系统 Shell 命令演示了如何访问名为 youraccount
的存储帐户。
hadoop fs -mkdir adl://yourcontainer.azuredatalakestore.net/testDir hadoop fs -put testFile adl://yourcontainer.azuredatalakestore.net/testDir/testFile hadoop fs -cat adl://yourcontainer.azuredatalakestore.net/testDir/testFile test file content
hadoop-azure-datalake
模块提供对在 getFileStatus()
、listStatus()
和 getAclStatus()
调用期间如何表示用户/组信息进行配置的支持。
将以下属性添加到 core-site.xml
<property> <name>adl.feature.ownerandgroup.enableupn</name> <value>true</value> <description> When true : User and Group in FileStatus/AclStatus response is represented as user friendly name as per Azure AD profile. When false (default) : User and Group in FileStatus/AclStatus response is represented by the unique identifier from Azure AD profile (Object ID as GUID). For performance optimization, Recommended default value. </description> </property>
可以通过不同的 ADL 客户端配置访问不同的 ADL 帐户。这也允许使用不同的登录详细信息。
fs.adl
选项均可在每个帐户的基础上进行设置。fs.adl.
前缀替换为 fs.adl.account.ACCOUNTNAME.
来设置特定于帐户的选项,其中 ACCOUNTNAME
是帐户的名称。fs.adl.
值。例如,配置可以具有使用公共帐户 adl://<some-public-account>.azuredatalakestore.net/
的基本配置,以及使用某些专用帐户 adl://myprivateaccount.azuredatalakestore.net/
的特定于帐户的配置
<property> <name>fs.adl.oauth2.client.id</name> <value>CLIENTID</value> </property> <property> <name>fs.adl.oauth2.credential</name> <value>CREDENTIAL</value> </property> <property> <name>fs.adl.account.myprivateaccount.oauth2.client.id</name> <value>CLIENTID1</value> </property> <property> <name>fs.adl.account.myprivateaccount.oauth2.credential</name> <value>CREDENTIAL1</value> </property>
hadoop-azure
模块包括一整套单元测试。通过运行 mvn test
,大多数测试都可以在不进行其他配置的情况下运行。这包括针对模拟存储的测试,模拟存储是 Azure Data Lake Storage 的内存仿真。
可以选择针对 Azure Data Lake Storage 运行测试。要运行这些测试,请使用上述部分中提到的 Adl 帐户信息和以下属性创建 src/test/resources/auth-keys.xml
。
<property> <name>fs.adl.test.contract.enable</name> <value>true</value> </property> <property> <name>test.fs.adl.name</name> <value>adl://yourcontainer.azuredatalakestore.net</value> </property>