.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

Hadoop MapReduceと同様に

  • 複数の計算機を用いてデータ処理を行う並列データ処理系
  • JVM上で動作するOSSの並列分散処理系フレームワーク
    • 暗黙のデータ並列性と耐故障性を備えたクラスタ全体をプログラミングできる。
    • Resilient Distributed Dataset (RDD)と呼ばれるデータ構造を処理するAPIを持つ。

背景

Apache Hadoop

  • データ処理してHDDに都度書き出す方式
  • ディスクIOを並列化してスループット高める。

Apache Spark

  • 大規模データの分散処理をオンメモリで実現する。
  • データ処理してHDDに都度書き出す方式よりも高速。
  • Hadoop MapReduceが適合しない以下のケースをサポートする。
    • 複雑なデータ処理を行うために,複数のジョブを連ねて実行する場合
    • 同じデータを複数のジョブから利用する場合
    • Hadoop Yarnクラスタ上で動かすことも出来る。

特徴

分散処理

以下の順序で、タスクにブレークダウンされる。

  • ジョブ
    • 一連のデータフロー(処理の全体)
    • 若しくは、SQLが生成した実行プラン
  • ステージ
    一纏まりの処理。
  • パーティション
    • 各ステージが処理する分割されたデータ
    • パーティション数はが何か?によって決まる。
      ・データソース(例えば、HDFSなら128MB)
      ・中間データ(APIのパラメタや設定で決まる)
      Spark SQL(既定値200パーティションから自動シュリンク)
  • タスク
    ステージの処理をパーティションを処理する。
  • シャッフル
    • ネットワーク越しのデータ転送を伴うデータの再分散。
    • 当該ステージのパーティションの出力を、
      次のステージのパーティションの入力にマップする。

SQLライク

Spark SQLによる、SQLライクな分散処理の隠蔽

トレードオフ

利点

  • 汎用的な並列データ処理系として利用できる。
  • RDDに対する数十種類のオペレータを利用可能。
    • 多様な並列データ処理をシンプルに記述できる。
    • オペレータを組み合わせれば、ジョブを組み合わせる必要がない。
    • 複数のオペレータは1つのタスクとしてRDDのパーテョションごとにコピーされる。
    • パーティション並列性を活用でき、中間データI/Oを削減できる。

欠点

苦手な処理。

  • クラスタ全体のメモリに乗り切らない 巨大なデータ処理(TB級以上)
  • 大きなデータセットを少しずつ更新する処理
  • 秒以下の特に短いレスポンスが必要な処理

シナリオ

適合するビッグデータ シナリオ

抽出、変換、読み込み (ETL)

  • Filtering
  • Sorting
  • Aggregating
  • Joining
  • Cleaning
  • Deduplicating
  • Validating

バッチ処理

Spark Streaming

Spark SQL

用途向けのライブラリ

詳細

アーキテクチャコンポーネントの関係が謎い(詳細が見えて来たら書き足す予定)。

アーキテクチャ

ドライバ

  • プログラム
    コンソール アプリのようなプログラム
  • Spark セッション
    プログラムを受け取り、それを小さなタスクに分割する。
    小さくなったタスクはエグゼキュータで処理される。

エグゼキュータ

クラスタ

  • クラスター マネージャ
    次の目的でドライバエグゼキュータの両方と通信する。
    • リソースの割り当てを管理する
    • プログラム分割を管理する
    • プログラム実行を管理する

コンポーネント

Resilient Distributed Dataset (RDD)

Hadoop MapReduceが苦手としていた、
スループットとレイテンシの両立が必要な領域にアプローチ

  • 分散共有メモリを提供する分散プログラムのワーキングセット。
  • 永続化先として、主に、計算機のメモリ(キャッシュ)と二次記憶を利用できる。
  • メモリと二次記憶を組み合わせることも可能
    • メモリに保持しきれないパーティションを一時的に二次記憶に退避
    • 当該パーティションを利用する際に再び二次記憶から読み出す。

Spark Core

  • プロジェクト全体の基盤
  • RDD抽象化した各種の実装
  • API(Java、Python、Scala、R)を介して公開
    • 分散タスクディスパッチ
    • スケジューリング
    • および基本I/O機能

Spark SQL

  • DataFrame?というオンメモリのテーブルに対し、LINQ的に処理を行うことが出来る。
  • 裏側では、
    クエリ・エンジン経由で実行プラン生成し

Spark Streaming

その他、用途向けのライブラリ

  • グラフ処理(GraphX)
  • 昨今はML Pipelinesの開発が活発
    Scikit-Learnのような機械学習全体のパイプラインをサポートするAPIが提供される。

耐障害性

≒ 再実行するタスクの数を最少にする機構。

ジョブ

物理ロギングに依る。

  • 中間データをシャッフルする際に、
  • 中間データを二時記憶に書き出す。

RDD

以下の2つの方法に依る。

CLI

spark-submit

./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

, etc.

参考

分散処理 > 目的別

分散(バッチ)系

ストリーム系

NTTデータ

先端技術株式会社

技術開発本部

https://www2.slideshare.net/nttdata-tech/presentations

システム技術本部

https://www.slideshare.net/hadoopxnttdata/presentations

Qiita

YARN

gihyo.jp … 技術評論社

Hadoopはどのように動くのか
─並列・分散システム技術から読み解くHadoop処理系の設計と実装

.NET for Apache Spark


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-12-14 (月) 15:32:37 (43d)