初心者向けのApacheSparkストリーミングチュートリアル:作業、アーキテクチャ、機能
公開: 2020-02-27私たちは現在、毎秒大量のデータが高速で生成される世界に住んでいます。 このデータは、正確に分析された場合、意味のある有用な結果を提供できます。 また、適切なタイミングで多くの業界にソリューションを提供できます。
これらは、旅行サービス、小売、メディア、金融、ヘルスケアなどの業界で非常に役立ちます。 他の多くのトップ企業は、プラットフォーム上でAmazonが行ったさまざまな種類の製品との顧客の相互作用の追跡や、Netflixが提供するパーソナライズされた推奨事項をリアルタイムで受信する視聴者などのデータ分析を採用しています。
大量のデータを使用するすべてのビジネスで使用でき、ビジネスの全体的なプロセスを改善し、顧客満足度とユーザーエクスペリエンスを向上させるために、データを分析してメリットを得ることができます。 より良いユーザーエクスペリエンスと顧客満足度は、長期的には、ビジネスを拡大して利益を上げるために組織に利益をもたらします。
目次
ストリーミングとは何ですか?
データのストリーミングは、情報が継続的かつ安定したストリームとして転送される方法です。 インターネットが成長するにつれて、ストリーミングの技術も増加しています。
Spark Streamingとは何ですか?
データがバインドされていないシーケンスで継続的に到着する場合、それはデータストリームと呼ばれます。 入力データは着実に流れており、ストリーミングで分割されています。 データが個別の単位に分割された後、データのさらなる処理が行われます。 データの分析と低遅延でのデータの処理は、ストリーム処理と呼ばれます。
2013年に、ApacheSparkがSparkStreamingとともに追加されました。 TCP Sockets、Amazon Kinesis、Apache Flume、Kafkaなど、データの取り込みが発生する可能性のあるソースは多数あります。 洗練されたアルゴリズムの助けを借りて、データの処理が行われます。 処理を表現するために、window、join、reduce、mapなどの高レベルの関数が使用されます。 ライブダッシュボード、データベース、およびファイルシステムは、処理されたデータをファイルシステムにプッシュするために使用されます。

