Google Dataproc クラスタにデフォルトで組み込まれる Apache Hadoop、Apache Spark などの一部のオープンソース コンポーネントには、ウェブ インターフェースが備わっています。こうしたインターフェースを使用すると、YARN リソース マネージャー、Hadoop 分散ファイル システム(HDFS)、MapReduce、Spark などのクラスタ リソースと機能を管理およびモニタリングできます。コンポーネント ゲートウェイを使用すると、Dataproc のデフォルト コンポーネントとオプション コンポーネントのウェブ エンドポイントへ安全にアクセスできます。
サポートされている Dataproc イメージ バージョンで作成されたクラスタでは、内向きトラフィックを許可するために SSH トンネルへの依存や、ファイアウォール ルールの変更を行うことなく、コンポーネントのウェブ インターフェースへのアクセスを有効にできます。
考慮事項
- コンポーネントのウェブ インターフェースには、IAM の dataproc.clusters.use 権限を付与されたユーザーがアクセスできます。Dataproc のロールをご覧ください。
- コンポーネント ゲートウェイを使用して REST API(Apache Hadoop YARN、Apache Livy など)や履歴サーバーにアクセスすることができます。
- コンポーネント ゲートウェイが有効にされると、クラスタ内の最初のマスターノードに次のサービスが追加されます。
- コンポーネント ゲートウェイは、
node:port
インターフェースへの直接アクセスを有効にしませんが、サービスの特定のサブセットを自動的にプロキシします。ノード(node:port
)上のサービスにアクセスする必要がある場合は、SSH SOCKS プロキシを使用します。
コンポーネント ゲートウェイを使用してクラスタを作成する
コンソール
Google Cloud コンソールからコンポーネント ゲートウェイを有効にするには、Dataproc の [クラスタの作成] ページの [クラスタの設定] パネルの [コンポーネント] セクションで [コンポーネント ゲートウェイ] チェックボックスをオンにします。

gcloud コマンド
gcloud CLI のgcloud dataproc clusters create コマンドをターミナル ウィンドウでローカルに、または Cloud Shell で実行します。
gcloud dataproc clusters create cluster-name \ --enable-component-gateway \ --region=region \ other args ...
REST API
clusters.create リクエストの一部として EndpointConfig.enableHttpPortAccess プロパティを true
に設定します。
コンポーネント ゲートウェイの URL を表示してアクセスする
クラスタでコンポーネント ゲートウェイが有効になっている場合、Google Cloud コンソール上のリンクをクリックして、クラスタの最初のマスターノードで実行されているコンポーネント ウェブ インターフェースに接続できます。また、コンポーネント ゲートウェイでは、endpointConfig.httpPorts に URL へのポート名のマップが設定されます。コンソールを使用する代わりに、gcloud
コマンドライン ツールや Dataproc REST API を使用してこのマッピング情報を表示し、URL をコピーしてブラウザに貼り付けて、コンポーネントの UI に接続できます。
コンソール
Google Cloud Console で Dataproc の [クラスタ] フォームに移動し、クラスタを選択して [クラスタの詳細] フォームを開きます。[ウェブ インターフェース] タブをクリックすると、クラスタにインストールされているデフォルト コンポーネントとオプション コンポーネントのウェブ インターフェースへのコンポーネント ゲートウェイ リンクのリストが表示されます。いずれかのコンポーネントのリンクをクリックすると、クラスタのマスターノード上で実行されているそのコンポーネントのウェブ インターフェースがローカル ブラウザ内に開きます。

