Apache Ambari REST API を使用した HDInsight クラスターの管理Manage HDInsight clusters by using the Apache Ambari REST API

Apache Ambari REST API を使用して Azure HDInsight の Apache Hadoop クラスターを管理および監視する方法を説明します。Learn how to use the Apache Ambari REST API to manage and monitor Apache Hadoop clusters in Azure HDInsight.

Apache Ambari とはWhat is Apache Ambari

Apache Ambari は、REST API に支えられた使いやすい Web UI を提供することで、Hadoop クラスターの管理と監視を簡素化します。Apache Ambari simplifies the management and monitoring of Hadoop clusters by providing an easy to use web UI backed by its REST APIs. Ambari は既定で Linux ベースの HDInsight クラスターに付属しています。Ambari is provided by default with Linux-based HDInsight clusters.

前提条件Prerequisites

Ambari Rest API のベース URIBase URI for Ambari Rest API

HDInsight の Ambari REST API のベース URI (Uniform Resource Identifier) は、https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME です。CLUSTERNAME はお使いのクラスターの名前です。The base Uniform Resource Identifier (URI) for the Ambari REST API on HDInsight is https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME, where CLUSTERNAME is the name of your cluster. URI のクラスター名では、大文字と小文字が区別されます。Cluster names in URIs are case-sensitive. URI (CLUSTERNAME.azurehdinsight.net) の FQDN (完全修飾ドメイン名) 部分のクラスター名では大文字と小文字が区別されませんが、URI の他の部分で出現するときは大文字と小文字が区別されます。While the cluster name in the fully qualified domain name (FQDN) part of the URI (CLUSTERNAME.azurehdinsight.net) is case-insensitive, other occurrences in the URI are case-sensitive.

認証Authentication

HDInsight の Ambari に接続するには、HTTPS が必要です。Connecting to Ambari on HDInsight requires HTTPS. クラスターの作成中に入力した管理者アカウント名 (既定値は admin) とパスワードを使用します。Use the admin account name (the default is admin) and password you provided during cluster creation.

Enterprise セキュリティ パッケージ クラスターの場合、admin ではなく、username@domain.onmicrosoft.com のように完全修飾ユーザー名を使用します。For Enterprise Security Package clusters, instead of admin, use a fully qualified username like username@domain.onmicrosoft.com.

Examples

セットアップ (資格情報の保存)Setup (Preserve credentials)

各例で再入力しなくて済むように、資格情報を保存します。Preserve your credentials to avoid reentering them for each example. クラスター名は別の手順で保存します。The cluster name will be preserved in a separate step.

A.BashA. Bash
PASSWORD を実際のパスワードに置き換えて、次のスクリプトを編集します。Edit the script below by replacing PASSWORD with your actual password. その後、コマンドを入力します。Then enter the command.

export password='PASSWORD'

B.PowerShellB. PowerShell

$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"

大文字と小文字が正しく区別されたクラスター名を確認するIdentify correctly cased cluster name

クラスターの作成方法によっては、クラスター名の実際の大文字小文字の区別が予想と異なる場合があります。The actual casing of the cluster name may be different than you expect, depending on how the cluster was created. ここでの手順では、実際の大文字小文字の区別を示し、以降のすべての例で使用できるように、それを変数に格納します。The steps here will show the actual casing, and then store it in a variable for all subsequent examples.

次のスクリプトを編集して、CLUSTERNAME を実際のクラスター名に置き換えます。Edit the scripts below to replace CLUSTERNAME with your cluster name. その後、コマンドを入力します。Then enter the command. (FQDN のクラスター名では、大文字と小文字は区別されません)。(The cluster name for the FQDN is not case-sensitive.)

