Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

介绍

Hadoop的蔚datalake模块提供与集成支持Azure的数据存储湖。通过JAR文件azure-datalake-store.jar获得此支持。

相关文件

特征

  • 读取和写入存储在Azure Data Lake Storage帐户中的数据。
  • 使用URL使用参考文件系统路径ADL方案用于安全Webhdfs即SSL加密访问。
  • 可以充当MapReduce作业中的数据源或接收器。
  • 在Linux和Windows上都经过测试。
  • 已测试规模。
  • API setOwner()setAclremoveAclEntries()ModifyAclEntries()接受UPN或OID(对象ID)作为用户名和组名。
  • 支持按帐户配置。

局限性

不支持或不支持以下操作:

  • 符号链接上的操作
  • 代理用户
  • 文件截断
  • 文件校验和
  • 文件复制系数
  • Hadoop集群上活动用户的主目录。
  • 扩展属性(XAttrs)操作
  • 快照操作
  • 委托令牌操作
  • 作为listStatus()getFileStatus()返回的用户和​​组信息在Azure Active Directory中以GUID的形式返回。

用法

概念

Azure Data Lake Storage访问路径语法为:

adl:// <帐户名称> .azuredatalakestore.net /

有关使用存储的详细信息,请参阅使用Azure门户使用Azure Data Lake Store入门。

OAuth2支持

根据OAuth2规范,使用Azure Data Lake Storage要求OAuth2承载令牌作为HTTPS标头的一部分存在。必须从Azure Active Directory服务中为有权访问Azure Data Lake Storage帐户的那些有效用户获取有效的OAuth2承载令牌。

Azure Active Directory(Azure AD)是Microsoft的基于多租户云的目录和身份管理服务。请参阅什么是ActiveDirectory

以下各节描述core-site.xml中的OAuth2配置。

配置凭据和文件系统

可以使用刷新令牌(与用户相关联)或客户端证书(与服务主体类似)来配置证书。

使用刷新令牌

将以下属性添加到集群的core-site.xml中

<属性>
  <name> fs.adl.oauth2.access.token.provider.type </ name>
  <value> RefreshToken </ value>
</ property>

应用程序必须从与客户端ID关联的Azure Active Directory服务中设置客户端ID和OAuth2刷新令牌。请参阅Java Active Directory库

不要共享客户端ID和刷新令牌,必须对其保密。

<属性>
  <name> fs.adl.oauth2.client.id </ name>
  <value> </ value>
</ property>

<属性>
  <name> fs.adl.oauth2.refresh.token </ name>
  <value> </ value>
</ property>

使用客户端密钥

生成服务主体
  1. 转到门户
  2. 在左侧导航栏中的服务下,查找Azure Active Directory并单击它。
  3. 使用菜单中的“应用程序注册”,创建“ Web应用程序”。记住您在此处创建的名称-这就是您将作为授权用户添加到您的ADL帐户中的名称。
  4. 通过向导
  5. 创建应用后,转到该应用“设置”下的“键”
  6. 选择一个关键的持续时间,然后点击保存。保存生成的密钥。
  7. 返回到“应用程序注册”页面,然后单击顶部a的“端点”按钮。记下“令牌端点” URL
  8. 记下您需要认证的属性:
    • 您在上面创建的Web应用程序的“应用程序ID”
    • 您刚刚在上方生成的密钥
    • 令牌端点
将服务主体添加到您的ADL帐户
  1. 再次转到门户,并打开您的ADL帐户
  2. 选择访问控制(IAM)
  3. 添加您在上面的第6步中创建的用户名(请注意,该用户名不会显示在列表中,但是如果您搜索该名称,则会找到该用户名)
  4. 添加“所有者”角色
配置core-site.xml

将以下属性添加到您的core-site.xml

<属性>
  <name> fs.adl.oauth2.access.token.provider.type </ name>
  <value> ClientCredential </ value>
</ property>

<属性>
  <name> fs.adl.oauth2.refresh.url </ name>
  <value> STEP 7以上的令牌端点</ value>
</ property>

<属性>
  <name> fs.adl.oauth2.client.id </ name>
  <value>高于STEP 7的客户端ID </ value>
</ property>

<属性>
  <name> fs.adl.oauth2.credential </ name>
  <value> STEP 7以上版本的密码</ value>
</ property>

使用MSI(托管服务身份)

可以使用由VM内的Identity扩展管理的“服务身份”来配置Azure VM。这样做的好处是凭据由扩展名管理,而不必放入core-site.xml中。

要使用MSI,请修改VM部署模板以使用身份扩展。请注意您在模板中指定的端口号:这是VM中的身份扩展名公开给localhost的令牌服务的REST端点的端口号。默认的建议端口号是50342-如果使用了建议的端口号,则可以在配置中省略以下msi.port设置。

配置core-site.xml

将以下属性添加到您的core-site.xml

<属性>
  <name> fs.adl.oauth2.access.token.provider.type </ name>
  <value> Msi </ value>
</ property>

<属性>
  <name> fs.adl.oauth2.msi.port </ name>
  <value>以上端口号(如果与默认值50342不同)</ value>
</ property>

使用设备代码身份验证进行交互式登录

注意:此auth方法适用于运行交互式工具,但不适用于提交给集群的作业。

若要使用基于用户的登录,Azure ActiveDirectory提供使用设备代码的登录流。

