將其他儲存體帳戶新增至 HDInsight
了解如何使用指令碼動作,將額外的 Azure 儲存體帳戶新增至 HDInsight。 這份文件中的步驟會在現有的 HDInsight 叢集中新增儲存體帳戶。 本文適用於儲存體帳戶 (非預設叢集儲存體帳戶),而不是 Azure Data Lake Storage Gen2
等額外的儲存體。
重要
本文件的資訊是關於如何在建立叢集後新增其他儲存體帳戶。 如需在叢集建立期間新增儲存體帳戶的資訊,請參閱使用 Apache Hadoop、Apache Spark、Apache Kafka 等在 HDInsight 中設定叢集。
必要條件
- HDInsight 上的 Hadoop 叢集。 請參閱開始在 Linux 上使用 HDInsight。
- 儲存體帳戶名稱和金鑰。 請參閱管理儲存體帳戶存取金鑰。
- 若使用 PowerShell,您需要 AZ 模組。 請參閱 Azure PowerShell 概觀。
運作方式
在處理期間,指令碼會執行下列動作:
若叢集的 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 叢集的儲存體帳戶名稱。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
從網頁瀏覽器瀏覽至
https://CLUSTERNAME.azurehdinsight.net
,其中CLUSTERNAME
是叢集的名稱。瀏覽至 [HDFS]>[設定]>[進階]>[自訂 core-site]。
觀察開頭為 的
fs.azure.account.key
金鑰。 帳戶名稱是金鑰的一部分,如下列範例圖片所示:
移除儲存體帳戶
從網頁瀏覽器瀏覽至
https://CLUSTERNAME.azurehdinsight.net
,其中CLUSTERNAME
是叢集的名稱。瀏覽至 [HDFS]>[設定]>[進階]>[自訂 core-site]。
移除下列金鑰:
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 叢集