共用方式為


將其他儲存體帳戶新增至 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
節點類型 前端
參數 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 叢集