export clusterName=$(curl -u admin:$password -sS -G "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" | jq -r '.items[].Clusters.cluster_name')
echo $clusterName
# Identify properly cased cluster name
$resp = Invoke-WebRequest -Uri "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" `
    -Credential $creds -UseBasicParsing
$clusterName = (ConvertFrom-Json $resp.Content).items.Clusters.cluster_name;

# Show cluster name
$clusterName

JSON データの解析Parsing JSON data

次の例では、jq または ConvertFrom-Json を使用して、JSON 応答ドキュメントを解析し、結果の health_report 情報だけを表示します。The following example uses jq or ConvertFrom-Json to parse the JSON response document and display only the health_report information from the results.

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName" \
| jq '.Clusters.health_report'
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.Clusters.health_report

クラスター ノードの FQDN を取得するGet the FQDN of cluster nodes

HDInsight を使用する際は、クラスター ノードの完全修飾ドメイン名 (FQDN) を知ることが必要になる場合があります。When working with HDInsight, you may need to know the fully qualified domain name (FQDN) of a cluster node. 次の例を使用して、クラスター内のさまざまなノードの FQDN を簡単に取得できます。You can easily retrieve the FQDN for the various nodes in the cluster using the following examples:

すべてのノードAll nodes

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts" \
| jq -r '.items[].Hosts.host_name'
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.items.Hosts.host_name

ヘッド ノードHead nodes

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/HDFS/components/NAMENODE" \
| jq -r '.host_components[].HostRoles.host_name'
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/HDFS/components/NAMENODE" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.host_components.HostRoles.host_name

ワーカー ノードWorker nodes

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/HDFS/components/DATANODE" \
| jq -r '.host_components[].HostRoles.host_name'
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/HDFS/components/DATANODE" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.host_components.HostRoles.host_name

Zookeeper ノードZookeeper nodes

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/ZOOKEEPER/components/ZOOKEEPER_SERVER" \
| jq -r ".host_components[].HostRoles.host_name"
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/ZOOKEEPER/components/ZOOKEEPER_SERVER" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.host_components.HostRoles.host_name

クラスター ノードの内部 IP アドレスを取得するGet the internal IP address of cluster nodes

このセクションの例によって返される IP アドレスは、インターネット経由で直接アクセスすることはできません。The IP addresses returned by the examples in this section are not directly accessible over the internet. HDInsight クラスターが含まれている Azure Virtual Network 内からだけアクセスできます。They are only accessible within the Azure Virtual Network that contains the HDInsight cluster.

HDInsight と仮想ネットワークの操作の詳細については、「Plan a virtual network for HDInsight」 (HDInsight 用の仮想ネットワークの計画) を参照してください。For more information on working with HDInsight and virtual networks, see Plan a virtual network for HDInsight.

IP アドレスを検索するには、クラスター ノードの内部完全修飾ドメイン名 (FQDN) が必要です。To find the IP address, you must know the internal fully qualified domain name (FQDN) of the cluster nodes. FQDN の取得後、ホストの IP アドレスを取得できます。Once you have the FQDN, you can then get the IP address of the host. 次の例は、まず、すべてのホスト ノードの FQDN を Ambari に照会し、次に Ambari に各ホストの IP アドレスを照会します。The following examples first query Ambari for the FQDN of all the host nodes, then query Ambari for the IP address of each host.

for HOSTNAME in $(curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts" | jq -r '.items[].Hosts.host_name')
do
    IP=$(curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts/$HOSTNAME" | jq -r '.Hosts.ip')
  echo "$HOSTNAME <--> $IP"
done
$uri = "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts" 
$resp = Invoke-WebRequest -Uri $uri -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
foreach($item in $respObj.items) {
    $hostName = [string]$item.Hosts.host_name
    $hostInfoResp = Invoke-WebRequest -Uri "$uri/$hostName" `
        -Credential $creds -UseBasicParsing
    $hostInfoObj = ConvertFrom-Json $hostInfoResp 
    $hostIp = $hostInfoObj.Hosts.ip
    "$hostName <--> $hostIp"
}

既定のストレージを取得するGet the default storage

