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 ドライバーと接続を確立し、作成、状態結果ログの表示、statement の変更、ジョブなどのリクエストを送信し、応答を取得します。
インタラクティブドライバー#
コアクラスはRSCDriver
で、RpcDispatcher
を継承しています。RpcDispatcher はRSCClient
から送信された RPC リクエストを受信し、リクエストのタイプに応じてRSCDriver
の対応するメソッドを呼び出してリクエストに含まれる具体的な情報を処理します。最も重要な実行コードスニペット(statement)リクエストについては、repl/Session
を呼び出して処理し、repl/Session は異なるsession kind
に応じて異なるInterpreter
を呼び出して実際のコードを実行します。
状態データストレージ#
コアクラスはStateStore
で、状態データのストレージはすべてキー - バリュー形式であり、現在はfilesystemファイルシステム
とZookeeper
に基づく実装があります。また、SessionStore
はこのクラスを継承し、セッションのストレージと復元のための高階 API を提供します。