Apache-flink-quick-guide
Apache Flink-ビッグデータプラットフォーム
過去10年間のデータの進歩は膨大でした。これが「ビッグデータ」という用語を生み出しました。 ビッグデータとして呼び出すことができるデータの固定サイズはありません。従来のシステム(RDBMS)で処理できないデータはすべてビッグデータです。 このビッグデータは、構造化、半構造化、または非構造化の形式にできます。 当初、データには3つの次元がありました-ボリューム、速度、バラエティ。 寸法は3つのVを超えました。 現在、他のV-正確性、有効性、脆弱性、価値、変動性などを追加しました。
ビッグデータは、データの保存と処理を支援する複数のツールとフレームワークの出現をもたらしました。 Hadoop、Spark、Hive、Pig、Storm、Zookeeperなど、人気のあるビッグデータフレームワークがいくつかあります。 また、ヘルスケア、金融、小売、Eコマースなどの複数のドメインで次世代製品を作成する機会を与えました。
MNCであろうと新興企業であろうと、誰もがビッグデータを活用してそれを保存および処理し、より賢明な決定を下しています。
Apache Flink-バッチ処理とリアルタイム処理
ビッグデータの観点では、2種類の処理があります-
- バッチ処理
- リアルタイム処理
時間の経過とともに収集されたデータに基づく処理は、バッチ処理と呼ばれます。 たとえば、銀行のマネージャーは、過去1か月にキャンセルされた小切手の数を知るために、過去1か月のデータ(時間の経過とともに収集される)を処理したいと考えています。
即時結果に基づく即時データに基づく処理は、リアルタイム処理と呼ばれます。 たとえば、銀行のマネージャーは、不正取引(即時結果)が発生した直後に不正警告を受け取ります。
以下の表は、バッチ処理とリアルタイム処理の違いを示しています-
Batch Processing | Real-Time Processing |
---|---|
Static Files | Event Streams |
Processed Periodically in minute, hour, day etc. |
Processed immediately ナノ秒 |
Past data on disk storage | In Memory Storage |
Example − Bill Generation | Example − ATM Transaction Alert |
最近では、リアルタイム処理がすべての組織で多く使用されています。 不正検出、ヘルスケアのリアルタイムアラート、ネットワーク攻撃アラートなどのユースケースでは、インスタントデータのリアルタイム処理が必要です。数ミリ秒の遅延でも大きな影響を与える可能性があります。
このようなリアルタイムのユースケースに理想的なツールは、バッチではなくストリームとしてデータを入力できるツールです。 Apache Flinkは、そのリアルタイム処理ツールです。
Apache Flink-はじめに
Apache Flinkは、ストリーミングデータを処理できるリアルタイム処理フレームワークです。 これは、高性能でスケーラブルで正確なリアルタイムアプリケーション向けのオープンソースストリーム処理フレームワークです。 真のストリーミングモデルがあり、入力データをバッチまたはマイクロバッチとして受け取りません。
Apache FlinkはData Artisans社によって設立され、現在はApache Flink CommunityによってApacheライセンスの下で開発されています。 このコミュニティには、これまでに479人以上の貢献者と15500以上のコミットがあります。
Apache Flinkのエコシステム
以下の図は、Apache Flink Ecosystemのさまざまな層を示しています-
ストレージ
Apache Flinkには、データの読み取り/書き込みが可能な場所から複数のオプションがあります。 以下は、基本的なストレージリストです-
- HDFS(Hadoop分散ファイルシステム)
- ローカルファイルシステム
- S3
- RDBMS(MySQL、Oracle、MS SQLなど)
- MongoDB
- HBase
- アパッチカフカ
- Apache Flume
展開する
Apache Finkは、ローカルモード、クラスターモード、またはクラウドで展開できます。 クラスターモードは、スタンドアロン、YARN、MESOSにすることができます。
クラウドでは、FlinkはAWSまたはGCPにデプロイできます。
カーネル
これはランタイム層であり、分散処理、フォールトトレランス、信頼性、ネイティブの反復処理機能などを提供します。
APIとライブラリ
これは、Apache Flinkの最上位層であり、最も重要な層です。 バッチ処理を処理するDataset APIと、ストリーム処理を処理するDatastream APIがあります。 Flink ML(機械学習用)、Gelly(グラフ処理用)、SQL用テーブルなどのライブラリがあります。 このレイヤーは、Apache Flinkにさまざまな機能を提供します。
Apache Flink-アーキテクチャ
Apache FlinkはKappaアーキテクチャで動作します。 Kappaアーキテクチャには単一のプロセッサがあります-ストリームは、すべての入力をストリームとして扱い、ストリーミングエンジンはデータをリアルタイムで処理します。 kappaアーキテクチャのバッチデータは、ストリーミングの特殊なケースです。
次の図は、 Apache Flink Architecture を示しています。
Kappaアーキテクチャの重要なアイデアは、単一のストリーム処理エンジンを介してバッチデータとリアルタイムデータの両方を処理することです。
ほとんどのビッグデータフレームワークは、バッチデータとストリーミングデータ用に別々のプロセッサを備えたLambdaアーキテクチャで動作します。 Lambdaアーキテクチャでは、バッチビューとストリームビューに別々のコードベースがあります。 クエリを実行して結果を取得するには、コードベースをマージする必要があります。 個別のコードベース/ビューを維持せずにマージするのは苦痛ですが、Kappaアーキテクチャは、ビューが1つしかないためリアルタイムでこの問題を解決します。したがって、コードベースのマージは必要ありません。
これは、KappaアーキテクチャがLambdaアーキテクチャに取って代わることを意味するものではなく、ユースケースと、どのアーキテクチャが望ましいかを決定するアプリケーションに完全に依存します。
次の図は、Apache Flinkジョブ実行アーキテクチャを示しています。
プログラム
これはコードの一部であり、Flink Clusterで実行します。
クライアント
コード(プログラム)を取得し、ジョブデータフローグラフを作成し、それをJobManagerに渡します。 また、ジョブの結果も取得します。
JobManager
クライアントからジョブデータフローグラフを受け取った後、実行グラフを作成します。 ジョブをクラスター内のTaskManagersに割り当て、ジョブの実行を監視します。
タスクマネージャー
JobManagerによって割り当てられたすべてのタスクを実行します。 すべてのTaskManagerは、指定された並列処理で個別のスロットでタスクを実行します。 タスクのステータスをJobManagerに送信する必要があります。
Apache Flinkの機能
Apache Flinkの機能は次のとおりです-
- バッチプログラムとストリームプログラムの両方を実行できるストリーミングプロセッサを備えています。
- 超高速でデータを処理できます。
- Java、Scala、Pythonで利用可能なAPI。
- すべての一般的な操作にAPIを提供します。これは、プログラマーにとって非常に使いやすいです。
- 低レイテンシ(ナノ秒)および高スループットでデータを処理します。
- そのフォールトトレラント。 ノード、アプリケーション、またはハードウェアに障害が発生しても、クラスターには影響しません。
- Apache Hadoop、Apache MapReduce、Apache Spark、HBase、その他のビッグデータツールと簡単に統合できます。
- メモリ内管理は、計算を改善するためにカスタマイズできます。
- 高度にスケーラブルであり、クラスター内で最大数千のノードに拡張できます。
- Apache Flinkではウィンドウイングは非常に柔軟です。
- グラフ処理、機械学習、複合イベント処理ライブラリを提供します。
Apache Flink-システム要件
以下は、Apache Flinkをダウンロードして動作するためのシステム要件です-
推奨オペレーティングシステム
- Microsoft Windows 10
- Ubuntu 16.04 LTS
- Apple macOS 10.13/High Sierra
メモリー要件
- メモリ-最小4 GB、推奨8 GB
- ストレージスペース-30 GB
注意-環境変数がすでに設定されているJava 8が利用可能でなければなりません。
Apache Flink-セットアップ/インストール
Apache Flinkのセットアップ/インストールを開始する前に、システムにJava 8がインストールされているかどうかを確認しましょう。
Java-バージョン
Apache Flinkのダウンロードに進みます。
次に、tarファイルを解凍します。
Flinkのホームディレクトリに移動します。
Flink Clusterを起動します。
Mozillaブラウザーを開き、以下のURLにアクセスすると、Flink Web Dashboardが開きます。
これは、Apache Flink Dashboardのユーザーインターフェイスの外観です。
これでFlinkクラスターが稼働しました。
Apache Flink-APIの概念
Flinkには、開発者がバッチデータとリアルタイムデータの両方で変換を実行できるAPIの豊富なセットがあります。 さまざまな変換には、マッピング、フィルタリング、並べ替え、結合、グループ化、および集約が含まれます。 Apache Flinkによるこれらの変換は、分散データに対して実行されます。 Apache Flinkが提供するさまざまなAPIについて説明しましょう。
データセットAPI
Apache FlinkのデータセットAPIは、一定期間にわたってデータに対してバッチ操作を実行するために使用されます。 このAPIは、Java、Scala、Pythonで使用できます。 フィルタリング、マッピング、集約、結合、グループ化などのさまざまな種類の変換をデータセットに適用できます。
データセットはローカルファイルなどのソースから作成されるか、特定のソースからファイルを読み取ることで作成され、結果ファイルは分散ファイルやコマンドライン端末などのさまざまなシンクに書き込むことができます。 このAPIは、JavaとScalaプログラミング言語の両方でサポートされています。
ここにDataset APIのWordcountプログラムがあります-
DataStream API
このAPIは、連続ストリームでデータを処理するために使用されます。 ストリームデータのフィルタリング、マッピング、ウィンドウ化、集計などのさまざまな操作を実行できます。 このデータストリームには、メッセージキュー、ファイル、ソケットストリームなどのさまざまなソースがあり、コマンドラインターミナルなどのさまざまなシンクに結果データを書き込むことができます。 JavaとScalaプログラミング言語の両方がこのAPIをサポートしています。
DataStream APIのストリーミングワードカウントプログラムを次に示します。ここでは、ワードカウントの連続ストリームがあり、データは2番目のウィンドウにグループ化されます。
Apache Flink-テーブルAPIとSQL
テーブルAPIは、式言語のようなSQLを備えたリレーショナルAPIです。 このAPIは、バッチ処理とストリーム処理の両方を実行できます。 JavaおよびScala DatasetおよびDatastream APIで埋め込むことができます。 既存のデータセットとデータストリームまたは外部データソースからテーブルを作成できます。 このリレーショナルAPIを使用して、結合、集約、選択、フィルタリングなどの操作を実行できます。 入力がバッチであろうとストリームであろうと、クエリのセマンティクスは変わりません。
ここにサンプルのテーブルAPIプログラムがあります-
Apache Flink-Flinkアプリケーションの作成
この章では、Flinkアプリケーションを作成する方法を学びます。
Eclipse IDEを開き、[新規プロジェクト]をクリックして[Javaプロジェクトを選択]をクリックします。
プロジェクト名を入力し、[完了]をクリックします。
次のスクリーンショットに示すように、[完了]をクリックします。
ここで、 src を右クリックして、[新規>>クラス]に移動します。
クラス名を指定して、[完了]をクリックします。
以下のコードをコピーしてエディターに貼り付けます。
Flinkライブラリをこのプロジェクトに追加する必要があるため、エディターで多くのエラーが発生します。
プロジェクト>>ビルドパス>>ビルドパスの構成を右クリックします。
[ライブラリ]タブを選択し、[外部JARの追加]をクリックします。
Flinkのlibディレクトリに移動し、4つのライブラリすべてを選択して、[OK]をクリックします。
[注文とエクスポート]タブに移動し、すべてのライブラリを選択して[OK]をクリックします。
エラーがもうないことがわかります。
次に、このアプリケーションをエクスポートしましょう。 プロジェクトを右クリックして、エクスポートをクリックします。
JARファイルを選択し、「次へ」をクリックします
宛先パスを指定して、「次へ」をクリックします
[次へ]をクリックします>
[参照]をクリックし、メインクラス(WordCount)を選択して、[完了]をクリックします。
注-警告が表示された場合は、[OK]をクリックします。
以下のコマンドを実行します。 さらに、作成したばかりのFlinkアプリケーションを実行します。
Apache Flink-Flinkプログラムの実行
この章では、Flinkプログラムを実行する方法を学びます。
FlinkクラスタでFlink wordcountの例を実行してみましょう。
Flinkのホームディレクトリに移動し、ターミナルで以下のコマンドを実行します。
Flinkダッシュボードに移動すると、完了したジョブとその詳細を確認できます。
[完了したジョブ]をクリックすると、ジョブの詳細な概要が表示されます。
wordcountプログラムの出力を確認するには、ターミナルで次のコマンドを実行します。
Apache Flink-ライブラリ
この章では、Apache Flinkのさまざまなライブラリについて学習します。
複合イベント処理(CEP)
FlinkCEPは、連続ストリーミングデータのイベントパターンを分析するApache FlinkのAPIです。 これらのイベントはほぼリアルタイムであり、スループットが高く、待ち時間が短くなっています。 このAPIは主にセンサーデータで使用されます。センサーデータはリアルタイムで送信され、処理が非常に複雑です。
CEPは入力ストリームのパターンを分析し、すぐに結果を出します。 イベントパターンが複雑な場合に、リアルタイムの通知とアラートを提供する機能があります。 FlinkCEPは、さまざまな種類の入力ソースに接続し、それらのパターンを分析できます。
これは、CEPを使用したサンプルアーキテクチャがどのように見えるかです-
センサーデータはさまざまなソースから取得され、KafkaはストリームをApache Flinkに配信する分散メッセージングフレームワークとして機能し、FlinkCEPは複雑なイベントパターンを分析します。
パターンAPIを使用して、複雑なイベント処理用のプログラムをApache Flinkで作成できます。 これにより、連続ストリームデータから検出するイベントパターンを決定できます。 以下は、最も一般的に使用されるCEPパターンの一部です-
ベギン
開始状態を定義するために使用されます。 次のプログラムは、Flinkプログラムでどのように定義されているかを示しています-
どこで
現在の状態でフィルター条件を定義するために使用されます。
Next
新しいパターン状態と前のパターンを渡すために必要な一致イベントを追加するために使用されます。
に続く
新しいパターン状態を追加するために使用されますが、ここでは他のイベントが2つの一致するイベントで発生する可能性があります。
ゲリー
Apache FlinkのGraph APIはGellyです。 Gellyは、一連のメソッドとユーティリティを使用して、Flinkアプリケーションでグラフ分析を実行するために使用されます。 Gellyを使用して、Apache Flink APIを分散形式で使用して、巨大なグラフを分析できます。 同じ目的でApache Giraphのような他のグラフライブラリもありますが、GellyはApache Flinkの上で使用されるため、単一のAPIを使用します。 これは、開発と運用の観点から非常に役立ちます。
Apache Flink API-Gellyを使用して例を実行してみましょう。
まず、Apache Flinkのoptディレクトリからlibディレクトリに2つのGelly jarファイルをコピーする必要があります。 次に、flink-gelly-examples jarを実行します。
PageRankの例を実行してみましょう。
PageRankは頂点単位のスコアを計算します。これは、インエッジを介して送信されたPageRankスコアの合計です。 各頂点のスコアは、アウトエッジ間で均等に分割されます。 高スコアの頂点は、他の高スコアの頂点によってリンクされています。
結果には、頂点IDとPageRankスコアが含まれます。
Apache Flink-機械学習
Apache Flinkの機械学習ライブラリはFlinkMLと呼ばれます。 機械学習の使用が過去5年間で指数関数的に増加しているため、Flinkコミュニティはこの機械学習APOをエコシステムにも追加することを決定しました。 FlinkMLでは、貢献者とアルゴリズムのリストが増えています。 このAPIはまだバイナリ配布の一部ではありません。
ここにFlinkMLを使用した線形回帰の例があります-
このサンプルプログラムは、デフォルトのポイントと重心データセットを使用して実行されます。
Apache Flink-ユースケース
この章では、Apache Flinkのいくつかのテストケースを理解します。
Apache Flink-Bouygues Telecom
Bouygues Telecomは、フランスで最大の通信会社の1つです。 1,100万人以上のモバイル加入者と250万人以上の固定顧客がいます。 Bouyguesは、パリで開催されたHadoop Group MeetingでApache Flinkについて初めて耳にしました。 それ以来、彼らは複数のユースケースにFlinkを使用しています。 彼らは、Apache Flinkを介して1日に何十億ものメッセージをリアルタイムで処理しています。
これが、Apache FlinkについてBouyguesが言わなければならないことです。 さらに、他のソリューションに比べてわずかな時間でFlinkを使用してシステムを稼働させることができたため、システム内のビジネスロジックを拡張するための開発者リソースが増えました。」_
ブイグでは、顧客体験が最優先事項です。 彼らはエンジニアに以下の洞察を与えることができるように、リアルタイムでデータを分析します-
- ネットワークを介したリアルタイムのカスタマーエクスペリエンス
- ネットワークで世界的に起こっていること
- ネットワークの評価と運用
LUX(Logged User Experience)と呼ばれるシステムを作成し、内部データ参照を使用してネットワーク機器からの大量のログデータを処理し、カスタマーエクスペリエンスを記録し、60以内のデータ消費の障害を検出するアラーム機能を構築するエクスペリエンスインジケーターを提供します秒。
これを実現するには、大量のデータをリアルタイムで取得でき、セットアップが簡単で、ストリーミングデータを処理するための豊富なAPIセットを提供するフレームワークが必要でした。 Apache FlinkはBouygues Telecomにぴったりでした。
Apache Flink-アリババ
Alibabaは、2015年に3,940億ドルの収益を上げた世界最大のeコマース小売企業です。 Alibaba検索は、すべての顧客へのエントリポイントであり、すべての検索を表示し、それに応じて推奨します。
Alibabaは、検索エンジンでApache Flinkを使用して、各ユーザーに対して最高の精度と関連性でリアルタイムに結果を表示します。
Alibabaはフレームワークを探していました。
- 検索インフラストラクチャプロセス全体で1つのコードベースを維持するのに非常に俊敏です。
- Webサイト上の製品の可用性の変更に対する低遅延を提供します。
- 一貫性と費用対効果。
Apache Flinkは、上記のすべての要件を満たしています。 単一の処理エンジンを備え、同じエンジンでバッチデータとストリームデータの両方を処理できるフレームワークが必要です。これがApache Flinkの機能です。
また、検索のいくつかの固有の要件を満たすために、Flinkの分岐バージョンであるBlinkを使用します。 また、Apache FlinkのTable APIを使用しており、検索の改善はほとんどありません。
これが、Apache FlinkについてAlibabaが言わなければならなかったことです。「振り返ってみると、AlibabaでのBlinkとFlinkにとって間違いなく大きな年でした。 私たちが1年でこれほどの進歩を遂げるとは誰も考えませんでした。コミュニティで私たちを助けてくれたすべての人々に感謝しています。 Flinkは非常に大規模に機能することが実証されています。 私たちは、Flinkを前進させるために、これまで以上にコミュニティとの協力を続けていきます!」
Apache Flink-Flink vs Spark vs Hadoop
これは、Apache Flink、Apache Spark、Apache Hadoopの3つの最も一般的なビッグデータフレームワークの比較を示す包括的な表です。
Apache Hadoop | Apache Spark | Apache Flink | |
---|---|---|---|
Year of Origin | 2005 | 2009 | 2009 |
Place of Origin | MapReduce (Google) Hadoop (Yahoo) | University of California, Berkeley | Technical University of Berlin |
Data Processing Engine | Batch | Batch | Stream |
Processing Speed | Slower than Spark and Flink | 100x Faster than Hadoop | Faster than spark |
Programming Languages | Java, C, C++, Ruby, Groovy, Perl, Python | Java, Scala, python and R | Java and Scala |
Programming Model | MapReduce | Resilient distributed Datasets (RDD) | Cyclic dataflows |
Data Transfer | Batch | Batch | Pipelined and Batch |
Memory Management | Disk Based | JVM Managed | Active Managed |
Latency | Low | Medium | Low |
Throughput | Medium | High | High |
Optimization | Manual | Manual | Automatic |
API | Low-level | High-level | High-level |
Streaming Support | NA | Spark Streaming | Flink Streaming |
SQL Support | Hive, Impala | SparkSQL | Table API and SQL |
Graph Support | NA | GraphX | Gelly |
Machine Learning Support | NA | SparkML | FlinkML |
Apache Flink-結論
前の章で見た比較表は、ポインターをほぼまとめています。 Apache Flinkは、リアルタイムの処理とユースケースに最も適したフレームワークです。 単一のエンジンシステムは、DatasetやDataStreamなどの異なるAPIを使用してバッチデータとストリーミングデータの両方を処理できる独自のシステムです。
HadoopとSparkがゲームから除外されるわけではなく、最適なビッグデータフレームワークの選択は常にユースケースに依存し、ユースケースごとに異なります。 HadoopとFlinkまたはSparkとFlinkの組み合わせが適しているユースケースがいくつかあります。
それでも、Flinkは現在のリアルタイム処理に最適なフレームワークです。 Apache Flinkの成長は驚くべきものであり、コミュニティへの貢献者の数は日々増加しています。
幸せな点滅!