HDInsight クラスターを作成する場合は、クラスターの既定のストレージとして Azure Storage アカウントまたは Data Lake Storage を使用する必要があります。When you create an HDInsight cluster, you must use an Azure Storage Account or Data Lake Storage as the default storage for the cluster. Ambari を使用すると、クラスターが作成された後にこの情報を取得できます。You can use Ambari to retrieve this information after the cluster has been created. たとえば、HDInsight の外部のコンテナーにデータの読み取り/書き込みをする場合です。For example, if you want to read/write data to the container outside HDInsight.

以下の例では、クラスターの既定のストレージ構成を取得します。The following examples retrieve the default storage configuration from the cluster:

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" \
| jq -r '.items[].configurations[].properties["fs.defaultFS"] | select(. != null)'
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.items.configurations.properties.'fs.defaultFS'

重要

これらの例は、サーバーに適用された最初の構成 (service_config_version=1) を返し、その中にこの情報が含まれています。These examples return the first configuration applied to the server (service_config_version=1) which contains this information. クラスターの作成後に変更された値を取得する場合は、構成のバージョンを一覧表示した後で最新の構成を取得することが必要になる場合があります。If you retrieve a value that has been modified after cluster creation, you may need to list the configuration versions and retrieve the latest one.

戻り値は、以下の例のいずれかと似ています。The return value is similar to one of the following examples:

  • wasbs://CONTAINER@ACCOUNTNAME.blob.core.windows.net - この値は、クラスターが既定のストレージとして Azure Storage アカウントを使用していることを示します。wasbs://CONTAINER@ACCOUNTNAME.blob.core.windows.net - This value indicates that the cluster is using an Azure Storage account for default storage. ACCOUNTNAME 値は、ストレージ アカウントの名前です。The ACCOUNTNAME value is the name of the storage account. CONTAINER 部分は、ストレージ アカウント内の BLOB コンテナーの名前です。The CONTAINER portion is the name of the blob container in the storage account. コンテナーは、クラスターの HDFS 互換ストレージのルートです。The container is the root of the HDFS compatible storage for the cluster.

  • abfs://CONTAINER@ACCOUNTNAME.dfs.core.windows.net - この値は、クラスターが既定のストレージとして Azure Data Lake Storage Gen2 を使用していることを示します。abfs://CONTAINER@ACCOUNTNAME.dfs.core.windows.net - This value indicates that the cluster is using Azure Data Lake Storage Gen2 for default storage. ACCOUNTNAME 値と CONTAINER 値は、前述の Azure Storage の場合と同じ意味です。The ACCOUNTNAME and CONTAINER values have the same meanings as for Azure Storage mentioned previously.

  • adl://home - この値は、クラスターが既定のストレージとして Azure Data Lake Storage Gen1 を使用していることを示します。adl://home - This value indicates that the cluster is using Azure Data Lake Storage Gen1 for default storage.

    Data Lake Storage のアカウント名を検索するには、以下の例を使用します。To find the Data Lake Storage account name, use the following examples:

    curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" \
    | jq -r '.items[].configurations[].properties["dfs.adls.home.hostname"] | select(. != null)'
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" `
        -Credential $creds -UseBasicParsing
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.items.configurations.properties.'dfs.adls.home.hostname'
    

    戻り値は、ACCOUNTNAME.azuredatalakestore.net のようになります。ここで、ACCOUNTNAME は Data Lake Storage アカウントの名前です。The return value is similar to ACCOUNTNAME.azuredatalakestore.net, where ACCOUNTNAME is the name of the Data Lake Storage account.

    クラスターのストレージが含まれている Data Lake Storage 内のディレクトリを検索するには、以下の例を使用します。To find the directory within Data Lake Storage that contains the storage for the cluster, use the following examples:

    curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" \
    | jq -r '.items[].configurations[].properties["dfs.adls.home.mountpoint"] | select(. != null)'
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" `
        -Credential $creds -UseBasicParsing
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.items.configurations.properties.'dfs.adls.home.mountpoint'
    

    戻り値は、/clusters/CLUSTERNAME/ のようになります。The return value is similar to /clusters/CLUSTERNAME/. この値は、Data Lake Storage アカウント内のパスです。This value is a path within the Data Lake Storage account. このパスは、クラスターの HDFS 互換ファイル システムのルートです。This path is the root of the HDFS compatible file system for the cluster.

