将其他存储帐户添加到 HDInsight

了解如何使用脚本操作,将其他 Azure 存储帐户添加到 HDInsight。 本文档中的步骤会将存储帐户添加到基于 Linux 的现有 HDInsight 群集。

Important

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

工作原理

此脚本采用以下参数:

  • Azure 存储帐户名称:要添加到 HDInsight 群集的存储帐户的名称。 运行脚本后,HDInsight 能够读取此存储帐户中存储的数据并将数据写入到此存储帐户中。

  • Azure 存储帐户密钥:授予对存储帐户的访问权限的密钥。

  • -p(可选):如果指定此参数,则密钥不会加密,并以纯文本形式存储在 core-site.xml 文件中。

处理过程中,此脚本执行以下操作:

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

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

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

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

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

Warning

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

脚本

脚本位置https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh

要求

  • 必须将该脚本应用于 头节点

使用脚本

可以通过 Azure 门户、Azure PowerShell 或 Azure CLI 1.0 使用此脚本。 有关详细信息,请参阅使用脚本操作自定义基于 Linux 的 HDInsight 群集文档。

Important

当使用自定义文档中所提供的步骤时,请使用以下信息来应用此脚本:

已知问题

存储帐户未显示在 Azure 门户或工具中

在 Azure 门户中查看 HDInsight 群集时,选择“属性”下的“存储帐户”项,则不会显示通过此脚本操作添加的存储帐户。 Azure PowerShell 和 Azure CLI 也不会显示其他存储帐户。

之所以未显示存储信息是因为该脚本只修改群集的 core-site.xml 配置。 使用 Azure 管理 API 检索群集信息时,未使用此信息。

若要查看使用此脚本添加到群集的存储帐户信息,请使用 Ambari REST API。 使用以下命令检索此群集信息:

$creds = Get-Credential -UserName "admin" -Message "Enter the cluster login credentials"
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.cn/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" `
    -Credential $creds
$respObj = ConvertFrom-Json $resp.Content
$respObj.items.configurations.properties."fs.azure.account.key.$storageAccountName.blob.core.chinacloudapi.cn"

Note

$clusterName 设置为 HDInsight 群集的名称。 将 $storageAccountName 设置为存储帐户的名称。 出现提示时,输入群集登录名 (admin) 和密码。

curl -u admin:PASSWORD -G "https://CLUSTERNAME.azurehdinsight.cn/api/v1/clusters/CLUSTERNAME/configurations/service_config_versions?service_name=HDFS&service_config_version=1" | jq '.items[].configurations[].properties["fs.azure.account.key.$STORAGEACCOUNTNAME.blob.core.chinacloudapi.cn"] | select(. != null)'

Note

$PASSWORD 设置为群集登录名 (admin) 的帐户密码。 将 $CLUSTERNAME 设置为 HDInsight 群集的名称。 将 $STORAGEACCOUNTNAME 设置为存储帐户的名称。

此示例使用 curl (http://curl.haxx.se/)jq (https://stedolan.github.io/jq/) 检索和分析 JSON 数据。

使用此命令时,将 CLUSTERNAME 替换为 HDInsight 群集的名称。 将 PASSWORD 替换为群集的 HTTP 登录密码。 将 STORAGEACCOUNT 替换为使用脚本操作添加的存储帐户的名称。 此命令返回的信息类似于以下文本:

"MIIB+gYJKoZIhvcNAQcDoIIB6zCCAecCAQAxggFaMIIBVgIBADA+MCoxKDAmBgNVBAMTH2RiZW5jcnlwdGlvbi5henVyZWhkaW5zaWdodC5uZXQCEA6GDZMW1oiESKFHFOOEgjcwDQYJKoZIhvcNAQEBBQAEggEATIuO8MJ45KEQAYBQld7WaRkJOWqaCLwFub9zNpscrquA2f3o0emy9Vr6vu5cD3GTt7PmaAF0pvssbKVMf/Z8yRpHmeezSco2y7e9Qd7xJKRLYtRHm80fsjiBHSW9CYkQwxHaOqdR7DBhZyhnj+DHhODsIO2FGM8MxWk4fgBRVO6CZ5eTmZ6KVR8wYbFLi8YZXb7GkUEeSn2PsjrKGiQjtpXw1RAyanCagr5vlg8CicZg1HuhCHWf/RYFWM3EBbVz+uFZPR3BqTgbvBhWYXRJaISwssvxotppe0ikevnEgaBYrflB2P+PVrwPTZ7f36HQcn4ifY1WRJQ4qRaUxdYEfzCBgwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAhRdscgRV3wmYBg3j/T1aEnO3wLWCRpgZa16MWqmfQPuansKHjLwbZjTpeirqUAQpZVyXdK/w4gKlK+t1heNsNo1Wwqu+Y47bSAX1k9Ud7+Ed2oETDI7724IJ213YeGxvu4Ngcf2eHW+FRK"

此文本是用于访问存储帐户的加密密钥的示例。

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

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

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

若要解决此问题,必须删除存储帐户的现有条目。 使用以下步骤删除现有条目:

  1. 在 Web 浏览器中,打开 HDInsight 群集的 Ambari Web UI。 该 URI 为 https://CLUSTERNAME.azurehdinsight.cn。CLUSTERNAME 替换为群集名称。

    出现提示时,输入群集的 HTTP 登录用户和密码。

  2. 从页面左侧的服务列表中选择“HDFS” 。 然后,在页面中心选择 “配置” 选项卡。

  3. 在“筛选...”字段中,输入值 fs.azure.account。 这会返回已添加到群集的任何其他存储帐户的条目。 条目的类型为两种:keyproviderkey。 这两种类型都包含存储帐户名称,作为密钥名称的一部分。

    以下是名为 mystorage 的存储帐户的示例条目:

     fs.azure.account.keyprovider.mystorage.blob.core.chinacloudapi.cn
     fs.azure.account.key.mystorage.blob.core.chinacloudapi.cn
    
  4. 确定该存储帐户的密钥后,需要使用该条目右侧的红色“-”图标删除该条目。 然后使用 “保存” 按钮保存更改。

  5. 保存更改后,使用脚本操作将该存储帐户和新的密钥值添加到群集。

性能不佳

如果存储帐户与 HDInsight 群集不在同一个区域中,可能会遇到性能不佳的情况。 访问不同区域中的数据会在区域 Azure 数据中心外部跨公共 Internet 发送网络流量,从而会导致延迟。

Warning

不支持在 HDInsight 群集之外的其他区域中使用存储帐户。

额外费用

如果存储帐户与 HDInsight 群集位于不同的区域,则可能会在 Azure 帐单上发现额外的出口费用。 当数据离开区域数据中心时,将收取出口费用。 即使流量发往另一区域中的另一个 Azure 数据中心,也将收取此费用。

Warning

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

后续步骤

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