Livy シリーズ - Livy のコア機能とモジュールの概要#
内容整理自:
Livy のコア機能点#
- http リクエストを通じてタスクを Livy サーバーに送信
- Livy サーバーがユーザーのリクエストを受け取り、適切なルーティングを行い、特定のクラスの特定のメソッドを呼び出す
- 認証(オプション)
- タスクリクエストに基づいて Spark アプリケーションサービスを起動
- ユーザーが指定したタスクを実行し、実行状態の取得、実行結果の取得、SparkContext の共有、正常停止などの機能を提供
- フォールトトレランス機能、タスクは失敗前の状態から復元可能
モジュール概要#
上記の機能点に基づいて、以下のモジュールに分類できます:
- Client
- router
- 権限管理
- Spark App の生成
- インタラクティブドライバー(セッションタスクのみ、バッチにはなし)
- 状態データストレージ

router#
Livy サーバーが提供する API は REST API であり、Client が送信するリクエストは各リソース(URI)に対する CRUD 操作です。router の主な責任は、どのリソースに対してどの操作をどのクラスのどの関数に割り当てるかを管理することです。
このモジュールのコアクラスはSessionServletで、2 つのサブクラス:InteractiveSessionServletとBatchSessionServletがあり、それぞれセッションおよびバッチ関連のリクエストをルーティングします。
権限管理#
権限は AccessManager クラスによって管理され、いくつかの異なるレベルのユーザーを維持します:
superUsermodifyUserviewUserallowedUser
および異なるレベルの ACL(アクセス制御リスト):
viewAcls:superUsers ++ modifyUsers ++ viewUsers、対応する閲覧権限modifyAcls:superUsers ++ modifyUsers、対応する変更権限(kill 権限を含む)superAcls:superUsers、すべての権限を持つallowedAcls:superUsers ++ modifyUsers ++ viewUsers ++ allowedUsers、ACL の全集を示す
SparkAPP の生成#
セッションとバッチのタスクに対する Spark App の生成ロジックおよび最終的に生成される Spark App は異なります。
バッチの Spark App 生成に関与する主なクラス:
-
SparkProcessBuilder:livyConf から Spark App を実行するために必要なすべてを抽出し、mainClass、executableFile、deployMode、conf、master、queue、env、およびドライバーとエグゼキューターのリソース設定などを含み、最終的に Spark App を起動するための spark-submit コマンドを生成します。 -
SparkYarnApp:SparkProcessBuilder が生成した起動コマンドを実行し、起動した Spark App を監視管理します。状態、ログ、診断情報、kill などを取得します(現在、livy は local と yarn の 2 つのモードのみをサポートしています)。
セッションの Spark App 生成に関与する主なクラス:
-
ContextLauncher:新しい Spark App を起動するために使用され(SparkLauncher を通じて)、そのドライバーに接続する方法(アドレス、clientId、秘密鍵)を取得します。 -
RSCClient:Spark Driver と接続を確立し、作成、状態結果ログの確認、statement、job などのリクエストを送信し、応答を取得します。
インタラクティブドライバー#
コアクラスはRSCDriverで、RpcDispatcherを継承しています。RpcDispatcher はRSCClientから送信された RPC リクエストを受信し、リクエストのタイプに応じてRSCDriverの対応するメソッドを呼び出してリクエストに含まれる具体的な情報を処理します。最も重要な実行コードスニペット(statement)リクエストに対しては、repl/Sessionを呼び出して処理し、repl/Session は異なるsession kindに基づいて異なるInterpreterを呼び出して実際のコードを実行します。
状態データストレージ#
コアクラスはStateStoreで、状態データのストレージはすべて key-value 形式で行われ、現在はfilesystemファイルシステムとZookeeperに基づく実装があります。また、SessionStoreはこのクラスを継承し、セッションのストレージと復元のための高階 API を提供します。