將其他記憶體帳戶新增至 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 叢集不同的位置使用記憶體帳戶。

新增記憶體帳戶

使用 文稿動作 以下列考慮來套用變更:

屬性
Bash 指令碼 URI https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh
節點類型 Head
參數 ACCOUNTNAMEACCOUNTKEY-p (選用)
  • ACCOUNTNAME 是要新增至 HDInsight 叢集的記憶體帳戶名稱。
  • ACCOUNTKEY 是的 ACCOUNTNAME存取金鑰。
  • -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. 從網頁瀏覽器瀏覽至 https://CLUSTERNAME.azurehdinsight.net,其中 CLUSTERNAME 是叢集的名稱。

  2. 流覽至 [HDFS>設定>進階>自定義核心網站]。

  3. 觀察開頭為 fs.azure.account.key的索引鍵。 帳戶名稱是金鑰的一部分,如此範例映像所示:

    verification through Apache Ambari.

拿掉記憶體帳戶

  1. 從網頁瀏覽器瀏覽至 https://CLUSTERNAME.azurehdinsight.net,其中 CLUSTERNAME 是叢集的名稱。

  2. 流覽至 [HDFS>設定>進階>自定義核心網站]。

  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 叢集