Managed Service for Apache Spark クラスタに付属しているコア オープンソース コンポーネントの中には、Apache Hadoop や Apache Sparkのように、ウェブ インターフェースを備えているものがあります。こうしたインターフェースを使用すると、YARN リソース マネージャー、Hadoop Distributed File System(HDFS)、MapReduce、Spark などのクラスタ リソースと機能を管理およびモニタリングできます。クラスタにインストールするその他のコンポーネント またはアプリケーションの中にも、ウェブ インターフェースを提供するものがあります (たとえば、 Managed Service for Apache Spark クラスタで Jupyter ノートブックをインストールして実行するをご覧ください)。
使用可能なインターフェース
Managed Service for Apache Spark クラスタ マスターノードでは、次のインターフェースを使用できます(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 Managed Service for Apache Spark の以前のリリース(1.2 より前)では、HDFS Namenode のウェブ UI ポートは 50070 でした。
YARN ResourceManager の [UI のトラッキング] 列には、現在実行中か完了したすべての MapReduce と Spark アプリケーションのウェブ インターフェースのリンクがあります。
使用可能な YARN リソース マネージャー REST API
クラスタを作成すると、Managed Service for Apache Spark
により yarn-site.xml の yarn.resourcemanager.webapp.methods-allowed
プロパティ
が「GET, HEAD」に設定されます。これにより、
YARN Resource Manager ウェブ 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 へのアクセスを制限するようにファイアウォール ルールとその他のセキュリティ設定を構成してください。
ウェブ インターフェースへの接続
Managed Service for Apache Spark クラスタで実行されているウェブ インターフェースに接続するには、Managed Service for Apache Spark コンポーネント ゲートウェイや、プロジェクトの Cloud Shell、Google Cloud CLI の gcloud コマンドライン ツールを使用します。
コンポーネント ゲートウェイ: コンソールから Hadoop、Spark、その他のコンポーネント ウェブ UI インターフェースにワンクリックで接続できます。 Google Cloud コンポーネント ゲートウェイは、クラスタの作成時に有効にします。
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 には
Managed Service for Apache Spark クラスタ内のマスターノードの名前を設定します(マスター名には接尾辞
-mが付いています)。 - ZONE には Managed Service for Apache Spark クラスタ内の 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 変数を Managed Service for Apache Spark クラスタ上のマスターノードのウェブ インターフェース ポートに設定します。
PORT1=number PORT2=number
gcloud compute ssh ${HOSTNAME} \ --project=${PROJECT} --zone=${ZONE} -- \ -4 -N -L ${PORT1}:${HOSTNAME}:${PORT2}--の区切り文字を使用すると、次のように SSH 引数をgcloud compute 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 コマンド
プロキシを使用するようにローカル ブラウザを構成したら、Managed Service for Apache Spark クラスタの
ウェブ インターフェース 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 で使用可能)。HTTP レスポンスが表示されている場合は、プロキシが動作しているため、SOCKS プロキシが別のプロキシまたはブラウザ拡張機能によって中断されている可能性があります。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 ホストを正しく解決できるようになる