gcloud コマンド
gcloud CLI のgcloud dataproc clusters describe コマンドをターミナル ウィンドウでローカルに、または Cloud Shell で実行します。
gcloud dataproc clusters describe cluster-name \ --region=region
出力例:
... config: endpointConfig: enableHttpPortAccess: true httpPorts: HDFS NameNode:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/hdfs/ MapReduce Job History:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/jobhistory/ Spark HistoryServer:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/sparkhistory/ YARN ResourceManager:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/yarn/ YARN Application Timeline:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/apphistory/ ...
REST API
URL へのポート名の endpointConfig.httpPorts マップを取得するには、clusters.get を呼び出します。VPC-SC でのコンポーネント ゲートウェイの使用
コンポーネント ゲートウェイでは、VPC Service Controls がサポートされます。サービス境界の適用では、コンポーネント ゲートウェイを介したインターフェースへのリクエストは Dataproc API サーフェスの一部として処理され、dataproc.googleapis.com
の権限を制御するアクセス ポリシーでもコンポーネント ゲートウェイ UI へのアクセスが制御されます。
また、コンポーネント ゲートウェイでは、外部 IP アドレスがない Dataproc クラスタへのプライベート Google 接続に依存する VPC-SC 構成もサポートされていますが、次のように、制限された Google 仮想 IP 範囲 199.36.153.4/30
を介して Dataproc マスター VM から *.dataproc.cloud.google.com
へのアクセスを許可するようにネットワークを手動で構成する必要があります。
- 手順に従って、すべての Google API に対して、プライベート Google 接続を構成します。
- Cloud DNS によって DNS を構成するか、Dataproc マスターノードでローカルに DNS を構成して、
*.dataproc.cloud.google.com
へのアクセスを許可します。
Cloud DNS によって DNS を構成する
*.dataproc.cloud.google.com
を宛先とするトラフィックを、制限付きの Google API 仮想 IP 範囲にマッピングする Cloud DNS ゾーンを作成します。
VPC ネットワーク用の非公開マネージド ゾーンを作成します。
gcloud dns managed-zones create ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \ --description=DESCRIPTION \ --dns-name=dataproc.cloud.google.com \ --project=PROJECT_ID
ZONE_NAME は、作成するゾーンの名前です。例:
vpc
。このゾーン名は、次の各ステップで使用されます。PROJECT_ID は、VPC ネットワークをホストするプロジェクトの ID です。
NETWORK_NAME は VPC ネットワークの名前です。
DESCRIPTION は、人間が読める形式のマネージド ゾーンの説明です。これは指定しなくても構いません。
トランザクションを開始します。
gcloud dns record-sets transaction start --zone=ZONE_NAME
- ZONE_NAME は、ゾーン名です。
DNS レコードを追加します。
gcloud dns record-sets transaction add --name=*.dataproc.cloud.google.com. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=ZONE_NAME \ --ttl=300
- ZONE_NAME は、ゾーン名です。
gcloud dns record-sets transaction add --name=dataproc.cloud.google.com. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=ZONE_NAME \ --ttl=300
- ZONE_NAME は、ゾーン名です。
トランザクションを実行します。
gcloud dns record-sets transaction execute --zone=ZONE_NAME --project=PROJECT_ID
ZONE_NAME は、ゾーン名です。
PROJECT_ID は、VPC ネットワークをホストするプロジェクトの ID です。
初期化アクションで Dataproc マスターノードでローカルに DNS を構成する
dataproc.cloud.google.com
へのプライベート接続を許可するように Dataproc マスターノードでローカルに DNS を構成できます。この手順は、短期的なテストと開発を目的としています。本番環境ワークロードでの使用は推奨されません。
初期化アクションを Cloud Storage にステージングします。
cat <<EOF >component-gateway-vpc-sc-dns-init-action.sh #!/bin/bash readonly ROLE="$(/usr/share/google/get_metadata_value attributes/dataproc-role)" if [[ "${ROLE}" == 'Master' ]]; then readonly PROXY_ENDPOINT=$(grep "^dataproc.proxy.agent.endpoint=" \ "/etc/google-dataproc/dataproc.properties" | \ tail -n 1 | cut -d '=' -f 2- | sed -r 's/\\([#!=:])/\1/g') readonly HOSTNAME=$(echo ${PROXY_ENDPOINT} | \ sed -n -E 's;^https://([^/?#]*).*;\1;p') echo "199.36.153.4 ${HOSTNAME} # Component Gateway VPC-SC" >> "/etc/hosts" fi EOF gsutil cp component-gateway-vpc-sc-dns-init-action.sh gs://BUCKET/
- BUCKET は、Dataproc クラスタからアクセスできる Cloud Storage バケットです。
初期化アクションがステージングされ、コンポーネント ゲートウェイが有効になっている Dataproc クラスタを作成します。
gcloud dataproc clusters create cluster-name \ --region=region \ --initialization-actions=gs://BUCKET/component-gateway-vpc-sc-dns-init-action.sh \ --enable-component-gateway \ other args ...
- BUCKET は、上記の手順 1 で使用した Cloud Storage バケットです。
コンポーネント ゲートウェイを介して HTTP API をプログラムでの使用する
コンポーネント ゲートウェイは、Apache Knox を組み込むプロキシです。Apache Knox によって公開されるエンドポイントは、https://component-gateway-base-url/component-path
を介して利用できます。
コンポーネント ゲートウェイを使用してプログラムで認証するには、ヘッダー Proxy-Authorization
に OAuth 2.0 署名なしトークンを渡します。
$ ACCESS_TOKEN="$(gcloud auth print-access-token)"
$ curl -H "Proxy-Authorization: Bearer ${ACCESS_TOKEN}" "https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/yarn/jmx"
{
"beans" : [ {
"name" : "Hadoop:service=ResourceManager,name=RpcActivityForPort8031",
"modelerType" : "RpcActivityForPort8031",
"tag.port" : "8031",
"tag.Context" : "rpc",
"tag.NumOpenConnectionsPerUser" : "{\"yarn\":2}",
"tag.Hostname" : "demo-cluster-m",
"ReceivedBytes" : 1928581096,
"SentBytes" : 316939850,
"RpcQueueTimeNumOps" : 7230574,
"RpcQueueTimeAvgTime" : 0.09090909090909091,
"RpcProcessingTimeNumOps" : 7230574,
"RpcProcessingTimeAvgTime" : 0.045454545454545456,
...
コンポーネント ゲートウェイは、リクエストを Apache Knox に転送する前に Proxy-Authorization
ヘッダーを削除します。
コンポーネント ゲートウェイのベース URL を確認するには、gcloud dataproc clusters describe
を実行します。
$ gcloud dataproc clusters describe
...
endpointConfig:
enableHttpPortAccess: true
httpPorts:
HDFS NameNode: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/hdfs/dfshealth.html
MapReduce Job History: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/jobhistory/
Spark History Server: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/sparkhistory/
Tez: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/apphistory/tez-ui/
YARN Application Timeline: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/apphistory/
YARN ResourceManager: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/yarn/
...
ベース URL は、httpPorts
の下にある URL のスキームと認証の部分です。この例では、https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/
です。
次のステップ
- Dataproc コンポーネントがあるクラスタを作成します。