Apache Zeppelin シリーズのチュートリアルの第 2 部 - 全体的なアーキテクチャ

ツェッペリンのアーキテクチャ:

まず、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)倹約

Apache Thrift シリーズ徹底解説(1) - 概要と入門編 - Nuggets

おすすめ

転載: blog.csdn.net/weixin_43291055/article/details/130402691