将其他存储帐户添加到 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.chinacloudapi.cn/linuxaddstorageaccountv01/add-storage-account-v01.sh
节点类型
parameters ACCOUNTNAMEACCOUNTKEY-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,其中 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。

已知问题

存储防火墙

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

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

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

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

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

  • 有关如何轮换访问密钥的信息,请参阅更新存储帐户访问密钥

  • 还可以删除存储帐户,然后再将该存储帐户添加回来。

后续步骤

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