クラスタ ウェブ インターフェース

Google Cloud Dataproc クラスタに付属しているコア オープンソース コンポーネントの中には、Apache HadoopApache Spark のように、ウェブ インターフェースを備えているものがあります。こうしたインターフェースを使用すると、YARN リソース マネージャー、Hadoop Distributed File System(HDFS)、MapReduce、Spark などさまざまなクラスタ リソースと機能を管理およびモニタリングできます。クラスタにインストールするその他のコンポーネントまたはアプリケーションの中にも、ウェブ インターフェースを提供するものがあります(例として、Cloud Dataproc クラスタで Jupyter ノートブックをインストールして実行するをご覧ください)。

使用可能なインターフェース

Cloud Dataproc クラスタのマスターノードでは、次のインターフェースを使用できます(master-host-name は、お使いのマスターノードの名前に置き換えてください)。

ウェブ UI ポート URL
YARN ResourceManager 8088 http://master-host-name:8088
HDFS NameNode 98701 http://master-host-name:9870

1 以前の Cloud Dataproc リリース(1.2 より前)では、HDFS Namenode ウェブ UI ポートは 50070 でした。

YARN ResourceManager の [UI のトラッキング] 列には、現在実行中か完了したすべての MapReduce と Spark アプリケーションのウェブ インターフェースのリンクがあります。

使用可能な YARN リソース マネージャー REST API

クラスタを作成すると、Cloud Dataproc により yarn-site.xml の yarn.resourcemanager.webapp.methods-allowed プロパティが「GET, HEAD」に設定されます。これにより、YARN リソース マネージャー ウェブ UI と REST API で呼び出せる HTTP メソッドが、GET メソッドと HEAD メソッドに制限されます。このデフォルト設定では、YARN REST API によるジョブの送信と変更も無効になります。

このプロパティに 1 つ以上の HTTP メソッド名をコンマ区切りで設定することにより、デフォルト値をオーバーライドして、ポート 8088 で特定の HTTP メソッドを有効にすることができます。ALL 値を設定すると、すべての HTTP メソッドがこのポートで許可されます。

例:

gcloud dataproc clusters create --properties='yarn:yarn.resourcemanager.webapp.methods-allowed=GET,POST,DELETE'

推奨事項: このプロパティをデフォルト以外の HTTP メソッドを許可するように設定する場合は、必ず、ポート 8088 へのアクセスを制限するようにファイアウォール ルールとその他のセキュリティ設定を構成してください。

ウェブ インターフェースへの接続

Cloud Dataproc クラスタで実行されているウェブ インターフェースに接続するには、プロジェクトの Cloud Shell または Cloud SDK gcloud コマンドライン ツールを使用します。

  • Cloud Shell: Google Cloud Platform Console の Cloud Shell には Cloud SDK コマンドとユーティリティがプリインストールされています。また、ウェブでプレビュー機能を備えていて、SSH トンネルを介してクラスタ上のウェブ インターフェース ポートに簡単に接続できます。ただし、Cloud Shell からクラスタへの接続に使用されるローカルポート転送では、クラスタ ウェブ インターフェース上の 1 つのポートに対して接続が開かれるため、複数のポートに接続するには複数のコマンドを実行する必要があります。また、Cloud Shell セッションは、一定時間(30 分)使用しないと、自動的に終了します。

  • gcloud コマンドライン ツール: gcloud compute ssh コマンドで動的ポート転送を指定することにより、SSH トンネルを確立し、そのトンネル上で SOCKS プロキシ サーバーを実行できます。このコマンドを発行した後、SOCKS プロキシを使用するようにローカル ブラウザを構成する必要があります。この接続方法を使用すると、クラスタウェブ インターフェース上の複数のポートに接続できます。詳しくは、SOCKS プロキシの代わりにローカルポート転送を使用できますか?をご覧ください。

よく使用されるコマンド変数を設定する

ローカルマシンや Cloud Shell でコマンドラインの例を簡単にコピーして実行するには、gcloud dataproc コマンド変数を設定します。このページに示されているコマンド例の一部では、他の変数を追加で設定する必要があります。

Linux / mac / Shell

export PROJECT=project;export HOSTNAME=hostname;export ZONE=zone

Windows

set PROJECT=project && set HOSTNAME=hostname && set ZONE=zone
  • PROJECT は Google Cloud Platform プロジェクト ID に設定します
  • HOSTNAME は、Cloud Dataproc クラスタのマスターノードの名前に設定します(マスター名には接尾辞 -m が付いています)
  • ZONE は、Cloud Dataproc クラスタ内の VM のゾーンに設定します(たとえば、「us-central1-b」)