注意

Azure PowerShell に用意されている Get-AzHDInsightCluster コマンドレットも、クラスターのストレージ情報を返します。The Get-AzHDInsightCluster cmdlet provided by Azure PowerShell also returns the storage information for the cluster.

すべての構成を取得するGet all configurations

クラスターに使用できる構成を取得します。Get the configurations that are available for your cluster.

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName?fields=Clusters/desired_configs"
$respObj = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName`?fields=Clusters/desired_configs" `
    -Credential $creds -UseBasicParsing
$respObj.Content

この例は、クラスターにインストールされているコンポーネントの現在の構成 ( tag 値で特定) を含む JSON ドキュメントを返します。This example returns a JSON document containing the current configuration (identified by the tag value) for the components installed on the cluster. 次の例は Spark タイプのクラスターから返されるデータの抜粋です。The following example is an excerpt from the data returned from a Spark cluster type.

"jupyter-site" : {
  "tag" : "INITIAL",
  "version" : 1
},
"livy2-client-conf" : {
  "tag" : "INITIAL",
  "version" : 1
},
"livy2-conf" : {
  "tag" : "INITIAL",
  "version" : 1
},

特定のコンポーネントの構成を取得するGet configuration for specific component

興味のあるコンポーネントの構成を取得します。Get the configuration for the component that you are interested in. 次の例では、INITIAL を、前の要求から返されるタグ値で置き換えます。In the following example, replace INITIAL with the tag value returned from the previous request.

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations?type=livy2-conf&tag=INITIAL"
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations?type=livy2-conf&tag=INITIAL" `
    -Credential $creds -UseBasicParsing
$resp.Content

この例では、livy2-conf コンポーネントの現在の構成を含む JSON ドキュメントが返されます。This example returns a JSON document containing the current configuration for the livy2-conf component.

