Yige

Yige

Build

Livyシリーズ - Livyのコア機能とモジュールの概要

Livy シリーズ - Livy のコア機能とモジュールの概要#

内容整理自:

  1. Apache Livy 実現思路及模块概述

Livy のコア機能点#

  1. http リクエストを通じてタスクを Livy サーバーに送信
  2. Livy サーバー側がユーザーのリクエストを受け取り、適切なルーティングを行って特定のクラスの特定のメソッドを呼び出す
  3. 認証(オプション)
  4. タスクリクエストに基づいて Spark アプリケーションサービスを起動
  5. ユーザーが指定したタスクを実行し、実行状態の取得、実行結果の取得、SparkContext の共有、正常停止などの機能を提供
  6. フォールトトレランス機構、タスクは失敗前の状態から復元可能

モジュール概要#

上記の機能点に基づいて、以下のいくつかのモジュールに分類できます:

  • クライアント
  • ルーター
  • アクセス管理
  • Spark アプリの生成
  • インタラクティブドライバー(セッションタスクのみ、バッチにはなし)
  • 状態データストレージ

image.png

ルーター#

Livy サーバーが提供する API は REST API で、クライアントが送信するリクエストも各リソース(URI)に対する CRUD 操作です。ルーターの主な責任は、どのリソースに対してどの操作をどのクラスのどの関数に割り当てるかを管理することです。
このモジュールのコアクラスはSessionServletで、2 つのサブクラス:InteractiveSessionServletBatchSessionServletがあり、それぞれセッションおよびバッチ関連のリクエストをルーティングします。

アクセス管理#

アクセスは 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 を提供します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。