- 背景: zeppelinはジョブごとのモードを提供しません。
- zeppelinジョブモードごとに提供しない
- リアルタイムプラットフォーム用の長い開発サイクル
- zeppelinをベースとしたシンプルなリアルタイムプラットフォームの開発
- zeppelin インタープリタの開発
- sqlタスクの投入
- jarタスクの投入
背景
flink の隆盛に伴い、zeppelin コミュニティも flink と zeppelin の統合を精力的に推進しています。 zeppelin は、sql や scala などの言語を使用した対話型分析クエリ解析ツールとして位置づけられています。
Web-based notebook that enables data-driven,
interactive data analytics and collaborative documents with SQL, Scala and more.
そこで、zeppelinは、flinkや他のインタプリタとの統合は、このようなアーキテクチャの機能があるでしょう、私はデータを処理するサービスを起動する必要があり、関連するタスクは、これに提出され、flinkを取ると、ローカル、リモート、セッションモードクラスタなどのflinkクラスタを起動する必要があります。 いくつかのflink sqlの実行時に、このクラスタに実行するために提出されます。
zeppelinジョブモードごとに提供しない
しかし、本番環境では、一部のflinkストリーミング・タスクでは、主にタスク・リソースの分離のために、ジョブごとにタスクを投入するモードを使用します。現在zeppelinは、このモードをサポートしていません。だから、多くの企業がリアルタイムストリーミングタスクコンピューティングプラットフォームを開発する、あなたは、クラスタにタスクを提出するプラットフォームを介してsqlまたはjarの使用を実現することができますので、一部の人々は、いくつかの操作の根本的な複雑さを避けるために、唯一のsqlはまた、flinkタスクを開発することができます。
リアルタイムプラットフォームの長い開発サイクル
zeppelinをベースとしたシンプルなリアルタイムプラットフォームの開発
本日は、zeppelinを使ったシンプルなリアルタイムプラットフォームの実装方法についてお話します。
FLINKタスクの提出でzeppelinは、クラスタが起動されているかどうかを判断し、FLINKクラスタを開始していない場合は、設定されたモードに応じて最初に非分離モードFLINKクラスタを起動し、クライアントは、サーバーとの接続を維持し、後続のユーザーがタスクを提出する、タスクは、クラスタが開始されたばかりに提出されます。私は、コードを勉強し、この上記のジョブごとにモードを追加すると、元のアーキテクチャを破壊する可能性があり、変更が比較的大きくなりますので、zepplinインタプリタを行うには、関数は、SQLまたはjarストリーミングタスクの方法を介してflinkの提出のために排他的に使用されることだと思います。
zeppelinインタープリタの開発
核となるコードは、抽象クラスInterpreterを継承し、そのメソッドをいくつか実装するというものです。
public abstract class Interpreter {
/**
* 初期化コール、あなたはこの中にいくつかのシステムの初期化作業を追加することができ、このメソッドは一度だけ呼び出される。
* flinkのカスタム・ソースやカスタム・シンクを書いたことのある友人なら、知らない人はいないはずだ。
*/
@ZeppelinApi
public abstract void open() throws InterpreterException;
/**
*
* インタープリター・リソースの解放も一度しか呼び出されない。
*/
@ZeppelinApi
public abstract void close() throws InterpreterException;
/**
* 入力ボックス内のコードを非同期に実行し、結果を返す。.
*
* @param st ページ上のボックスに何を入力するかだ。
*/
@ZeppelinApi
public abstract InterpreterResult interpret(String st,
InterpreterContext context)
throws InterpreterException;
}
上記のものの他にもいくつかありますが、ここではコードを列挙しませんので、興味のある方はご自分の目で確かめてください。
一番下で、私はタスクを提出するためにflinkアプリケーションモードを使用し、openの内部では、設定ファイルを構築し、yarnClientを開始するなど、flinkの初期化を提出するためにいくつかの作業を行います。interpretメソッドで内容を解析し、タスクを投入する作業を行います。
最終的に、jarパッケージとsqlによってyarnクラスタにタスクを投入できることがわかりました。
sqlタスクの投入
ジョブ名、並列度、チェックポイント間隔など、タスクのいくつかのパラメータを指定できます。ページはこのようになり、タスクを送信すると、yarnクラスタ内の関連タスクが表示されます。
jarタスクの投入
まず適切なjarをhdfs関連パスにアップロードし、タスクを投入します。jarのパス、jobname、parallelismなどを指定し、本体は何も書く必要はなく、このタスクをyarnクラスタに投入します。
現時点では一部のコア機能しか実装されておらず、その後に改良が必要な機能もあります。