Dataproc クラスタに付属しているコア オープンソース コンポーネントの中には、Apache Hadoop や Apache 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 プロキシ サーバーを実行します。
ローカルマシンでコマンドを実行する前に:
- よく使用されるコマンド変数を設定する
- 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
- Google Cloud Cloud Shell を開きます。
-
Cloud Shell で次の
gcloud
コマンドを実行して、Cloud Shell プレビューポートからクラスタ上のマスターノードのウェブ インターフェースポートへの SSH トンネルを設定します。コマンドを実行する前に、Cloud Shell で次の操作を行います。- よく使用されるコマンド変数を設定する
- 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 の [ウェブ プレビュー] ボタン をクリックし、次のいずれかを選択します。
- [プレビューのポート: 8080]、または
- [ポートを変更] をクリックしてダイアログにポート番号を入力する
gcloud compute ssh
コマンドに渡した Cloud Shell の PORT1 番号(ポート 8080~8084)です。
ブラウザ ウィンドウが開いて、クラスタ上のマスターノードのウェブ インターフェース ポートに接続されます。
よくある質問とデバッグのヒント
ブラウザに UI が表示されない場合はどうすればよいですか?
ブラウザに UI が表示されない場合、最も可能性が高い理由は次の 2 つです。
ネットワーク接続に問題があります。おそらくファイアウォールが原因です。 ローカル変数を設定した後、次のコマンドを実行して、マスター インスタンスに SSH で接続できるかどうかを確認します。 できない場合は、接続に問題があります。
Linux / macOS
gcloud compute ssh ${HOSTNAME}-m \ --project=${PROJECT}
Windows
gcloud compute ssh %HOSTNAME%-m ^ --project=%PROJECT%
別のプロキシが 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
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 ホストを正しく解決できるようになる