Apache Spark DStream (Discretized Streams)

6月 1, 2021
admin

Stay updated with latest technology trends
Join DataFlair on Telegram!!

Object

This Spark tutorial, walk you through Apache Spark DStream. まず、Spark Streamingとは何か、そしてApache SparkのDStreamとは何かを見ていきます。 この Apache Spark ブログでは、Discretized Stream 操作、すなわちステートレスおよびステートフル変換、出力操作、入力 DStream、およびレシーバーについても説明します。

Apache Spark DStream (Discretized Streams)

Apache Spark DStream (Discretized Streams)

ApacheSparkにおけるDStream入門

このセクションでは、DStreamについて学習します。 Spark Streaming におけるその役割と責任は何でしょうか。 5021>Apache Spark APIの拡張機能として、Spark Streamingはフォールトトレラントで高スループットのシステムです。 これは、データのライブストリームを処理します。 Spark Streamingは、Flume、HDFS、Kafkaなどのさまざまな信頼できる入力ソースから入力を取得し、処理したデータをファイルシステム、データベース、またはライブダッシュボードに送信します。 入力データ ストリームは、データのバッチに分割され、次に、バッチの結果の最終ストリームを生成します。

Spark DStream (Discretized Stream) は、Spark Streaming の基本的な抽象化です。 DStreamはデータの連続的なストリームです。 Kafka、Flume、Kinesis、またはTCPソケットのようなさまざまなソースから入力を受け取ります。 また、入力ストリームを変換して生成されたデータストリームである場合もあります。 DStreamの中核は、RDD(Sparkの抽象化)の連続ストリームである。 DStream のすべての RDD には、特定の間隔からのデータが含まれます。

DStream に対する任意の操作は、基礎となるすべての RDD に適用されます。 DStream はすべての詳細をカバーします。 これは、開発者に利便性の高い高レベルの API を提供します。 入力データのコピーが利用可能である限り、RDD の系統を使用して、そこから任意の状態を再計算することができます。 デフォルトでは、Sparkはデータを2つのノードにレプリケートする。 その結果、Spark Streaming はシングルワーカーの障害に耐えることができます。

Apache Spark DStream Operations

RDD と同様に、Spark DStream も 2 種類のオペレーションをサポートします。 Transformations と output Operations です。 Transformation

DStreamには2種類のトランスフォームがあります:

  • ステートレス トランスフォーム
  • ステートフル トランスフォーム

a. ステートレス変換

各バッチの処理は、前のバッチのデータに依存しない。 ステートレス変換は単純なRDD変換です。 これは、DStream内のすべてのRDDを意味するすべてのバッチに適用されます。 map()、filter()、reduceByKey() などの一般的な RDD 変換が含まれます。
これらの関数はストリーム全体に適用されるように見えますが、各 DStream は多数の RDD (バッチ) の集合体です。 その結果、各ステートレス変換は各 RDD に適用されます。

ステートレス変換は、各時間ステップ内で多くの DStream からデータを結合することが可能です。 たとえば、キー/値 DStream には、RDD と同じ結合関連の変換 (cogroup()、join()、leftOuterJoin() など) があります。

DStream でこれらの操作を使用して、各バッチで RDD 操作を実行することができます。 transform()により、任意の RDD-to-RDD 関数を DStream 上で動作させることができます。 この関数は、ストリーム内のデータの各バッチで呼び出され、新しいストリームを生成します。 ステートフル変換

以前のバッチからデータまたは中間結果を使用し、現在のバッチの結果を計算します。 ステートフル変換は、時間を超えてデータを追跡するDStreamsに対する操作です。 したがって、新しいバッチの結果を生成するために以前のバッチからいくつかのデータを使用します。

主な 2 つのタイプは、時間期間のスライド ウィンドウにわたって動作するウィンドウ操作と、各キーについてイベント間で状態を追跡するために使用する updateStateByKey() (たとえば、各ユーザー セッションを表すオブジェクトを構築するため)です。 出力操作

変換後のデータを取得したら、そのデータに対してSpark Streamingで出力操作を実行します。 プログラムのデバッグ後、出力操作を使用して、我々は唯一の私達の出力を保存することができます。 出力操作には、print()、save()などがあります。 saveオペレーションは、ファイルを保存するディレクトリと、オプションのサフィックスを受け取ります。 print()はDStreamの各バッチから最初の10個の要素を取り込み、結果を表示します。

入力DStreamとレシーバ

入力DStreamは、ストリーミングソースからの入力データのストリームを表すDStreamです。 Receiver (Scala doc, Java doc) オブジェクトは、すべての入力DStreamオブジェクトに関連付けられます。

Spark Streaming は、組み込みのストリーミング ソースの 2 つのカテゴリを提供します:

  • Basic ソース – これらは、StreamingContext API で直接利用可能なソースです。 例:ファイルシステム、ソケット接続。
  • Advanced Sources – これらのソースは、Kafka、Flume、Kinesis などの追加ユーティリティクラスによって利用できます。

例:

  • Kafka: Kafka に必要なアーティファクトは spark-streaming-kafka-0-8_2.11 です。
  • Flume: Flume に必要なアーティファクトは、dspark-streaming-flume_2.11 です。
  • Kinesis: Kinesis に必要なアーティファクトは、spark-streaming-kinesis-asl_2.11 です。

複数の入力DStreamを作成し、複数のデータストリームを並行して受信します。 多くのデータストリームを受信する複数のレシーバを作成します。 Spark Worker/Executorは長時間実行されるタスクです。 そのため、Spark Streamingアプリケーションに関連するコアの1つを占有しています。 そのため、Spark Streamingアプリケーションは、受信したデータを処理するのに十分なコアを持つ必要があります。

Conclusion

結論として、SparkのRDDと同様に、Spark StreamingではDStreamという高レベルの抽象化が提供されます。 DStream はデータの連続的な流れを表します。 内部的には、DStreamはRDDのシーケンスとして描画されます。 したがって、RDDのように、KafkaやFlumeなどの入力DStreamからDStreamを取得することができる。 また、既存のDStreamに変換を適用して、新しいDStreamを得ることもできる

コメントを残す

メールアドレスが公開されることはありません。