SSH トンネルを作成する

gcloud コマンド

ローカルマシンで次の gcloud コマンドを実行して、ローカルマシン上で開いているポートからクラスタのマスター インスタンスまで SSH トンネルを確立し、そのポートをリッスンするローカル SOCKS プロキシ サーバーを実行します。

ローカルマシンでコマンドを実行する前に:

  1. よく使用されるコマンド変数を設定します。
  2. PORT 変数をローカルマシンで開いているポートに設定します。ポート 1080 の選択は任意ですが、開いている可能性が高いため、一般的にはこれを選択します。
    PORT=number
    

Linux / macOS

gcloud compute ssh ${HOSTNAME} \
    --project=${PROJECT} --zone=${ZONE}  -- \
    -D ${PORT} -N

Windows

gcloud compute ssh %HOSTNAME% ^
    --project=%PROJECT% --zone=%ZONE%  -- ^
    -D %PORT% -N

-- 区切り文字を使用すると、gcloud compute ssh コマンドに次の SSH 引数を追加できます。

  • -D は、動的アプリケーション レベルのポート転送です。
  • -N は、リモートシェルを開かないように gcloud に指示します。

この gcloud コマンドは、他の SSH シェル セッションから独立して動作する SSH トンネルを作成し、トンネル関連のエラーをシェル出力から切り離して、誤ってトンネルが閉じることがないようにします。

ssh コマンドが「bind: Cannot assign requested address」というエラー メッセージで失敗した場合、一般的な原因としてはリクエストしたポートが使用中であることが考えられます。別の PORT 変数値でコマンドを実行してみてください。

上記のコマンドは、フォアグラウンドで実行され、トンネルをアクティブにしておくにはそのまま実行を継続する必要があります。クラスタを削除すると、コマンドは自動的に終了します。

Cloud Shell

  1. Google Cloud Platform Cloud Shell を開きます。
  2. Cloud Shell で次の gcloud コマンドを実行して、Cloud Shell プレビュー ポートからクラスタ上のマスターノードのウェブ インターフェース ポートまで SSH トンネルを確立します。コマンドを実行する前に、Cloud Shell で次の操作を行います。

    1. よく使用されるコマンド変数を設定します。
    2. PORT1 変数をポート範囲 8080~8084 内のいずれかの Cloud Shell ポートに設定し、PORT2 変数を Cloud Dataproc クラスタ上のマスターノードのウェブ インターフェース ポートに設定します。
      PORT1=number
      PORT2=number
      
    gcloud compute ssh ${HOSTNAME} \
        --project=${PROJECT} --zone=${ZONE}  -- \
        -4 -N -L ${PORT1}:${HOSTNAME}:${PORT2}
    

    -- 区切り文字を使用すると、gcloud compute ssh コマンドに次の SSH 引数を追加できます。

    • -4 は、IPv4 のみを使用するように ssh に指示します。
    • -N は、リモートシェルを開かないように gcloud に指示します。
    • -L ${PORT1}:${HOSTNAME}:${PORT2} は、指定した Cloud Shell の PORT1 からクラスタ HOSTNAME:PORT2 へのローカルポート転送を指示します。

    この gcloud コマンドは、他の SSH シェル セッションから独立して動作する SSH トンネルを作成し、トンネル関連のエラーをシェル出力から切り離して、誤ってトンネルが閉じることがないようにします。

ブラウザを構成する

gcloud コマンド

SSH トンネルでは、SOCKS プロトコルを使用してトラフィックをプロキシできます。プロキシを使用するようにブラウザを構成するには、プロキシ サーバー パラメータを使用して新しいブラウザ セッションを開始します。次に、Google Chrome ブラウザの使用例を示します。 HOSTNAME は、クラスタのマスターノードの名前です(よく使用されるコマンド変数を設定するをご覧ください)。

Linux

/usr/bin/google-chrome \
    --proxy-server="socks5://localhost:${PORT}" \
    --user-data-dir=/tmp/${HOSTNAME}

macOS

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
    --proxy-server="socks5://localhost:${PORT}" \
    --user-data-dir=/tmp/${HOSTNAME}

Windows

"%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" ^
    --proxy-server="socks5://localhost:%PORT%" ^
    --user-data-dir="%Temp%\%HOSTNAME%"