ストリームの動作
以下は内部作業です。 Sparkストリーミングは、ライブ入力データストリームをバッチに分割します。 Spark Engineは、これらのバッチを処理して、結果として最終ストリームバッチを生成するために使用されます。
ストリーム内のデータは小さなバッチに分割され、Apache Spark Discretized Stream(Spark DStream)で表されます。 Spark RDDはDStreamの構築に使用され、これはSparkのコアデータ抽象化です。 SparkSQLやSparkMLibなどのApacheSparkのコンポーネントは、SparkStreamingとシームレスに簡単に統合できます。
Spark Streamingは、ライブデータストリームのスケーリングに役立ちます。 これは、コアSparkAPIの拡張機能の1つです。 また、フォールトトレラントストリームと高スループットの処理も可能になります。 Spark Streamingを使用すると、ライブデータのリアルタイム処理とストリーミングが行われます。 世界の主要なトップ企業は、Pinterest、Netflix、UberなどのSparkStreamingのサービスを使用しています。
Spark Streamingは、リアルタイムでのデータ分析も提供します。 データのライブおよび高速処理は、SparkStreamingの単一のプラットフォームで実行されます。
ApacheSparkアーキテクチャもお読みください
なぜスパークストリーミング?
Spark Streamingを使用して、Facebook、株式市場、地理システムなどのさまざまなソースからリアルタイムデータをストリーミングし、強力な分析を行ってビジネスを促進することができます。
Spark Streamingには、非常にユニークな5つの重要な側面があり、それらは次のとおりです。
1.統合
グラフ処理、機械学習、SQLなどの高度なライブラリを簡単に統合できます。
2.組み合わせ
ストリーミングされるデータは、インタラクティブなクエリや静的なデータセットと組み合わせて実行できます。
3.負荷分散
Spark Streamingは、負荷のバランスが完璧であるため、非常に特別です。
4.リソースの使用
Spark Streamingは、利用可能なリソースを非常に最適な方法で使用します。
5.ストラグラーと障害からの回復
Spark Streamingは、あらゆる種類の障害やストラグラーから迅速に回復できます。
ApacheSparkでのストリーミングの必要性
連続演算子モデルは、データを処理するために従来からストリームを処理するためのシステムを設計する際に使用されます。 システムの動作は次のとおりです。
- データソースは、データのストリーミングに使用されます。 さまざまな種類のデータソースには、IoTデバイス、システムテレメトリデータ、ライブログなどがあります。 これらのストリーミングデータは、Amazon Kinesis、ApacheKafkaなどのデータ取り込みシステムに取り込まれます。
- クラスターでは、データに対して並列処理が行われます。
- 結果を渡すために、Kafka、Cassandra、HBaseなどのダウンストリームシステムが使用されます。
ワーカーノードのセットは、いくつかの連続演算子を実行します。 ストリーミングされたデータのレコードの処理は、一度に1つずつ実行されます。 その後、ドキュメントはパイプライン内の次のオペレーターに転送されます。
ソース演算子は、取り込みシステムからデータを受信することに慣れています。 シンク演算子は、ダウンストリームシステムに出力を提供するために使用されます。
一部の演算子は連続です。 これらは自然でわかりやすいモデルです。 大規模に行われるリアルタイムでの複雑なデータの分析に関しては、従来のアーキテクチャは現代の世界でいくつかの課題に直面しています。
迅速な障害回復
今日のシステム障害は、並列ノードで欠落している情報を計算することによって失われた情報を回復することによって、迅速に付随し、対応します。 したがって、従来のシステムと比較して、リカバリがさらに高速になります。
ロードバランサー
ロードバランサーは、より効率的な方法でノード間でリソースとデータを割り当てるのに役立ちます。これにより、リソースが待機したり、何もしなかったりすることはなく、データはノード全体に均等に分散されます。
インタラクティブ、バッチ、ストリーミングのワークロードの統合
ストリーミングデータにクエリを実行することで、ストリーミングデータを操作することもできます。 静的データセットと組み合わせることもできます。 連続演算子用に設計されていないため、新しい演算子を使用してアドホッククエリを実行することはできません。 インタラクティブ、ストリーミング、バッチクエリは、単一のエンジンを使用して組み合わせることができます。
MLを使用したSQLクエリと分析
共通のデータベースコマンドを使用してシステムを開発することで、開発者は他のシステムとのコラボレーションが容易になりました。 コミュニティはSQLクエリを広く受け入れています。 システムが、高度な分析目的で使用できる機械学習用のモジュールとライブラリを提供する場合。
Sparkストリーミングの概要
Spark Streamingは、リアルタイムデータの処理に使用されるRDDのセットを使用します。 したがって、Spark Streamingは通常、リアルタイムデータストリームの処理に一般的に使用されます。 Spark Streamingは、データのライブストリームのフォールトトレラントで高スループットの処理を提供します。 これは、コアSparkAPIに付属する追加機能です。
Sparkストリーミング機能
- ビジネス分析:Spark Streamingを使用すると、オーディエンスの行動を学ぶこともできます。 これらの学習は、後でビジネスの意思決定に使用できます。
- 統合:リアルタイムおよびバッチ処理はSparkと統合されています
- フォールトトレランス– Sparkの独自の機能は、障害から効率的に回復できることです。
- 速度:低レイテンシーはSparkによって実現されます
- スケーリング:ノードは、Sparkによって数百まで簡単にスケーリングできます。
Spark Streaming Fundamentals
1.ストリーミングコンテキスト
Sparkでは、データストリームはストリーミングコンテキストによって消費および管理されます。 入力ストリーミングを登録することで生成されるReceiverのオブジェクトを作成します。 したがって、Akka Actor、Twitter、ZeroMQなどのさまざまなソースにデフォルトのワークフローを提供する多くのコンテキストを提供するため、システムへの重要なエントリポイントとなるのはSparkの主要な機能です。

