hadoop-azure-datalake模块提供了与Azure Data Lake Store集成的支持。该支持通过JAR文件azure-datalake-store.jar实现。
adl方案引用文件系统路径的URL,用于Secure Webhdfs,即SSL加密访问。setOwner(), setAcl, removeAclEntries(), modifyAclEntries() 接受UPN或OID(对象ID)作为用户和组名称。以下操作部分或完全不支持:
listStatus()和getFileStatus()所示。Azure Data Lake Storage访问路径语法为:
adl://<Account Name>.azuredatalakestore.net/
有关使用存储的详细信息,请参阅通过Azure门户开始使用Azure Data Lake Store
使用Azure Data Lake Storage需要按照OAuth2规范,在HTTPS头部包含一个OAuth2持有者令牌。有效的OAuth2持有者令牌必须从Azure Active Directory服务获取,且仅限拥有访问Azure Data Lake Storage账户权限的有效用户。
Azure Active Directory (Azure AD) 是微软的多租户云基础目录和身份管理服务。请参阅什么是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刷新令牌。请参阅Active Directory Library For Java。
请勿共享客户端ID和刷新令牌,这些信息必须严格保密。
<property> <name>fs.adl.oauth2.client.id</name> <value></value> </property> <property> <name>fs.adl.oauth2.refresh.token</name> <value></value> </property>
Access control (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内的Identity扩展管理的"服务身份"。这样做的优势是凭据由扩展管理,无需放入core-site.xml中。
要使用MSI,需修改虚拟机部署模板以启用身份扩展。请注意在模板中指定的端口号:这是由虚拟机内身份扩展暴露给本地主机的令牌服务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的信息,请参阅Credential Provider 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进行所有交互。
例如,以下FileSystem 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://的基础配置,以及使用某个私有账户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运行一系列测试。要运行这些测试,请创建src/test/resources/auth-keys.xml文件,其中包含上述章节提到的Adl账户信息以及以下属性。
<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>