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

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

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

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

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

1 Kerberos 対応クラスタ上では、YARN ResourceManager ウェブ UI ポートは 8090 で、HTTPS 上で実行されます。

2 Kerberos 対応クラスタ上では、HDFS Namenode のウェブ UI ポートは 9871 で、HTTPS 上で実行されます。

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

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

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

クラスタを作成すると、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 cluster-name \
    --properties=^#^yarn:yarn.resourcemanager.webapp.methods-allowed=GET,POST,DELETE \
    --region=region \

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

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

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

  • コンポーネント ゲートウェイ: Google Cloud コンソールから Hadoop、Spark、その他のコンポーネントのウェブ UI インターフェースにワンクリックで接続できます。コンポーネント ゲートウェイは、クラスタの作成時に有効にします。

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

  • Google Cloud CLI: 動的ポート転送を指定した 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 のプロジェクト ID を設定します。
  • HOSTNAME には Dataproc クラスタ内のマスターノードの名前を設定します(マスター名には接尾辞 -m が付いています)。
  • ZONE には 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 Cloud Shell を開きます。
  2. Cloud Shell で次の gcloud コマンドを実行して、Cloud Shell プレビューポートからクラスタ上のマスターノードのウェブ インターフェースポートへの SSH トンネルを設定します。コマンドを実行する前に、Cloud Shell で次の操作を行います。

    1. よく使用されるコマンド変数を設定する
    2. PORT1 変数をポート範囲 8080~8084 の中から Cloud Shell ポートに設定し、PORT2 変数を 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%"

このコマンドでは、次の 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 セッションに関連付けられていない新しいウィンドウを開きます。このフラグを指定しないと、既存の Chrome セッションに接続された新しいウィンドウが開き、--proxy-server 設定が無視される場合があります。--user-data-dir に設定する値は、存在しない任意のパスにできます。

Cloud Shell

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

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

gcloud コマンド

プロキシを使用するようにローカル ブラウザを構成したら、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)です。

ブラウザ ウィンドウが開いて、クラスタ上のマスターノードのウェブ インターフェース ポートに接続されます。

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

ブラウザに 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 ホストを正しく解決できるようになる