このコマンドでは、次の Google Chrome ブラウザフラグを使用しています。

  • -proxy-server="socks5://localhost:1080" は、SOCKS プロトコルのバージョン 5 を使用して SOCKS プロキシ サーバー localhost:${PORT} 経由で http://https:// URL リクエストを送信するように Chrome に指示します。 ${PORT} は、SSH トンネルを作成するで設定したポート変数です。URL のホスト名は、Chrome でローカルに解決されるのではなく、プロキシ サーバーで解決されます。
  • --user-data-dir=/tmp/${HOSTNAME} は、既存の Chrome セッションに関連付けられていない新しいウィンドウを強制的に開きます。このフラグを指定しないと、既存の Chrome セッションに接続された新しいウィンドウが開き、--proxy-server 設定が無視される場合があります。--user-data-dir に設定する値は、存在しない任意のパスにできます。

Cloud Shell

Cloud Shell を使用する場合に、ローカル ブラウザを構成する必要はありません。SSH トンネルを作成したら、Cloud Shell ウェブ プレビューを使用してクラスタ インターフェースに接続します。

クラスタ インターフェースに接続する

gcloud コマンド

プロキシを使用するようにローカル ブラウザを構成したら、Cloud Dataproc クラスタのウェブ インターフェース URL に移動できます(使用可能なインターフェースをご覧ください)。ブラウザ URL の形式は http://cluster-name-m:port(クラスタ インターフェース ポート)です。

Cloud Shell

Cloud Shell の [ウェブでプレビュー] ボタン web-preview-button をクリックし、次のいずれかを選択します。

  • [プレビューのポート: 8080]、または
  • [ポートの変更] を選択してダイアログにポート番号を入力する
ここで入力するポート番号は、SSH トンネルを作成するgcloud compute ssh コマンドに渡した、Cloud Shell の PORT1 番号(ポート 8080 - 8084)です。

ブラウザ ウィンドウが開いて、クラスタ上のマスターノードのウェブ インターフェース ポートに接続されます。次のスクリーンショットは、Cloud Shell ポート 8084 を介して Cloud Datalab ノートブック インターフェースに接続するブラウザ ウィンドウを示しています。このインターフェースは、クラスタ上のマスターノードで実行されています。

よくある質問とデバッグのヒント

ブラウザに UI が表示されない場合はどうすればよいですか?

ブラウザに UI が表示されない場合、最も可能性が高い理由は次の 2 つです。

  1. ネットワーク接続に問題があります。おそらくファイアウォールが原因です。ローカル変数を設定した後、次のコマンドを実行して、マスター インスタンスに SSH で接続できるかどうかを確認します。できない場合は、接続に問題があります。

    Linux / macOS

    gcloud compute ssh ${HOSTNAME}-m \
        --project=${PROJECT}
    

    Windows

    gcloud compute ssh %HOSTNAME%-m ^
        --project=%PROJECT%
    

  2. 別のプロキシが SOCKS プロキシに干渉しています。プロキシをチェックするには、次の curl コマンドを実行します(Linux および macOS で使用可能)。

    Linux / macOS

    curl -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
    

    Windows

    curl.exe -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
    
    HTTP レスポンスが表示されている場合は、プロキシが動作しているため、SOCKS プロキシが別のプロキシまたはブラウザ拡張機能によって中断されている可能性があります。

SOCKS プロキシの代わりにローカルポート転送を使用できますか?

SOCKS プロキシの代わりに、SSH ローカルポート転送を使用してマスター インスタンス上で実行されているウェブ アプリケーション UI にアクセスできます。これにより、マスターのポートがローカルポートに転送されます。たとえば、次のコマンドを使用すると、SOCKS なしで localhost:1080 にアクセスして cluster-name-m:8088 に到達できます(よく使用されるコマンド変数を設定するをご覧ください)。

Linux / macOS

gcloud compute ssh ${HOSTNAME}-m \
    --project=${PROJECT} -- \
    -L 1080:${HOSTNAME}-m:8088 -N -n

Windows

gcloud compute ssh %HOSTNAME%-m ^
    --project=%PROJECT% -- ^
    -L 1080:%HOSTNAME%-m:8088 -N -n

ローカルポート転送よりも SOCKS プロキシの使用をおすすめします。このプロキシには次のような利点があります。

  • UI ポートごとにポート転送トンネルを設定しなくても、すべてのウェブ アプリケーション ポートにアクセスできる
  • Spark と Hadoop のウェブ UI が DNS ホストを正しく解決できるようになる
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Dataproc ドキュメント
ご不明な点がありましたら、Google のサポートページをご覧ください。