読む:ビッグデータにおけるApacheSparkの役割とそれがユニークである理由
Sparkコンテキストオブジェクトは、Sparkクラスターとの接続を表します。 Spark StreamingオブジェクトがStreamingContextオブジェクトによって作成される場合、アキュムレータ、RDD、およびブロードキャスト変数もSparkContexオブジェクトを作成できます。
2.チェックポイント、ブロードキャスト変数、およびアキュムレータ
チェックポイント
チェックポイントは、ゲームと同じようにシステムの状態を保存するチェックポイントと同様に機能します。 この場合、チェックポイントはリソースの損失を減らし、システムの故障に対するシステムの回復力を高めるのに役立ちます。 チェックポイント方法論は、システムの状態を追跡および保存するためのより良い方法であり、リカバリ時にシステムを簡単に引き戻すことができます。
ブロードキャスト変数
タスクの完全なコピーをネットワークノードに提供する代わりに、常に読み取り専用変数をキャッチします。この変数は、存在するさまざまなタスクのノードを確認し、個々のノードによる転送と計算のコストを削減します。 したがって、重要な入力セットをより効率的に提供できます。 また、高度なアルゴリズムを使用して、ブロードキャスト変数をネットワーク内のさまざまなノードに配信します。 したがって、通信コストが削減されます。
アキュムレータ
アキュムレータは、さまざまな目的に合わせてカスタマイズできる変数です。 ただし、counterやsumアキュムレータなどの定義済みのアキュムレータも存在します。 各ノードを追跡する追跡アキュムレータもあり、いくつかの追加機能を追加することもできます。 数値アキュムレータは、Sparkでもサポートされている多くのデジタル機能をサポートしています。 カスタム定義のアキュムレータは、ユーザーの要求に応じて作成することもできます。
DStream
DStreamは、離散化されたストリームを意味します。 Spark Streamingは、Discretized Stream(DStream)と呼ばれる必要な抽象化を提供します。 DStreamは、継続的にストリーミングするデータです。 データのソースから、DStreamが受信されます。 また、処理されたデータのストリームから取得することもできます。 入力ストリームの変換により、処理されたデータストリームが生成されます。
指定された間隔の後、データはRDDに含まれます。 無限の一連のRDDはDStreamを表します。
キャッシング
開発者は、DStreamを使用してストリームのデータをメモリにキャッシュできます。 これは、データがDStreamで複数回計算される場合に役立ちます。 これは、DStreamでpersist()メソッドを使用することで実現できます。
データの複製は、システムの障害に耐えることができる回復力のあるシステムの安全性を確保するために行われるため、システムの障害(Kafka、Sockets、Flumeなど)に耐えることができます。
Spark Streaming Advantage&Architecture
一度に1つのデータストリームを処理するのは、面倒な場合があります。 したがって、Spark Streamingは、データを簡単に管理できる小さなサブバッチに離散化します。 これは、SparkワーカーがSparkStreamingレシーバーによって受け入れられるデータのバッファーを並行して取得するためです。 したがって、システム全体がバッチを並行して実行し、最終結果を蓄積します。 次に、これらの短いタスクがSparkエンジンによってバッチで処理され、結果が他のシステムに提供されます。
Spark Streamingアーキテクチャでは、計算は静的に割り当てられてノードにロードされるのではなく、データの局所性とリソースの可用性に基づいて行われます。 したがって、以前の従来のシステムと比較して、ロード時間が短縮されます。 したがって、データの局所性の原則を使用すると、障害の検出とその回復も容易になります。
Sparkのデータノードは通常、復元力のある分散データセットであるRDDで表されます。
スパークストリーミングの目標
以下は、Sparkアーキテクチャによって達成された目標です。
1.動的な負荷分散
これは、データストリームがロードバランサーによって動的に割り当てられるSpark Streamingの重要な機能の1つであり、ロードバランサーは、データの割り当てと、そこで定義された特定のルールを使用したリソースの計算を担当します。 負荷分散の主な目標は、ワーカー間で効率的にワークロードのバランスを取り、利用可能なリソースの浪費がないようにすべてを並列に配置することです。 また、システム内のワーカーノードにリソースを動的に割り当てる役割も果たします。
2.障害と回復
従来のシステムと同様に、動作障害が発生した場合、失われた情報を取り戻すために、システム全体がその部分を再計算する必要があります。 ただし、問題は、1つのノードがこのすべてのリカバリを処理し、システム全体がその完了を待機するようになっている場合に発生します。 一方、Sparkでは、失われた情報は他の空きノードによって計算され、従来の方法のように余分な待機をせずにシステムを追跡に戻します。
また、失敗したタスクはシステム内のすべてのノードに均等に分散され、従来の方法よりも早く再計算して障害から回復します。
3.バッチとインタラクティブクエリ
SparkのRDDのセットは、ストリーミングワークロードとバッチ間の関係を提供するSparkのDStreamと呼ばれます。 これらのバッチはSparkのメモリに保存され、そこに存在するデータをクエリする効率的な方法を提供します。
Sparkの最も優れている点は、Sparkシステムで必要なときに使用できるさまざまなライブラリが含まれていることです。 ライブラリの名前は、機械学習用のMLlib、データクエリ用のSQL、GraphX、およびデータフレームですが、データフレームと質問はDStreamsによって同等のSQLステートメントに変換できます。
4.パフォーマンス
Sparkシステムは、スループット容量を向上させるタスクの並列分散を使用するため、最大数100ミリ秒の低遅延を実現できるSparksエンジンを活用します。
Spark Streamingはどのように機能しますか?
ストリーム内のデータは、SparkStreamingではDStreamsと呼ばれる小さなバッチに分割されます。 これは、内部のRDDのシーケンスです。 Spark APIはRDDSによってデータを処理するために使用され、結果として出荷が返されます。 Spark StreamingのAPIは、Python、Java、Scalaで利用できます。 最近導入されたSpark1.2のPythonAPIには多くの機能が欠けています。
ステートフル計算は、ストリーム内の着信データに基づいてSparkStreamingによって維持される状態と呼ばれます。 ストリームを流れるデータは、時間枠内で処理されます。 この時間枠は開発者が指定し、SparkStreamingによって許可されます。 時間枠は、作業を完了する必要がある時間枠です。 時間ウィンドウは、ウィンドウ内のスライド間隔とも呼ばれる時間間隔内で更新されます。
Sparkストリーミングソース
入力DStreamに関連付けられているレシーバーオブジェクトは、受信したデータを処理のためにSparksメモリに格納します。
組み込みのストリーミングには2つのカテゴリがあります。
1.基本的なソース
ストリーミングAPIで利用可能なソース(ソケット接続やファイルシステムなど)。
2.高度なソース
高度なレベルのソースは、Kinesis、Flume、Kafkaなどです。
ストリーミング操作
Spark RDDSでサポートされている操作には2つのタイプがあり、それらは次のとおりです。
1.ApacheSparkでの出力操作
出力操作は、DStreamのデータをファイルシステムやデータベースなどの外部システムにプッシュするために使用されます。 出力操作により、変換されたデータを外部システムで使用できます。 すべてのDStreams変換は、実際には外部システムによって実行されるトリガーによって実行されます。
現在の出力操作は次のとおりです。
foreachRDD(func)、[suffix])、saveAsHadoopFiles(prefix、[suffix])、saveAsObjectFiles(prefix、[suffix])” prefix-TIME_IN_MS [.suffix]”、saveAsTextFiles(prefix、print()
RDDは、出力操作を遅延実行します。 出力のDStream操作内では、受信したデータを処理するためにRDDアクションが強制的に実行されます。 出力操作の実行は、一度に1つずつ実行されます。 Sparkアプリケーションは、出力操作のパフォーマンスの順序を定義します。
2.スパークトランスフォーメーション
Sparkトランスフォーメーションは、RDDがSparkでサポートしているため、DStreamからのデータも変更します。 Spark RDDと同様に、DStreamでは多くの変更がサポートされています。

最も一般的な変換操作は次のとおりです。
Window()、updateStateByKey()、transform()、[numTasks])、cogroup(otherStream、[numTasks])、join(otherStream、reduceByKey(func、[numTasks])、countByValue()、reduce()、union(otherStream )、count()、repartition(numPartitions)、filter()、flatMap()、map()。
結論
今日のデータ駆動型の世界では、データを保存および分析するためのツールが、ビジネス分析と成長の重要な要素であることが証明されています。 ビッグデータとそれに関連するツールおよびテクノロジーは、需要が高まっていることが証明されています。 そのため、Apache Sparkには優れた市場があり、顧客や企業に優れた機能を提供します。
ビッグデータについて詳しく知りたい場合は、ビッグデータプログラムのソフトウェア開発スペシャライゼーションのPGディプロマをチェックしてください。このプログラムは、働く専門家向けに設計されており、7つ以上のケーススタディとプロジェクトを提供し、14のプログラミング言語とツール、実践的なハンズオンをカバーしています。ワークショップ、トップ企業との400時間以上の厳格な学習と就職支援。
世界のトップ大学からオンラインでソフトウェア開発コースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。