-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_ApacheSpark
Hadoop MapReduce(Hadoopの該当節を参照)と同様に
-
複数の計算機を用いてデータ処理を行う並列データ処理系
-
JVM上で動作するOSSの並列分散処理系フレームワーク
- 暗黙のデータ並列性と耐故障性を備えたクラスタ全体をプログラミングできる。
-
Resilient Distributed Dataset (RDD)と呼ばれる
データ構造を処理するAPIを持つ。
- データ処理してHDDに都度書き出す方式
- ディスクIOを並列化してスループット高める。
-
大規模データの分散処理をオンメモリで実現する。
-
データ処理してHDDに都度書き出す方式よりも高速。
-
Hadoop MapReduce(Hadoopの該当節を参照)が
適合しない以下のケースをサポートする。- 複雑なデータ処理を行うために,複数のジョブを連ねて実行する場合
- 同じデータを複数のジョブから利用する場合
- Hadoop Yarn(Hadoop)クラスタ上で動かすことも出来る。
-
以下の順序で、タスクにブレークダウンされる。
-
ジョブ
- 一連のデータフロー(処理の全体)
- 若しくは、SQLが生成した実行プラン
-
ステージ
一纏まりの処理。
-
-
その他、関連する用語。
-
スロット
タスクを割り当てるスロット(≒ CPUということらしい)。 -
変換
- ナロー変換
クラスタネットワーク上でのデータシャッフルやデータ移動が不要な変換 - ワイド変換
クラスタネットワーク上でのデータシャッフルやデータ移動が必要な変換
- ナロー変換
-
パイプライン処理
できる限り多くの操作をデータの 1 つのパーティションで実行すること。- データの 1 つのパーティションが RAM に読み取られると、
1 つの タスク にできる限り多くのナロー操作が結合される。 - ワイド操作では、シャッフルを強制するため、
ステージを完了して、パイプラインを終了する。
- データの 1 つのパーティションが RAM に読み取られると、
-
-
処理(ジョブ、ステージ、タスク)とデータ(RDD、パーティション)の時系列の関係
(図:Apache Sparkのデータ処理の流れをなんとなく理解する - Qiita より引用)
-
汎用的な並列データ処理系として利用できる。
-
RDDに対する数十種類のオペレータを利用可能。
- 多様な並列データ処理をシンプルに記述できる。
- オペレータを組み合わせれば、ジョブを組み合わせる必要がない。
- 複数のオペレータは1つのタスクとしてRDDのパーティションごとにコピーされる。
- パーティション並列性を活用でき、中間データI/Oを削減できる。
-
標準で用途向けのライブラリが付属している。
-
-
以下のようなビッグデータ シナリオに適合する。
苦手な処理。
- クラスタ全体のメモリに乗り切らない 巨大なデータ処理(TB級以上)
- 大きなデータセットを少しずつ更新する処理
- 秒以下の特に短いレスポンスが必要な処理
適合するビッグデータ シナリオ
- Filtering
- Sorting
- Aggregating
- Joining
- Cleaning
- Deduplicating
- Validating
アーキテクチャとコンポーネントの関係が謎い
(詳細が見えて来たら書き足す予定)。
-
プログラム
コンソール アプリのようなプログラム -
Spark セッション
プログラムを受け取り、それを小さなタスクに分割する。
小さくなったタスクはエグゼキュータで処理される。
- 各エグゼキュータまたはワーカー・ノード
- ドライバからタスクを受け取り、そのタスクを実行。
- 前述のシャッフル処理は、エグゼキュータの多対多のNW間で実現される。
- エグゼキュータは、クラスタと呼ばれるエンティティ上に存在。
| Java、Scala、Python、R、C#、SQL | 〃 | 〃 | 〃 | 〃 |
| ↓ ↓ ↓ | 〃 | 〃 | 〃 | 〃 |
| Spark Streaming | GraphX | MLlib | MLlib | Structured Streaming |
| 〃 | 〃 | 〃 | Spark SQL | 〃 |
| Spark Core | 〃 | 〃 | 〃 | 〃 |
Hadoop MapReduce(Hadoopの該当節を参照)が苦手としていた、
スループットとレイテンシの両立が必要な領域にアプローチ
-
分散共有メモリを提供する分散プログラムのワーキングセット。
-
永続化先として、主に、計算機のメモリ(キャッシュ)と二次記憶を利用できる。
-
メモリと二次記憶を組み合わせることも可能
- メモリに保持しきれないパーティションを一時的に二次記憶に退避
- 当該パーティションを利用する際に再び二次記憶から読み出す。
-
プロジェクト全体の基盤
-
RDDを抽象化した各種の実装
-
API(Java、Python、Scala、R)を介して公開
- 分散タスクディスパッチ
- スケジューリング
- および基本I/O機能
-
グラフ処理(GraphX)
-
機械学習(Spark MLlib)
-
昨今はML Pipelinesの開発が活発
scikit-learnのような
機械学習全体のパイプラインをサポートするAPIが提供される。
≒ 再実行するタスクの数を最少にする機構。
物理ロギング(分散処理の該当節を参照)に依る。
- 中間データをシャッフルする際に、
- 中間データを二次記憶に書き出す。
以下の2つの方法に依る。
Sparkアプリケーションを実行するコマンド
./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
-
参考
- Submitting Applications - Spark 3.0.1 Documentation
https://spark.apache.org/docs/latest/submitting-applications.html - アプリケーションのサブミット - Spark 2.1.0 ドキュメント 日本語訳
http://mogile.web.fc2.com/spark/spark210/submitting-applications.html
- Submitting Applications - Spark 3.0.1 Documentation
基本はScalaで実装する。
- Apache Spark: PythonとScalaのどっちを使うべきか比較する - コンサルでデータサイエンティスト
https://hktech.hatenablog.com/entry/2019/01/08/194519
- Apache Spark - Wikipedia
https://ja.wikipedia.org/wiki/Apache_Spark
分散処理の該当節を参照。
分散処理の該当節を参照。
分散処理の該当節を参照。
- Apache Sparkで始めるお手軽リアルタイムウインドウ集計
http://www.intellilink.co.jp/article/column/bigdata-kk01.html - Apache Sparkで始めるお手軽機械学習(Word2Vec編)
http://www.intellilink.co.jp/article/column/bigdata-kk04.html
https://www2.slideshare.net/nttdata-tech/presentations
-
Spark Meetup
-
Apache Spark 3.0新機能紹介 - 拡張機能やWebUI関連のアップデート(Spark Meetup Tokyo #3 Onl…
https://www2.slideshare.net/nttdata-tech/spark-meetup3-spark30-update-nttdata-sarutak -
Spark + AI Summit
- 2019 セッションハイライト (Spark Meetup Tokyo #1 - Spark+AI Sum…
https://www2.slideshare.net/nttdata-tech/spark-ai-summit-2019-report-nttdata - Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
https://www2.slideshare.net/nttdata-tech/spark-ai-summit-europe-2019-report-nttdata - 2020セッションのハイライト(Spark Meetup Tokyo #3 Online発表資料)
https://www2.slideshare.net/nttdata-tech/spark-ai-summit-2020-trend-highlight-nttdata-dobashi
- 2019 セッションハイライト (Spark Meetup Tokyo #1 - Spark+AI Sum…
-
-
Apache Spark x.x
- Apache spark 2.3 and beyond
https://www2.slideshare.net/nttdata-tech/apache-spark-23-and-beyond-ntt-data-saruta - Apache Spark 2.4 and 3.0 What's Next?
https://www2.slideshare.net/nttdata-tech/apache-spark-24-and-30-whats-next - Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase …
https://www2.slideshare.net/nttdata-tech/spark30-unifiedanalyticsplatform-projecthydrogen-sparkgraph-nttdata-saruta
- Apache spark 2.3 and beyond
-
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能…
https://www2.slideshare.net/nttdata-tech/project-hydrogen-and-spark-graph-nttdata-saruta -
Open Source Conference2020 Online…
-
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介
https://www2.slideshare.net/nttdata-tech/apache-spark-introduction-osc2020-online-kyoto-20200828 -
大量のデータ処理や分析に使えるOSS Apache Spark入門
https://www2.slideshare.net/nttdata-tech/spark-introduction-osc-fukuoka-nttdata-saruta
-
https://www.slideshare.net/hadoopxnttdata/presentations
-
Apache Spark の紹介
-
Spark1.0での動作検証
Hadoopユーザ・デベロッパから見たSparkへの期待 (Hadoop Conference Japa…
https://www.slideshare.net/hadoopxnttdata/apache-spark-nttdatahcj2014 -
NTTデータにおける Apache Spark への取り組み
https://www.slideshare.net/hadoopxnttdata/20140802-nttd-sparkosckyoto -
Spark MLlibではじめるスケーラブルな機械学習
https://www.slideshare.net/hadoopxnttdata/spark-m-llib-nttdata -
Apache Spark 1000 nodes NTT DATA
https://www.slideshare.net/hadoopxnttdata/apache-spark-1000-nodes-ntt-data -
Sparkをノートブックにまとめちゃおう。Zeppelinでね!
(Hadoopソースコードリーディング 第19回 発表資料)
https://www.slideshare.net/hadoopxnttdata/zeppelin-apache-spark-webbased-notebook -
メキメキ開発の進む
Apache Sparkのいまとこれから
(Spark Casual Talk #1 発表資料)
https://www.slideshare.net/hadoopxnttdata/nttdata-spark-casual-talk-1 -
Sparkコミュニティに飛び込もう!
(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
https://www.slideshare.net/hadoopxnttdata/apache-spark-commnity-nttdata-sarutak -
Apache Spark超入門
(Hadoop / Spark Conference Japan 2016 講演資料)
https://www.slideshare.net/hadoopxnttdata/apache-spark-for-beginners-ntt-data-saruta-spark-conference-japan-2016 -
Apache Sparkに手を出してヤケドしないための基本
~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
https://www.slideshare.net/hadoopxnttdata/apache-spark-nttdata-devsummit2016
-
Apache Spark で分散処理入門
https://qiita.com/Hiroki11x/items/4f5129094da4c91955bc -
Sparkの内部処理を理解する
https://qiita.com/uryyyyyyy/items/ba2dceb709f8701715f7 -
Spark SQLによるビッグデータ集計をチューニング
するために分散処理の基礎から駈けぬける速習ガイド
https://qiita.com/piyo7/items/b2b26ca5a91b813562d4
- Spark and YARN
https://qiita.com/imaifactory/items/f35ef03bfa4f268b1b83 - Spark on YARN のアーキテクチャ
https://qiita.com/kojish/items/c845112265cbb7a5577a - 【Sparkクラスタ構築】Yarnクラスタ稼働環境を構築します
https://qiita.com/gakuseikai/items/18f030e18ad0bc0c81d1
Hadoopはどのように動くのか
─並列・分散システム技術から読み解くHadoop処理系の設計と実装
-
Sparkの設計と実装
- 第20回[1]~登場の背景とデータ処理の特徴
https://gihyo.jp/admin/serial/01/how_hadoop_works/0020 - 第21回[2]~Sparkにおけるデータ共有の仕組みと耐障害性の実現方法
https://gihyo.jp/admin/serial/01/how_hadoop_works/0021
- 第20回[1]~登場の背景とデータ処理の特徴
移行メモ
「パーティション数はが何か?によって決まる。」は 「パーティション数は、以下のいずれであるかによって決まる。」に、 「限り多くの操作をデータの 1 つのパーティションで実行すること。」は 「できる限り多くの操作を〜」に、 「中間データを二時記憶に書き出す。」は「二次記憶」に、 「基本はScalarで実装する。」は「基本はScalaで実装する。」に、 「RDDのパーテョションごとに」は「パーティションごとに」に、 「[RDD]抽象化した各種の実装」は「RDDを抽象化した各種の実装」に正した。
「分散処理」にあった処理とデータの関係の図は、元の PukiWiki で Qiita 上の外部画像を
#refで直接参照していたため、 画像の埋め込みではなく引用元記事へのリンクとした。「コンポーネント」の表は、元の PukiWiki で横結合(
|>|)・縦結合(|~|)を 用いた積み上げ図だったため、結合部分を 〃 に置き換えた (MLlib が 2 列にあるのは RDD ベースと DataFrame ベースの 2 つを指すため原文どおり)。マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への リンクは、移行済みの
MS_DotNetForApacheSparkに張り替えた。
Tags: 移行, Apache Spark, 分散処理, RDD, Spark SQL, ビッグデータ, Hadoop
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。