分享方式:


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

新增儲存體帳戶

納入下列考量,使用指令碼動作套用變更:

屬性
Bash 指令碼 URI https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh
節點類型 前端
參數 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.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]>[設定]>[進階]>[自訂 core-site]

  3. 觀察開頭為 的 fs.azure.account.key 金鑰。 帳戶名稱是金鑰的一部分,如下列範例圖片所示:

    透過 Apache Ambari 驗證。

移除儲存體帳戶

  1. 從網頁瀏覽器瀏覽至 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 叢集