構成を更新するUpdate configuration

  1. newconfig.json を作成します。Create newconfig.json.
    変更後、次のコマンドを入力します。Modify, and then enter the commands below:

    • livy2-conf を必要なコンポーネントに置き換えます。Replace livy2-conf with the desired component.

    • INITIAL を、「すべての構成を取得する」で取得した tag の実際の値に置き換えます。Replace INITIAL with actual value retrieved for tag from Get all configurations.

      A.BashA. Bash

      curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations?type=livy2-conf&tag=INITIAL" \
      | jq --arg newtag $(echo version$(date +%s%N)) '.items[] | del(.href, .version, .Config) | .tag |= $newtag | {"Clusters": {"desired_config": .}}' > newconfig.json
      

      B.PowerShellB. PowerShell
      この PowerShell スクリプトでは、jq を使用しています。The PowerShell script uses jq. 実際のパスと jq のバージョンを反映するように、次の C:\HD\jq\jq-win64 を編集します。Edit C:\HD\jq\jq-win64 below to reflect your actual path and version of jq.

      $epoch = Get-Date -Year 1970 -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0
      $now = Get-Date
      $unixTimeStamp = [math]::truncate($now.ToUniversalTime().Subtract($epoch).TotalMilliSeconds)
      $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations?type=livy2-conf&tag=INITIAL" `
        -Credential $creds -UseBasicParsing
      $resp.Content | C:\HD\jq\jq-win64 --arg newtag "version$unixTimeStamp" '.items[] | del(.href, .version, .Config) | .tag |= $newtag | {"Clusters": {"desired_config": .}}' > newconfig.json
      

      jq を使用して、HDInsight から取得したデータを新しい構成テンプレートに変換します。Jq is used to turn the data retrieved from HDInsight into a new configuration template. 具体的には、これらの例では以下の操作を実行します。Specifically, these examples perform the following actions:

    • 文字列 "version" と日付を含む一意の値が作成され、newtag に格納されます。Creates a unique value containing the string "version" and the date, which is stored in newtag.

    • 新しい望ましい構成のルート ドキュメントが作成されます。Creates a root document for the new desired configuration.

    • .items[] 配列のコンテンツが取得され、desired_config 要素の下に追加されます。Gets the contents of the .items[] array and adds it under the desired_config element.

    • 新しい構成の送信に必要ないため、hrefversionConfig の各要素が削除されます。Deletes the href, version, and Config elements, as these elements aren't needed to submit a new configuration.

    • 値を version################# に指定して tag 要素を追加します。Adds a tag element with a value of version#################. 数値部分は現在の日付に基づきます。The numeric portion is based on the current date. 構成ごとに一意のタグを与える必要があります。Each configuration must have a unique tag.

      最後に、データが newconfig.json ドキュメントに保存されます。Finally, the data is saved to the newconfig.json document. ドキュメントの構造は次の例の構造に似たものになります。The document structure should appear similar to the following example:

      {
        "Clusters": {
          "desired_config": {
            "tag": "version1552064778014",
            "type": "livy2-conf",
            "properties": {
              "livy.environment": "production",
              "livy.impersonation.enabled": "true",
              "livy.repl.enableHiveContext": "true",
              "livy.server.csrf_protection.enabled": "true",
                ....
            },
          },
        }
      }
      
  2. newconfig.json を編集します。Edit newconfig.json.
    newconfig.json ドキュメントを開き、properties オブジェクトの値を修正/追加します。Open the newconfig.json document and modify/add values in the properties object. 次の例では、"livy.server.csrf_protection.enabled" の値を "true" から "false" に変更します。The following example changes the value of "livy.server.csrf_protection.enabled" from "true" to "false".

     "livy.server.csrf_protection.enabled": "false",
    

    変更が完了したら、ファイルを保存します。Save the file once you are done making modifications.

  3. newconfig.json を送信します。Submit newconfig.json.
    次のコマンドを利用し、更新した構成を Ambari に送信します。Use the following commands to submit the updated configuration to Ambari.

    curl -u admin:$password -sS -H "X-Requested-By: ambari" -X PUT -d @newconfig.json "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName"
    
    $newConfig = Get-Content .\newconfig.json
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName" `
        -Credential $creds -UseBasicParsing `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body $newConfig
    $resp.Content
    

    これらのコマンドは、newconfig.json ファイルの内容を新たな望ましい構成としてクラスターに送信します。These commands submit the contents of the newconfig.json file to the cluster as the new desired configuration. 要求から、JSON ドキュメントが返されます。The request returns a JSON document. このドキュメントの versionTag 要素は、送信したバージョンに一致する必要があります。configs オブジェクトには、要求した構成変更が含まれます。The versionTag element in this document should match the version you submitted, and the configs object contains the configuration changes you requested.

サービス コンポーネントの再起動Restart a service component

この時点で Ambari Web UI に、新しい構成を有効にするには Spark サービスを再起動する必要がある旨が表示されます。At this point, if you look at the Ambari web UI, the Spark service indicates that it needs to be restarted before the new configuration can take effect. 次の手順でサービスを再起動します。Use the following steps to restart the service.

  1. 次のコマンドを使用して、Spark2 サービスのメンテナンス モードを有効にします。Use the following to enable maintenance mode for the Spark2 service:

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    -X PUT -d '{"RequestInfo": {"context": "turning on maintenance mode for SPARK2"},"Body": {"ServiceInfo": {"maintenance_state":"ON"}}}' \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2"
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" `
        -Credential $creds -UseBasicParsing `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body '{"RequestInfo": {"context": "turning on maintenance mode for SPARK2"},"Body": {"ServiceInfo": {"maintenance_state":"ON"}}}'
    
  2. メンテナンス モードを確認します。Verify maintenance mode

    これらのコマンドは、メンテナンス モードを有効にするサーバーに JSON ドキュメントを送信します。These commands send a JSON document to the server that turns on maintenance mode. 次の要求を利用すれば、サービスがメンテナンス モードに入っていることを確認できます。You can verify that the service is now in maintenance mode using the following request:

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" \
    | jq .ServiceInfo.maintenance_state
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" `
        -Credential $creds -UseBasicParsing
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.ServiceInfo.maintenance_state
    

    戻り値は ON です。The return value is ON.

  3. 次のコマンドを使用して、Spark2 サービスを無効にします。Next, use the following to turn off the Spark2 service:

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    -X PUT -d '{"RequestInfo":{"context":"_PARSE_.STOP.SPARK2","operation_level":{"level":"SERVICE","cluster_name":"CLUSTERNAME","service_name":"SPARK"}},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}' \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2"
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" `
        -Credential $creds -UseBasicParsing `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body '{"RequestInfo":{"context":"_PARSE_.STOP.SPARK2","operation_level":{"level":"SERVICE","cluster_name":"CLUSTERNAME","service_name":"SPARK"}},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}'
    $resp.Content
    

    応答は次の例のようになります。The response is similar to the following example:

    {
        "href" : "http://10.0.0.18:8080/api/v1/clusters/CLUSTERNAME/requests/29",
        "Requests" : {
            "id" : 29,
            "status" : "Accepted"
        }
    }
    

    重要

    この URI で返される href 値はクラスター ノードの内部 IP アドレスを利用します。The href value returned by this URI is using the internal IP address of the cluster node. クラスターの外部からこれを利用するには、10.0.0.18:8080 部分をクラスターの FQDN に置換します。To use it from outside the cluster, replace the 10.0.0.18:8080 portion with the FQDN of the cluster.

  4. 要求を確認します。Verify request.
    29 を、前の手順で返された id の実際の値に置き換えて、次のコマンドを編集します。Edit the command below by replacing 29 with the actual value for id returned from the prior step. 以下のコマンドは、要求の状態を取得します。The following commands retrieve the status of the request:

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/requests/29" \
    | jq .Requests.request_status
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/requests/29" `
        -Credential $creds -UseBasicParsing
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.Requests.request_status
    

    COMPLETED の応答は、要求が完了したことを示します。A response of COMPLETED indicates that the request has finished.

  5. 前の要求が完了したら、次のコマンドを使用して Spark2 サービスを開始します。Once the previous request completes, use the following to start the Spark2 service.

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    -X PUT -d '{"RequestInfo":{"context":"_PARSE_.START.SPARK2","operation_level":{"level":"SERVICE","cluster_name":"CLUSTERNAME","service_name":"SPARK"}},"Body":{"ServiceInfo":{"state":"STARTED"}}}' \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2"
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" `
        -Credential $creds -UseBasicParsing `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body '{"RequestInfo":{"context":"_PARSE_.START.SPARK2","operation_level":{"level":"SERVICE","cluster_name":"CLUSTERNAME","service_name":"SPARK"}},"Body":{"ServiceInfo":{"state":"STARTED"}}}'
    $resp.Content
    

    これで、サービスが新しい構成を使用するようになりました。The service is now using the new configuration.

  6. 最後に、次を利用し、メンテナンス モードをオフにします。Finally, use the following to turn off maintenance mode.

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    -X PUT -d '{"RequestInfo": {"context": "turning off maintenance mode for SPARK2"},"Body": {"ServiceInfo": {"maintenance_state":"OFF"}}}' \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2"
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" `
        -Credential $creds -UseBasicParsing `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body '{"RequestInfo": {"context": "turning off maintenance mode for SPARK2"},"Body": {"ServiceInfo": {"maintenance_state":"OFF"}}}'
    

次の手順Next steps

REST API の完全なリファレンスについては、「Apache Ambari API リファレンス V1」をご覧ください。For a complete reference of the REST API, see Apache Ambari API Reference V1. Apache Ambari ビューに対してユーザーを承認する」も参照してください。See also, Authorize users for Apache Ambari Views