你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将其他存储帐户添加到 HDInsight

了解如何使用脚本操作将其他 Azure 存储帐户添加到 HDInsight。 本文档中的步骤会将存储帐户添加到现有 HDInsight 群集。 本文适用于存储帐户(而不是默认的群集存储帐户),但不适用于额外的存储,例如 Azure Data Lake Storage Gen1Azure 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 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.net/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.net/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.net,其中 CLUSTERNAME 是群集的名称。

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

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

    verification through Apache Ambari.

删除存储帐户

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

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

  3. 删除以下密钥:

    • fs.azure.account.key.<STORAGE_ACCOUNT_NAME>.blob.core.windows.net
    • fs.azure.account.keyprovider.<STORAGE_ACCOUNT_NAME>.blob.core.windows.net

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

已知问题

存储防火墙

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

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

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

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

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

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

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

后续步骤

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