Livy シリーズ - Livy のコア機能とモジュールの概要#
内容整理自:
Livy のコア機能点#
- http リクエストを通じてタスクを Livy サーバーに送信
- Livy サーバー側がユーザーのリクエストを受け取り、適切なルーティングを行って特定のクラスの特定のメソッドを呼び出す
- 認証(オプション)
- タスクリクエストに基づいて Spark アプリケーションサービスを起動
- ユーザーが指定したタスクを実行し、実行状態の取得、実行結果の取得、SparkContext の共有、正常停止などの機能を提供
- フォールトトレランス機構、タスクは失敗前の状態から復元可能
モジュール概要#
上記の機能点に基づいて、以下のいくつかのモジュールに分類できます:
- クライアント
- ルーター
- アクセス管理
- Spark アプリの生成
- インタラクティブドライバー(セッションタスクのみ、バッチにはなし)
- 状態データストレージ
ルーター#
Livy サーバーが提供する API は REST API で、クライアントが送信するリクエストも各リソース(URI)に対する CRUD 操作です。ルーターの主な責任は、どのリソースに対してどの操作をどのクラスのどの関数に割り当てるかを管理することです。
このモジュールのコアクラスはSessionServlet
で、2 つのサブクラス:InteractiveSessionServlet
とBatchSessionServlet
があり、それぞれセッションおよびバッチ関連のリクエストをルーティングします。
アクセス管理#
アクセスは AccessManager クラスによって管理され、異なるレベルのユーザーを維持します:
superUser
modifyUser
viewUser
allowedUser
および異なるレベルの ACL(アクセス制御リスト):
viewAcls
:superUsers ++ modifyUsers ++ viewUsers、対応する閲覧権限modifyAcls
:superUsers ++ modifyUsers、対応する変更権限(kill 権限を含む)superAcls
:superUsers、すべての権限を持つallowedAcls
:superUsers ++ modifyUsers ++ viewUsers ++ allowedUsers、ACL の全集を示す
Spark アプリの生成#
セッションおよびバッチのタスクに対して、Spark アプリの生成ロジックおよび最終的に生成される Spark アプリは異なります。
バッチの Spark アプリ生成に関与する主なクラス:
-
SparkProcessBuilder
:livyConf から Spark アプリを実行するために必要なすべての情報を抽出し、mainClass、executableFile、deployMode、conf、master、queue、env、およびドライバーとエグゼキューターのリソース設定などを含む;最終的に Spark アプリを起動するための spark-submit コマンドを生成します。 -
SparkYarnApp
:SparkProcessBuilder が生成した起動コマンドを実行し、起動した Spark アプリを監視管理します。状態、ログ、診断情報、kill などを取得します(現在、Livy は local と yarn の 2 つのモードのみをサポートしています)。
セッションの Spark アプリ生成に関与する主なクラス:
-
ContextLauncher
:新しい Spark アプリを起動するため(SparkLauncher を通じて)およびそのドライバーに接続する方法(アドレス、clientId、およびシークレット)を取得します。 -
RSCClient
:Spark ドライバーとの接続を確立し、作成、状態結果ログの確認、ステートメントの変更、ジョブなどのリクエストを送信し、応答を取得します。
インタラクティブドライバー#
コアクラスはRSCDriver
で、RpcDispatcher
を継承しています。RpcDispatcher はRSCClient
から送信された RPC リクエストを受け取り、リクエストのタイプに応じてRSCDriver
の適切なメソッドを呼び出してリクエストに含まれる具体的な情報を処理します。最も重要な実行コードスニペット(ステートメント)リクエストについては、repl/Session
を呼び出して処理し、repl/Session は最終的に異なるsession kind
に基づいて異なるInterpreter
を呼び出して実際のコードを実行します。
状態データストレージ#
コアクラスはStateStore
で、状態データのストレージはすべてキー - バリュー形式で、現在はfilesystemファイルシステム
とZookeeper
に基づく実装があります。また、SessionStore
はこのクラスを継承し、セッションのストレージと復元のための高階 API を提供します。