若要使用设备代码流,用户必须首先在Azure门户中创建本应用程序注册,并提供该应用程序的客户端ID作为配置。步骤如下:

  1. 转到门户
  2. 在左侧导航栏中的服务下,查找Azure Active Directory,然后单击它。
  3. 使用菜单中的“应用程序注册”,创建“本地应用程序”。
  4. 通过向导
  5. 创建应用后,记下该应用的“应用ID”
  6. 向应用授予权限:
    1. 单击应用程序的“权限”,然后添加“ Azure Data Lake”和“ Windows Azure Service Management API”权限
    2. 单击“授予权限”将权限添加到应用程序

将以下属性添加到您的core-site.xml

<属性>
  <name> fs.adl.oauth2.devicecode.clientappid </ name>
  <value>第5步中的APP ID </ value>
</ property>

通常不希望将DeviceCode添加为默认令牌提供程序类型。但是可以在使用本地命令时使用:

 hadoop fs -Dfs.adl.oauth2.access.token.provider.type = DeviceCode -ls ...

运行此命令将打印一个URL和设备代码,可用于从任何浏览器(即使在ssh会话之外的其他计算机上)登录。登录完成后,命令将继续。

使用凭证提供者保护凭证

在许多Hadoop集群中,core-site.xml文件是世界可读的。为了保护这些凭据,建议您使用凭据提供程序框架来安全地存储和访问它们。

所有ADLS凭据属性都可以由凭据提供程序保护。有关凭证提供者API的更多信息,请参阅凭证提供者API

供应
hadoop凭证创建fs.adl.oauth2.client.id-值123
    -provider localjceks://file/home/foo/adls.jceks
hadoop凭证创建fs.adl.oauth2.refresh.token-值123
    -provider localjceks://file/home/foo/adls.jceks
配置core-site.xml或命令行属性
<属性>
  <name> fs.adl.oauth2.access.token.provider.type </ name>
  <value> RefreshToken </ value>
</ property>
<属性>
  <name> hadoop.security.credential.provider.path </ name>
  <value> localjceks://file/home/foo/adls.jceks </ value>
  <description>用于询问受保护凭据的路径。</ description>
</ property>
运行DistCp
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主机名>:9001 / user / foo / srcDir
    adl:// <帐户名称> .azuredatalakestore.net / tgtDir /

注意:您可以选择将提供程序路径属性添加到distcp命令行,而不是将作业特定的配置添加到通用core-site.xml。上面的方括号说明了此功能。

访问ADL URL

core-site.xml中配置凭据之后,任何Hadoop组件都可以使用以下格式的URL来引用该Azure Data Lake Storage帐户中的文件:

adl:// <帐户名称> .azuredatalakestore.net / <路径>

方案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
测试文件内容

用户/组表示

Hadoop的天青-datalake模块提供支撑,用于配置用户/组的信息是如何在表示getFileStatus() listStatus() ,和getAclStatus()调用..

将以下属性添加到core-site.xml

<属性>
  <name> adl.feature.ownerandgroup.enableupn </ name>
  <value> true </ value>
  <说明>
    当为true时:FileStatus / AclStatus响应中的用户和组为
    根据Azure AD配置文件以用户友好名称表示。

    当为false时(默认):FileStatus / AclStatus中的用户和组
    响应由来自Azure AD的唯一标识符表示
    配置文件(对象ID为GUID)。

    为了优化性能,建议使用默认值。
  </ description>
</ property>

不同ADL帐户的配置

可以使用不同的ADL客户端配置访问不同的ADL帐户。这也允许使用不同的登录详细信息。

  1. 可以在每个帐户的基础上设置所有fs.adl选项。
  2. 通过替换fs.adl设置特定于帐户的选项在带有fs.adl.account.ACCOUNTNAME的选项上添加前缀,其中ACCOUNTNAME是帐户名称。
  3. 连接到帐户时,显式设置的所有选项都将覆盖基本fs.adl。价值观。

例如,配置可以具有使用公共帐户adl:// <some-public-account> .azuredatalakestore.net /的基本配置,以及使用特定私有帐户adl://myprivateaccount.azuredatalakestore的帐户特定配置。。净/

<属性>
  <name> fs.adl.oauth2.client.id </ name>
  <value> CLIENTID </ value>
</ property>

<属性>
  <name> fs.adl.oauth2.credential </ name>
  <value> CREDENTIAL </ value>
</ property>

<属性>
  <name> fs.adl.account.myprivateaccount.oauth2.client.id </ name>
  <value> CLIENTID1 </ value>
</ property>

<属性>
  <name> fs.adl.account.myprivateaccount.oauth2.credential </ name>
  <value> CREDENTIAL1 </ value>
</ property>

测试Azure-Datalake-Store模块

Hadoop的天青模块包括全套的单元测试。通过运行mvn test,大多数测试无需额外配置即可运行。这包括针对模拟存储的测试,该模拟存储是Azure Data Lake Storage的内存模拟。

可以针对Azure Data Lake Storage运行一系列测试。要运行这些测试,请使用上面各节中提到的Adl帐户信息和以下属性创建src / test / resources / auth-keys.xml

<属性>
    <name> fs.adl.test.contract.enable </ name>
    <value> true </ value>
</ property>

<属性>
    <name> test.fs.adl.name </ name>
    <value> adl://yourcontainer.azuredatalakestore.net </ value>
</ property>