Skip to content

ysano/spark-kafka-stream

Repository files navigation

spark-kafka-stream

1 About

1.1 概要

  • センサーデータ
    • 緯度経度(lon,lat),温度、湿度、酸性度、水分
  • ストリーム処理
    • 異常値検出
    • データ蓄積
  • Jupyter Lab でデータ分析
    • spark に接続
  • 特徴
    • 遠隔地のセンサ処理を仮定
    • 分散処理に適した構成

1.2 技術要素

2 構成図

!include <logos/jupyter.puml>
!include <logos/kafka.puml>
!include <logos/spark.puml>
!include <logos/cassandra.puml>

title 構成図

skinparam monochrome true

queue "<$kafka>\n sendor-data" as kafka1
queue "<$kafka>\n joined-sendor-data" as kafka2
queue "<$kafka>\n whc-less-sendor-data" as kafka3

node "Master" {
database "<$cassandra>" as cassandra1
rectangle "☆\n Spark" as spark1
}
node "Worker1" {
database "<$cassandra>" as cassandra2
rectangle "☆\n Spark" as spark2
}
node "Worker2" {
database "<$cassandra>" as cassandra3
rectangle "☆\n Spark" as spark3
}

rectangle "<$jupyter>\n 分析" as jupyter

fluentd -> kafka1 : 温度・湿度
kafka1 -> spark1
spark1 --> kafka2 : "Sensor 位置情報 Join"
kafka2 --> kafka3 : "Window 処理"
kafka3 -> alert : "Windows\n 平均水量不足"
spark1 <-> cassandra1
spark2 <-> cassandra2
spark3 <-> cassandra3

cassandra1 <-> cassandra2
cassandra2 <--> cassandra3
cassandra3 <--> cassandra1
spark1 <-> spark2
spark2 <--> spark3
spark3 <--> spark1

spark1 <-- jupyter

./fig0.png

3 手順

3.1 疑似センサーデータ生成スクリプトを常時走らせる

  • * * * * /path/to/sensor_data/execute_create_sensor_data.sh >> /path/to/sensor_data/sensor_data.log
  • wsl2 の場合は cron は働かないので、起動すること

3.2 サーバ群起動

docker-compose up -d

4 Jupyter Lab + Spark

  • アドホックデータ分析でインサイトを得る
  • sparkContext

5 機械学習処理(TODO)

  • spark.ml 利用したバッチ分析
  • 前処理
    • 特徴量の数を決める(PCA)
  • 学習
    • 特徴量抽出~モデル~パラメタ推定~特徴量選択~モデル評価と選択
    • 特徴量の組み合わせでモデル作成し精度をみる
    • AUC/RMSE
  • 予測

6 改善の余地

6.1 kubernetes に展開

6.2 Arduino などで実センサ接続

6.3 Cassandra Only DC をつくり、分析環境からオペレーショナル環境を分離する

About

sensor/fluentd/kafka/spark/cassandra/notebook

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published