HDInsight にストレージ アカウントを追加する

HDInsight に Azure Storage "アカウント" を追加するためにスクリプト アクションを使用する方法について説明します。 このドキュメントの手順では、既存の 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 クラスターに追加するストレージ アカウントの名前です。
  • ACCOUNTKEYACCOUNTNAME のアクセス キーです。
  • -p はオプションです。 指定した場合、キーは暗号化されず、プレーンテキストとして core-site.xml ファイルに格納されます。

検証

Azure portal で 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. Web ブラウザーから、https://CLUSTERNAME.azurehdinsight.net に移動します。ここで、CLUSTERNAME はクラスターの名前です。

  2. [HDFS][構成][詳細][カスタム core-site] の順に移動します。

  3. fs.azure.account.key で始まるキーを確認します。 このサンプル イメージに示すように、アカウント名はキーの一部になります。

    Apache Ambari による検証

ストレージ アカウントの削除

  1. Web ブラウザーから、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 を 1 つずつ再起動する必要があります。

既知の問題

ストレージ ファイアウォール

[選択されたネットワーク][ファイアウォールと仮想ネットワーク] に関する制限を使用してストレージ アカウントをセキュリティで保護するように選択した場合、[信頼された Microsoft サービスによる...] の例外を有効にして、HDInsight でストレージ アカウントにアクセスできるようにしてください。

キーの変更後にストレージにアクセスできない

ストレージ アカウントのキーを変更すると、HDInsight はストレージ アカウントにアクセスできなくなります。 HDInsight は、クラスターの core-site.xml 内のキャッシュされたキーのコピーを使用します。 このキャッシュされたコピーは、新しいキーに一致するように更新する必要があります。

スクリプト アクションを再実行しても、キーは更新されません。スクリプトで、ストレージ アカウントのエントリが既に存在するかどうかが確認されます。 エントリが既に存在する場合、いかなる変更もしません。

この問題を回避するには、次のようにします。

次のステップ

既存の HDInsight クラスターにストレージ アカウントを追加する方法について説明しました。 スクリプト アクションの詳細については、「スクリプト アクションを使用して Linux ベースの HDInsight クラスターをカスタマイズする」を参照してください。