将其他存储帐户添加到 HDInsight

了解如何使用脚本操作,将其他 Azure 存储帐户添加到 HDInsight。** 本文档中的步骤会将存储帐户添加到现有 HDInsight 群集。** 本文适用于存储帐户**(而不是默认的群集存储帐户),并且不适用于额外的存储,例如 Azure Data Lake Storage Gen2

重要

本文档中的信息是关于在创建群集后将其他存储帐户添加到群集。 有关如何在创建群集期间添加存储帐户的信息,请参阅使用 Apache Hadoop、Apache Spark、Apache Kafka 等设置 HDInsight 中的群集

先决条件

工作原理

在处理期间,脚本执行以下操作:

  • 如果群集的 core-site.xml 配置中已存在该存储帐户,则脚本会退出且不会执行任何进一步操作。

  • 使用密钥验证该存储帐户是否存在并且是否可以访问。

  • 使用群集凭据对密钥进行加密。

  • 将存储帐户添加到 core-site.xml 文件中。

  • 停止并重启 Apache Oozie、Apache Hadoop YARN、Apache Hadoop MapReduce2 和 Apache Hadoop HDFS 服务。 通过停止和重启这些服务来使用新的存储帐户。

警告

不支持在 HDInsight 群集之外的其他位置使用存储帐户。

添加存储帐户

使用脚本操作应用更改时请注意以下事项:

属性 Value
Bash 脚本 URI https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh
节点类型
parameters ACCOUNTNAME ACCOUNTKEY -p(可选)
  • ACCOUNTNAME 是要添加到 HDInsight 群集的存储帐户的名称。
  • ACCOUNTKEYACCOUNTNAME 的访问密钥。
  • -p 是可选项。 如果指定此参数,则密钥不会加密,并以纯文本形式存储在 core-site.xml 文件中。

验证

在 Azure 门户中查看 HDInsight 群集时,选择“属性”____ 下的“存储帐户”____ 项时不会显示通过此脚本操作添加的存储帐户。 Azure PowerShell 和 Azure CLI 也不显示其他存储帐户。 之所以未显示存储信息是因为该脚本只修改群集的 core-site.xml 配置。 使用 Azure 管理 API 检索群集信息时,不会使用此信息。

若要验证其他存储,请使用下面显示的方法之一:

Powershell

脚本将返回与给定群集关联的存储帐户名称。 将 CLUSTERNAME 替换为实际群集名称,然后运行脚本。

# Update values
$clusterName = "CLUSTERNAME"

$creds = Get-Credential -UserName "admin" -Message "Enter the cluster login credentials"

$clusterName = $clusterName.ToLower();

# getting service_config_version
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.cn/api/v1/clusters/$clusterName`?fields=Clusters/desired_service_config_versions/HDFS" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content

$configVersion=$respObj.Clusters.desired_service_config_versions.HDFS.service_config_version

$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.cn/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=$configVersion" `
    -Credential $creds
$respObj = ConvertFrom-Json $resp.Content

# extract account names
$value = ($respObj.items.configurations | Where type -EQ "core-site").properties | Get-Member -membertype properties | Where Name -Like "fs.azure.account.key.*"
foreach ($name in $value ) { $name.Name.Split(".")[4]}

Apache Ambari

  1. 在 Web 浏览器中,导航到 https://CLUSTERNAME.azurehdinsight.cn,其中 CLUSTERNAME 是群集的名称。

  2. 导航到“HDFS”**** > ****“配置” > ****“高级” > ****“自定义 core-site”。

  3. 观察以 fs.azure.account.key 开头的密钥。 如此示例图像中所示,帐户名称将成为密钥的一部分:

    通过 Apache Ambari 进行验证

删除存储帐户

  1. 在 Web 浏览器中,导航到 https://CLUSTERNAME.azurehdinsight.cn, where ,其中 CLUSTERNAME 是你的群集的名称。

  2. 导航到“HDFS”**** > ****“配置” > ****“高级” > ****“自定义 core-site”。

  3. 删除以下密钥:

    • fs.azure.account.key.<STORAGE_ACCOUNT_NAME>.blob.core.chinacloudapi.cn
    • fs.azure.account.keyprovider.<STORAGE_ACCOUNT_NAME>.blob.core.chinacloudapi.cn

删除这些密钥并保存配置后,你需要逐一重启 Oozie、Yarn、MapReduce2、HDFS 和 Hive。

已知问题

存储防火墙

如果选择在“选定网络”上通过“防火墙和虚拟网络”限制来保护存储帐户的安全,**** **** 请务必启用例外“允许受信任的 Microsoft 服务...”,**** 这样 HDInsight 就能访问存储帐户。

更改密钥后,无法访问存储

如果更改了存储帐户的密钥,HDInsight 不再能够访问存储帐户。 HDInsight 使用群集的 core-site.xml 中缓存的密钥副本。 必须更新此缓存的副本,使其匹配新密钥。

再次运行脚本操作不会**** 更新密钥,因为脚本会检查该存储帐户的条目是否已存在。 如果条目已存在,则不会进行任何更改。

若要解决此问题,请执行以下操作:

  1. 删除存储帐户。
  2. 添加存储帐户。

重要

对于附加到群集的主存储帐户,不支持轮换使用存储密钥。

后续步骤

你已学习如何将其他存储帐户添加到现有 HDInsight 群集。 有关脚本操作的详细信息,请参阅使用脚本操作自定义基于 Linux 的 HDInsight 群集