Azure HDInsight には、クラスターをカスタマイズするためにカスタム スクリプトを呼び出すスクリプト アクション と呼ばれる構成方法が用意されています。 これらのスクリプトは、追加のコンポーネントをインストールし、構成設定を変更するために使用されます。 スクリプト アクションは、クラスターの作成時または作成後に使用できます。
スクリプト アクションは、HDInsight アプリケーションとして Azure Marketplace に発行することもできます。 HDInsight アプリケーションの詳細については、「 Azure Marketplace で HDInsight アプリケーションを発行する」を参照してください。
スクリプト アクションについて
スクリプト アクションは、HDInsight クラスター内のノードで実行される Bash スクリプトです。 スクリプト アクションの特性と機能は次のとおりです。
Bash スクリプト URI (ファイルにアクセスする場所) には、HDInsight リソース プロバイダーとクラスターからアクセスできる必要があります。
可能な記憶域の場所を次に示します。
通常の (ESP 以外の) クラスターの場合:
HDInsight クラスターのプライマリ または追加のストレージ アカウントである Azure Storage アカウント内の BLOB。 HDInsight には、クラスターの作成時に、これらの種類の両方のストレージ アカウントへのアクセス権が付与されます。
Important
この Azure Storage アカウントでストレージ キーをローテーションしないでください。これにより、そこに格納されているスクリプトを含む後続のスクリプト アクションが失敗するためです。
Data Lake Storage Gen1: HDInsight が Data Lake Storage へのアクセスに使用するサービス プリンシパルには、スクリプトへの読み取りアクセス権が必要です。 Bash スクリプト URI 形式が
adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file。Data Lake Storage Gen2 は、スクリプト アクションに使用することはお勧めしません。
abfs://は Bash スクリプト URI ではサポートされていません。https://URI は可能ですが、パブリック アクセス権を持ち、HDInsight リソース プロバイダー用にファイアウォールが開いているコンテナーでは機能するため、推奨されません。https://パスを介してアクセスできるパブリック ファイル共有サービス。 たとえば、Azure Blob、GitHub、OneDrive などです。 URI の例については、「 スクリプト アクション スクリプトの例」を参照してください。
ESP を使用するクラスターでは、
wasb://URI、wasbs://URI、またはhttp[s]://URI がサポートされます。
スクリプト アクションは、特定のノード タイプでのみ実行するように制限できます。 たとえば、ヘッド ノードまたはワーカー ノードがあります。
スクリプト アクションは、永続化することも 、アドホックにすることもできます。
- 永続化されたスクリプト アクションには一意の名前が必要です。 永続化されたスクリプトは、スケーリング操作を通じてクラスターに追加された新しいワーカー ノードをカスタマイズするために使用されます。 永続化されたスクリプトでは、スケーリング操作が発生したときに、別のノードの種類に変更が適用される場合もあります。 たとえば、ヘッド ノードです。
- アドホック スクリプトは永続化されません。 クラスターの作成時に使用されるスクリプト アクションは自動的に永続化されます。 スクリプトの実行後にクラスターに追加されたワーカー ノードには適用されません。 その後、 アドホック スクリプトを永続化されたスクリプトに昇格したり、永続化されたスクリプトを アドホック スクリプトに降格したりできます。 失敗したスクリプトは、明示的に指定した場合でも永続化されません。
スクリプト アクションは、実行中にスクリプトによって使用されるパラメーターを受け取ることができます。
スクリプト アクションは、クラスター ノードに対するルート レベルの特権で実行されます。
スクリプト アクションは、Azure portal、Azure PowerShell、Azure CLI、または HDInsight .NET SDK を使用して使用できます。
VM 上のサービス ファイルを削除または変更するスクリプト アクションは、サービスの正常性と可用性に影響する可能性があります。
クラスターは、実行されたすべてのスクリプトの履歴を保持します。 履歴は、昇格または降格操作のスクリプトの ID を見つける必要がある場合に役立ちます。
Important
スクリプト アクションによって行われた変更を自動的に元に戻す方法はありません。 変更を手動で元に戻すか、または変更を元に戻すスクリプトを提供します。
Permissions
ドメイン参加済み HDInsight クラスターの場合、クラスターでスクリプト アクションを使用する場合に必要な 2 つの Apache Ambari アクセス許可があります。
- AMBARI.RUN_CUSTOM_COMMAND。 Ambari 管理者ロールには、既定でこのアクセス許可があります。
- CLUSTER.RUN_CUSTOM_COMMAND。 既定では、HDInsight クラスター管理者と Ambari 管理者の両方にこのアクセス許可があります。
ドメイン参加済み HDInsight でのアクセス許可の操作の詳細については、「 Enterprise セキュリティ パッケージを使用した HDInsight クラスターの管理」を参照してください。
アクセス制御
Azure サブスクリプションの管理者または所有者でない場合、アカウントには、少なくとも HDInsight クラスターを含むリソース グループへの Contributor アクセス権が必要です。
Azure サブスクリプションへの少なくとも共同作成者アクセス権を持つユーザーが、プロバイダーを以前に登録している必要があります。 プロバイダーの登録は、サブスクリプションへの共同作成者アクセス権を持つユーザーがリソースを作成するときに発生します。 リソースを作成しない場合は、「 REST を使用してプロバイダーを登録する」を参照してください。
アクセス管理の操作の詳細については、以下を参照してください。
スクリプト アクションを使用するためのメソッド
クラスターの初回作成時に実行するスクリプト アクションを構成するか、既存のクラスターで実行するかを選択できます。
クラスター作成プロセスでのスクリプト アクション
クラスターの作成時に使用されるスクリプト アクションは、既存のクラスターで実行されるスクリプト アクションとは少し異なります。
- スクリプトは自動的に永続化されます。
- スクリプトでエラーが発生すると、クラスターの作成プロセスが失敗する可能性があります。
次の図は、作成プロセス中にスクリプト アクションが実行されるタイミングを示しています。
このスクリプトは、HDInsight の構成中に実行されます。 スクリプトは、クラスター内のすべての指定されたノードで並列に実行されます。 ノードに対するルート特権で実行されます。
Apache Hadoop 関連のサービスを含め、サービスの停止や開始などの操作を実行できます。 サービスを停止する場合は、スクリプトが完了する前に、Ambari やその他の Hadoop 関連のサービスが実行されていることを確認します。 これらの必要なサービスによって、クラスターの作成中の正常性と状態が決まります。
クラスターの作成時に、一度に多数のスクリプト アクションを使用できます。 これらのスクリプトは、指定された順序で呼び出されます。
注
(クラスター作成時に) クラスター ストレージとして指定されているもの以外の他のストレージ アカウントにスクリプトが存在する場合は、パブリック アクセスが必要になります。
Important
スクリプト アクションは 60 分以内に完了するか、タイムアウトする必要があります。クラスターのプロビジョニング中、スクリプトは他のセットアップおよび構成プロセスと同時に実行されます。 CPU 時間やネットワーク帯域幅などのリソースの競合により、スクリプトの完了に開発環境よりも時間がかかる場合があります。
スクリプトの実行にかかる時間を最小限に抑えるには、ソースからアプリケーションをダウンロードしてコンパイルするなどのタスクを回避します。 アプリケーションをプリコンパイルし、バイナリを Azure Storage に格納します。
実行中のクラスターでのスクリプト アクション
既に実行されているクラスターでスクリプトが失敗しても、クラスターは自動的に失敗状態に変わりません。 スクリプトが完了すると、クラスターは実行中の状態に戻ります。 クラスターが実行中の状態であっても、失敗したスクリプトが壊れている可能性があります。 たとえば、スクリプトによって、クラスターに必要なファイルが削除される場合があります。
スクリプト アクションは、ルート特権で実行されます。 スクリプトをクラスターに適用する前に、スクリプトの動作を理解しておく必要があります。
クラスターにスクリプトを適用すると、クラスターの状態が [実行中 ] から [承認済み] に変わります。 その後、 HDInsight の構成 に変更され、最後にスクリプトが正常に実行されるために [実行中 ] に戻ります。 スクリプトの状態は、スクリプト アクション履歴に記録されます。 この情報は、スクリプトが成功したか失敗したかを示します。 たとえば、 Get-AzHDInsightScriptActionHistory PowerShell コマンドレットはスクリプトの状態を表示します。 次のテキストのような情報が返されます。
ScriptExecutionId : 635918532516474303
StartTime : 8/14/2017 7:40:55 PM
EndTime : 8/14/2017 7:41:05 PM
Status : Succeeded
Important
クラスターの作成後にクラスター ユーザー、管理者、パスワードを変更すると、このクラスターに対して実行されるスクリプト アクションが失敗する可能性があります。 ワーカー ノードを対象とする永続化されたスクリプト アクションがある場合、クラスターのスケーリング時にこれらのスクリプトが失敗する可能性があります。
スクリプト アクションのサンプル スクリプト
スクリプト アクション スクリプトは、次のユーティリティを使用して使用できます。
- Azure portal
- Azure PowerShell
- Azure CLI
- HDInsight .NET SDK
HDInsight には、HDInsight クラスターに次のコンポーネントをインストールするためのスクリプトが用意されています。
| 名前 | スクリプト |
|---|---|
| Azure Storage アカウントを追加する |
https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh。
HDInsight へのストレージ アカウントの追加を参照してください。 |
| Hue のインストール |
https://hdiconfigactions.blob.core.windows.net/linuxhueconfigactionv02/install-hue-uber-v02.sh。
HDInsight Hadoop クラスターへの Hue のインストールと使用に関する記事を参照してください。 |
| Hive ライブラリを事前に読み込む |
https://hdiconfigactions.blob.core.windows.net/linuxsetupcustomhivelibsv01/setup-customhivelibs-v01.sh。
HDInsight クラスターの作成時にカスタム Apache Hive ライブラリを追加するを参照してください。 |
クラスターの作成時のスクリプト アクション
このセクションでは、HDInsight クラスターを作成するときにスクリプト アクションを使用するさまざまな方法について説明します。
Azure portal からのクラスターの作成時にスクリプト アクションを使用する
「Azure portal を使用して HDInsight で Linux ベースのクラスターを作成する」の説明に従って、クラスターの作成を開始します。 [構成 + 価格] タブで、[+ スクリプト アクションの追加] を選択します。
[ スクリプトの選択 ] エントリを使用して、事前に作成されたスクリプトを選択します。 カスタム スクリプトを使用するには、[カスタム] を選択 します。 次に、スクリプトの 名前 と Bash スクリプト URI を 指定します。
次の表では、フォーム上の要素について説明します。
プロパティ 価値 スクリプトを選択する 独自のスクリプトを使用するには、[ カスタム] を選択します。 それ以外の場合は、指定されたスクリプトのいずれかを選択します。 名前 スクリプト アクションの名前を指定します。 Bash スクリプト URI スクリプトの URI を指定します。 ヘッド/ワーカー/ズーキーパー スクリプトを実行するノード ( Head、 Worker、 ZooKeeper) を指定します。 パラメーター スクリプトで必要な場合は、パラメーターを指定します。 スケーリング操作中にスクリプトが適用されるようにするには、 このスクリプト アクション エントリを永続化します。
[ 作成] を選択してスクリプトを保存します。 次に、[ + 新規送信] を使用して、別のスクリプトを追加できます。
スクリプトの追加が完了したら、[ 構成 + 価格 ] タブに戻ります。
残りのクラスター作成手順を通常どおりに完了します。
Azure Resource Manager テンプレートからスクリプト アクションを使用する
スクリプト アクションは、Azure Resource Manager テンプレートで使用できます。 例については、 HDInsight Linux クラスターの作成とスクリプト アクションの実行に関する記事を参照してください。
この例では、次のコードを使用してスクリプト アクションを追加します。
"scriptActions": [
{
"name": "setenvironmentvariable",
"uri": "[parameters('scriptActionUri')]",
"parameters": "headnode"
}
]
テンプレートをデプロイする方法の詳細については、以下を参照してください。
- Resource Manager テンプレートと Azure PowerShell を使用してリソースをデプロイする
- Resource Manager テンプレートと Azure CLI を使用してリソースをデプロイする
Azure PowerShell からのクラスターの作成時にスクリプト アクションを使用する
このセクションでは、 Add-AzHDInsightScriptAction コマンドレットを使用してスクリプトを呼び出してクラスターをカスタマイズします。 開始する前に、必ず Azure PowerShell をインストールして構成してください。 これらの PowerShell コマンドを使用するには、 AZ モジュールが必要です。
次のスクリプトは、PowerShell を使用してクラスターを作成するときにスクリプト アクションを適用する方法を示しています。
# Login to your Azure subscription
$context = Get-AzContext
if ($context -eq $null)
{
Connect-AzAccount
}
$context
# If you have multiple subscriptions, set the one to use
# $subscriptionID = "<subscription ID to use>"
# Select-AzSubscription -SubscriptionId $subscriptionID
# Get user input/default values
$resourceGroupName = Read-Host -Prompt "Enter the resource group name"
$___location = Read-Host -Prompt "Enter the Azure region to create resources in"
# Create the resource group
New-AzResourceGroup -Name $resourceGroupName -Location $___location
$defaultStorageAccountName = Read-Host -Prompt "Enter the name of the storage account"
# Create an Azure storae account and container
New-AzStorageAccount `
-ResourceGroupName $resourceGroupName `
-Name $defaultStorageAccountName `
-Type Standard_LRS `
-Location $___location
$defaultStorageAccountKey = (Get-AzStorageAccountKey `
-ResourceGroupName $resourceGroupName `
-Name $defaultStorageAccountName)[0].Value
$defaultStorageContext = New-AzStorageContext `
-StorageAccountName $defaultStorageAccountName `
-StorageAccountKey $defaultStorageAccountKey
# Get information for the HDInsight cluster
$clusterName = Read-Host -Prompt "Enter the name of the HDInsight cluster"
# Cluster login is used to secure HTTPS services hosted on the cluster
$httpCredential = Get-Credential -Message "Enter Cluster login credentials" -UserName "admin"
# SSH user is used to remotely connect to the cluster using SSH clients
$sshCredential = Get-Credential -Message "Enter SSH user credentials"
# Default cluster size (# of worker nodes), version, type, and OS
$clusterSizeInNodes = "4"
$clusterVersion = "3.5"
$clusterType = "Hadoop"
$clusterOS = "Linux"
# Set the storage container name to the cluster name
$defaultBlobContainerName = $clusterName
# Create a blob container. This holds the default data store for the cluster.
New-AzStorageContainer `
-Name $clusterName -Context $defaultStorageContext
# Create an HDInsight configuration object
$config = New-AzHDInsightClusterConfig
# Add the script action
$scriptActionUri="https://hdiconfigactions.blob.core.windows.net/linuxgiraphconfigactionv01/giraph-installer-v01.sh"
# Add for the head nodes
$config = Add-AzHDInsightScriptAction `
-Config $config `
-Name "Install Giraph" `
-NodeType HeadNode `
-Uri $scriptActionUri
# Continue adding the script action for any other node types
# that it must run on.
$config = Add-AzHDInsightScriptAction `
-Config $config `
-Name "Install Giraph" `
-NodeType WorkerNode `
-Uri $scriptActionUri
# Create the cluster using the configuration object
New-AzHDInsightCluster `
-Config $config `
-ResourceGroupName $resourceGroupName `
-ClusterName $clusterName `
-Location $___location `
-ClusterSizeInNodes $clusterSizeInNodes `
-ClusterType $clusterType `
-OSType $clusterOS `
-Version $clusterVersion `
-HttpCredential $httpCredential `
-DefaultStorageAccountName "$defaultStorageAccountName.blob.core.windows.net" `
-DefaultStorageAccountKey $defaultStorageAccountKey `
-DefaultStorageContainer $containerName `
-SshCredential $sshCredential
クラスターが作成されるまでに数分かかる場合があります。
HDInsight .NET SDK からのクラスターの作成時にスクリプト アクションを使用する
HDInsight .NET SDK には、.NET アプリケーションから HDInsight を簡単に操作できるクライアント ライブラリが用意されています。 コード サンプルについては、「 スクリプト アクション」を参照してください。
実行中のクラスターに対するスクリプト アクション
このセクションでは、実行中のクラスターにスクリプト アクションを適用する方法について説明します。
Azure portal から実行中のクラスターにスクリプト アクションを適用する
Azure portal にサインインし、クラスターを見つけます。
既定のビューで、[ 設定] で [ スクリプト アクション] を選択します。
[ スクリプト アクション ] ページの上部にある [ + 新規送信] を選択します。
[ スクリプトの選択 ] エントリを使用して、事前に作成されたスクリプトを選択します。 カスタム スクリプトを使用するには、[カスタム] を選択 します。 次に、スクリプトの 名前 と Bash スクリプト URI を 指定します。
次の表では、フォーム上の要素について説明します。
プロパティ 価値 スクリプトを選択する 独自のスクリプトを使用するには、 カスタムを選択します。 それ以外の場合は、指定されたスクリプトを選択します。 名前 スクリプト アクションの名前を指定します。 Bash スクリプト URI スクリプトの URI を指定します。 リーダー/作業者/Zookeeper スクリプトを実行するノード ( Head、 Worker、 ZooKeeper) を指定します。 パラメーター スクリプトで必要な場合は、パラメーターを指定します。 スクリプトがスケーリング操作中に適用されるようにするためには、このスクリプト アクション エントリを永続化させる を使用します。
最後に、[ 作成 ] ボタンを選択して、クラスターにスクリプトを適用します。
Azure PowerShell から実行中のクラスターにスクリプト アクションを適用する
これらの PowerShell コマンドを使用するには、 AZ モジュールが必要です。 次の例は、実行中のクラスターにスクリプト アクションを適用する方法を示しています。
# Get information for the HDInsight cluster
$clusterName = Read-Host -Prompt "Enter the name of the HDInsight cluster"
$scriptActionName = Read-Host -Prompt "Enter the name of the script action"
$scriptActionUri = Read-Host -Prompt "Enter the URI of the script action"
# The node types that the script action is applied to
$nodeTypes = "headnode", "workernode"
# Apply the script and mark as persistent
Submit-AzHDInsightScriptAction -ClusterName $clusterName `
-Name $scriptActionName `
-Uri $scriptActionUri `
-NodeTypes $nodeTypes `
-PersistOnSuccess
操作が完了すると、次のテキストのような情報が表示されます。
OperationState : Succeeded
ErrorMessage :
Name : Giraph
Uri : https://hdiconfigactions.blob.core.windows.net/linuxgiraphconfigactionv01/giraph-installer-v01.sh
Parameters :
NodeTypes : {HeadNode, WorkerNode}
Azure CLI から実行中のクラスターにスクリプト アクションを適用する
開始する前に、必ず Azure CLI をインストールして構成してください。 最新バージョンがあることを確認します。 詳細については、「 Azure CLI のインストール」を参照してください。
Azure サブスクリプションに対して認証を行います。
az login実行中のクラスターにスクリプト アクションを適用します。
az hdinsight script-action execute --cluster-name CLUSTERNAME --name SCRIPTNAME --resource-group RESOURCEGROUP --roles ROLES有効なロールは、
headnode、workernode、zookeepernode、edgenodeです。 スクリプトを複数のノード タイプに適用する必要がある場合は、ロールをスペースで区切ります。 たとえば、「--roles headnode workernode」のように入力します。スクリプトを永続化するには、
--persist-on-successを追加します。 後でaz hdinsight script-action promoteを使用してスクリプトを永続化することもできます。
REST API を使用して実行中のクラスターにスクリプト アクションを適用する
Azure HDInsight のクラスター REST API に関するページを参照してください。
HDInsight .NET SDK から実行中のクラスターにスクリプト アクションを適用する
.NET SDK を使用してクラスターにスクリプトを適用する例については、「 実行中の Linux ベースの HDInsight クラスターに対するスクリプト アクションの適用」を参照してください。
履歴を表示し、スクリプト アクションを昇格および降格する
Azure ポータル
Azure portal にサインインし、クラスターを見つけます。
既定のビューで、[ 設定] で [ スクリプト アクション] を選択します。
このクラスターのスクリプトの履歴が [スクリプト アクション] セクションに表示されます。 この情報には、永続化されたスクリプトの一覧が含まれます。 次のスクリーンショットは、Solr スクリプトがこのクラスターで実行されたことを示しています。 スクリーンショットには、永続化されたスクリプトは表示されません。
履歴からスクリプトを選択すると、このスクリプトの [プロパティ] セクションが表示されます。 画面の上部から、スクリプトを再実行したり、昇格したりできます。
スクリプト アクション セクションのエントリの右側にある省略記号 ...を選択して、アクションを実行することもできます。
Azure PowerShell
| コマンドレット | 機能 |
|---|---|
Get-AzHDInsightPersistedScriptAction |
永続化されたスクリプト アクションに関する情報を取得します。 このコマンドレットは、スクリプトによって実行されたアクションを元に戻すので、永続化されたフラグのみを削除します。 |
Get-AzHDInsightScriptActionHistory |
クラスターに適用されたスクリプト アクションの履歴または特定のスクリプトの詳細を取得します。 |
Set-AzHDInsightPersistedScriptAction |
ad hoc スクリプト アクションを永続化されたスクリプト アクションに昇格します。 |
Remove-AzHDInsightPersistedScriptAction |
永続化されたスクリプト アクションを ad hoc アクションに降格します。 |
次のサンプル スクリプトは、コマンドレットを使用してスクリプトを昇格してから降格する方法を示しています。
# Get a history of scripts
Get-AzHDInsightScriptActionHistory -ClusterName mycluster
# From the list, we want to get information on a specific script
Get-AzHDInsightScriptActionHistory -ClusterName mycluster `
-ScriptExecutionId 635920937765978529
# Promote this to a persisted script
# Note: the script must have a unique name to be promoted
# if the name is not unique, you receive an error
Set-AzHDInsightPersistedScriptAction -ClusterName mycluster `
-ScriptExecutionId 635920937765978529
# Demote the script back to ad hoc
# Note that demotion uses the unique script name instead of
# execution ID.
Remove-AzHDInsightPersistedScriptAction -ClusterName mycluster `
-Name "Install Giraph"
Azure CLI
| Command | Description |
|---|---|
az hdinsight script-action delete |
クラスターの指定した永続化されたスクリプト アクションを削除します。 このコマンドは、スクリプトによって実行されたアクションを元に戻すので、永続化されたフラグのみを削除します。 |
az hdinsight script-action execute |
指定した HDInsight クラスターでスクリプト アクションを実行します。 |
az hdinsight script-action list |
指定したクラスターに対して永続化されたすべてのスクリプト アクションを一覧表示します。 |
az hdinsight script-action list-execution-history |
指定したクラスターのすべてのスクリプトの実行履歴を一覧表示します。 |
az hdinsight script-action promote |
指定したアドホック スクリプトの実行を永続化されたスクリプトに昇格します。 |
az hdinsight script-action show-execution-details |
指定されたスクリプト実行 ID のスクリプト実行の詳細を取得します。 |
HDInsight .NET SDK
.NET SDK を使用してクラスターからスクリプト履歴を取得したり、スクリプトを昇格または降格したりする例については、「実行中の Linux ベースの HDInsight クラスターに対するスクリプト アクションの適用」を参照してください。
注
この例では、.NET SDK を使用して HDInsight アプリケーションをインストールする方法も示します。