ツェッペリンのアーキテクチャ:
まず、Zeppelin のアーキテクチャを理解しましょう Zeppelin は主に 3 つの層に分かれています。
ウェブフロントエンド
ツェッペリンサーバー
通訳者
Zeppelin のフロントエンドはフロントエンド ページの対話を担当し、Rest API および WebSocket を通じて Zeppelin サーバーと対話します。
Zeppelin Server は Web サーバーであり、すべてのメモやインタープリタなどの管理を担当します。Zeppelin Server は特定のコードの実行は実行しませんが、コードを実行するためにインタープリタに渡します。インタープリタは独立したプロセスであり、コードの実行を担当します
。特定のフロントエンド ユーザーによって送信されたもの (Spark Scala コードや SQL コードなど)。Zeppelin Server は thrift を通じて Interpreter 自体と通信し、これは双方向通信です。Zeppelin は、現在人気のあるビッグ データ エンジンのほとんどをサポートしています。上の図では、より一般的に使用されている 3 つのエンジンのみを示しています: Flink、Spark、Jdbc
Zeppelin サーバーは独立したプロセスです。プロセス ログは、ログ ディレクトリ内の zeppelin-{user}-{host}.log です。各インタープリタも独立したプロセスです。プロセス ログは、ログ内の zeppelin-interpreter-{interpreter}- です。ディレクトリ.*.log に保存されているため、問題が発生した場合は、まずこれら 2 つのログ ファイルにアクセスして手がかりを見つけることができます。
ツェッペリン社がWebSocket技術を採用する必要性については、こちらも簡単な分析をしておきます。Zeppelin は、ノートブック スタイルの共有ビッグ データ分析環境であり、repl 形式で最小粒度としてパラグラフを使用してコード セグメントを実行します。
1. まず第一に、repl メソッドは、特にコードの実行に長い時間がかかるビッグ データ環境において、実行結果に関するリアルタイムのフィードバックを重視します。実行プロセス中、zeppelin ユーザーは実行結果を見ることを期待します。リアルタイムのデータ送信を容易にするために、端末間に長い接続を確立します。
2. さらに、zeppelin のもう 1 つのハイライトは、結果の視覚化機能です。これは、前後の画像を送信する必要があり、(従来の http テクノロジーと比較して) 大量のデータの送信をサポートします。
3. また、共有環境であるため、複数のユーザーが同時にノートを閲覧したり、編集したりする可能性があり、ノートを開いた Web クライアント間でノートのコード、実行結果、進捗情報を同期する必要があります。同じ注意事項。
ツェッペリンに関わる技術
フロントエンド:
AngularJS
zeppelin フロントエンド Websocket 送信リクエスト コード: zeppelin-web\src\components\websocket\websocket-message.service.js
後部:
Zeppelin は埋め込みサーバーとして Jetty を使用し、WebSocket に加えて Jersey フレームワークも使用して Restful サービスを提供します。
Zeppelin のインタープリター (インタープリター) は独立した JVM プロセスであるため、Zeppelin は Apache Commons Exec フレームワークを使用してメイン プロセスがインタープリター プロセスを開始できるようにし、Thrift フレームワークを使用してメイン プロセスとインタープリター プロセス間の通信を行います。
Zeppelin は、権限制御のために Apache Taro も提供し、Note の全文検索には Apache Lucence を使用します。
バックエンドでサービスを開始するためのコード (Zeppelin Server プログラムのエントリ クラス): zeppelin-server\src\main\java\org\apache\zeppelin\server\ZeppelinServer.java
バックエンドで WebSocket リクエストを受信するコード: zeppelin-server\src\main\java\org\apache\zeppelin\socket\NotebookServer.java
バックエンドで REST リクエストを受信するためのコード: zeppelin-server\src\main\java\org\apache\zeppelin\rest\NotebookRestApi.java
フロントエンドのパッケージ化: npm を実行します。zeppelin-web で build:dist を実行します。
フロントエンドのパッケージ化: npm を実行し、zeppelin-web-angular でビルドを実行します。
zeppelin/README.md マスター · apache/zeppelin · GitHub
バックエンド サービスのパッケージ化: ルート ディレクトリ内の mvn clean package -DskipTests -Phadoop2
参考:
https://www.jianshu.com/p/02596c7a2342
https://blog.csdn.net/swimhigh/article/details/80755666#comments_8150094
https://code-monkey.top/2019/06/12/Zeppelin%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90-note%E7%9A%84% E6%89%A7%E8%A1%8C%E8%BF%87%E7%A8%8B/
https://blog.csdn.net/spacewalkman/article/details/69230145
Zeppelin のソース コード分析 - サーバー側 - H10242 のブログ - CSDN ブログ
ツェッペリンに関わる関連技術の紹介:
(1) WebSocketの導入
WebSocket チュートリアル - Ruan Yifeng のウェブログ
Websocket テクノロジーの Java 実装 (パート 1)_@serverendpoint path_KeepStruggling のブログ - CSDN ブログ
(2) java8関数の新機能
Java8 の新機能 2: 関数インターフェース bzdww
(3) commons-exec コマンド実行
プログラマーの福音 - Apache Commons Exec - プログラマー募集
(4)倹約