「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
構造化ストリーミングとも呼ばれる。
詳細 †
特徴 †
Spark Streamingと比較した優位性。
よりリアルなストリーミング †
- トリガーで受信したデータは、継続的に流れているデータ・ストリームに追加される。
- データ・ストリームを深さが無限のテーブルとして表すため、
- 不完全な集計結果を長時間維持でき、
- 遅延したデータを再処理することが可能となり、
- その都度結果を更新できる。
RDD(DStream) vs. DataFrames?/DataSet? †
- API
- Spark Streamingは内部でRDDを使用しているDStream APIで動作、
- Spark Structured StreamingはDataFrame?やDataset APIを使用している。
- DataFrames?の方が処理が最適化されており、
様々な関数が用意されているため、集約などの処理の選択肢が多い。
イベント・タイムによる遅延データへの対応 †
受信したデータにイベントのタイムスタンプが含まれている場合、
イベントタイムを基準にしてデータを処理する機能がある。
その他 †
- 端から端まで確実に一回のセマンティクスを保証。
- Spark 2.4以降、入出力が柔軟になった。
処理 †
ステートレス・ステートフル †
- ステートレスな処理
- 属性の選択(プロジェクション)やフィルタなど
- 他のレコードと 独立に処理可能なもの
- マイクロバッチごとに、新規に到着した
レコードで構成された DataFrame?を処理する
- 新規に到着したレコードに加えて、
直前までのマイクロバッチにより更新された
ステートを加味してDataFrame?を処理する。
- 6つのフェーズ
- ① 部分集約処理
- ② 部分マージ処理 (1)
- ③ ステート・リストア
- ④ 部分マージ処理 (2)
- ⑤ ステート・セーブ
- ⑥ 最終処理
イベントタイム・ウィンドウ集約処理 †
- イベントタイム
- イベントの生起時刻など、
- データ自身の中に埋め込まれている
- レコードに意味付けされた時間。
- (自動付与することも可能)
ウォーターマーク †
イベントタイム・ウィンドウ集約処理で用いられる。
- 遅れてきたデータをハンドリングする仕組み。
- ユーザが遅れたデータの閾値を指定することができる。
入力と出力 †
- 耐障害性有り
- ファイルソース(CSV, JSON, ORC, Parquet)
- Kafka ソース
- 出力モード
出力はクエリの特定の型に適用可能なモードで定義できる
- 完全モード
・更新された結果テーブル全体が外部ストレージに書き込まれる。
・テーブル全体の書き込みをどう扱うかはストレージのコネクタによる。
- 追加モード
・追加された新しい行だけが外部ストレージに書き込まれる。
・結果テーブルの既存行が変更されないクエリ上でのみ適用可能。
- 更新モード
Spark 2.1.1から利用可能
・更新された行だけが外部ストレージに書き込まれる。
・クエリが集約を含まない場合、追加モードと同じ。
- ファイル sink
writeStream
.format("parquet") // can be "orc", "json", "csv", etc.
.option("path", "path/to/destination/dir")
.start()
- Kafka sink
writeStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("topic", "updates")
.start()
サンプル †
その他 †
join オペレーション †
主に、エンリッチメントを行う目的か。
- Stream-static Joins
Spark 2.0でサポートを。
- Stream-stream Joins
Spark 2.3でサポートを。
サポートされないオペレーション †
参考 †
Programming Guide †
Microsoft Docs †
Azure HDInsight資産が多い感。
Qiita †