「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>分散処理]] --[[Apache Hadoop>Hadoop]] --Apache Spark *目次 [#q90cce84] #contents *概要 [#o3bc91f1] [[Hadoop MapReduce>Hadoop#y0681858]]と同様に -複数の計算機を用いてデータ処理を行う並列データ処理系 -JVM上で動作するOSSの並列分散処理系フレームワーク --暗黙のデータ並列性と耐故障性を備えたクラスタ全体をプログラミングできる。 --[[Resilient Distributed Dataset (RDD)>#f411c5af]]と呼ばれるデータ構造を処理するAPIを持つ。 **背景 [#ydbb2cbe] ***[[Apache Hadoop>Hadoop]] [#g84df289] -データ処理してHDDに都度書き出す方式 -ディスクIOを並列化してスループット高める。 ***[[Apache Spark]] [#k6eb3622] -大規模データの分散処理をオンメモリで実現する。 -データ処理してHDDに都度書き出す方式よりも高速。 -[[Hadoop MapReduce>Hadoop#y0681858]]が適合しない以下のケースをサポートする。 --複雑なデータ処理を行うために,複数のジョブを連ねて実行する場合 --同じデータを複数のジョブから利用する場合 --[[Hadoop Yarn>Hadoop]]クラスタ上で動かすことも出来る。 **特徴 [#ee411713] ***分散処理 [#zf7deb5b] -以下の順序で、タスクにブレークダウンされる。 --ジョブ ---一連のデータフロー(処理の全体) ---若しくは、[[SQL>#d1b1aeb0]]が生成した実行プラン --ステージ~ 一纏まりの処理。 ---パーティション~ ・各ステージが処理する分割されたデータ~ ・パーティション数はが何か?によって決まる。~ ・データソース(例えば、[[HDFS>Hadoop#l2a0cd99]]なら128MB)~ ・中間データ(APIのパラメタや設定で決まる)~ ・[[Spark SQL>#meeb789d]](既定値200パーティションから自動シュリンク) ---シャッフル~ ・ネットワーク越しのデータ転送を伴うデータの再分散。~ ・当該ステージのパーティションの出力を、~ 次のステージのパーティションの入力にマップする。 ---タスク~ パーティションのデータをステージで処理する。 -その他、関連する用語。 --スロット~ タスクを割り当てるスロット(≒ CPUということらしい)。 --変換 ---ナロー変換~ クラスタネットワーク上でのデータシャッフルやデータ移動が不要な変換 ---ワイド変換~ クラスタネットワーク上でのデータシャッフルやデータ移動が必要な変換 --パイプライン処理~ 限り多くの操作をデータの 1 つのパーティションで実行すること。 ---データの 1 つのパーティションが RAM に読み取られると、~ 1 つの タスク にできる限り多くのナロー操作が結合される。 ---ワイド操作では、シャッフルを強制するため、~ ステージを完了して、パイプラインを終了する。 -処理(ジョブ、ステージ、タスク)とデータ(RDD、パーティション)の時系列の関係 #ref(https://camo.qiitausercontent.com/ee2722ac7db681d06c5f2651e664a9b221c82e75/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238353835312f35326437616330662d643732662d346633322d336463302d3261633733373162666163662e706e67,left,nowrap,画像) --引用:Apache Sparkのデータ処理の流れをなんとなく理解する - Qiita~ https://qiita.com/sigmalist/items/ea4127332abc12a99a45 ***SQLライク [#d1b1aeb0] [[Spark SQL>#meeb789d]]による、SQLライクな[[分散処理>#zf7deb5b]]の隠蔽 **トレードオフ [#p0ff7519] ***利点 [#c24441b8] -汎用的な並列データ処理系として利用できる。 --[[RDD>#f411c5af]]に対する数十種類のオペレータを利用可能。 ---多様な並列データ処理をシンプルに記述できる。 ---オペレータを組み合わせれば、ジョブを組み合わせる必要がない。 ---複数のオペレータは1つのタスクとしてRDDのパーテョションごとにコピーされる。 ---パーティション並列性を活用でき、中間データI/Oを削減できる。 --標準で[[用途向けのライブラリ>#v5d93805]]が付属している。 -以下のような[[ビッグデータ シナリオ>#ddafcf61]]に適合する。 ***欠点 [#c85b822d] 苦手な処理。 -クラスタ全体のメモリに乗り切らない 巨大なデータ処理(TB級以上) -大きなデータセットを少しずつ更新する処理 -秒以下の特に短いレスポンスが必要な処理 **シナリオ [#ddafcf61] 適合するビッグデータ シナリオ ***抽出、変換、読み込み (ETL) [#y15f85b9] -Filtering -Sorting -Aggregating -Joining -Cleaning -Deduplicating -Validating ***バッチ処理 [#h96b87c7] ***[[Spark Streaming>#d6241ffe]] [#v7fcd1da] ***[[Spark SQL>#meeb789d]] [#r0b2cc8c] ***[[用途向けのライブラリ>#v5d93805]] [#z20273d2] *詳細 [#ada537e3] [[アーキテクチャ>#w48bc9c9]]と[[コンポーネント>#dff3f3fa]]の関係が謎い(詳細が見えて来たら書き足す予定)。 **アーキテクチャ [#w48bc9c9] ***ドライバ [#v784d760] -プログラム~ コンソール アプリのようなプログラム -Spark セッション~ プログラムを受け取り、それを小さなタスクに分割する。~ 小さくなったタスクは[[エグゼキュータ>#g0e4218a]]で処理される。 ***エグゼキュータ [#g0e4218a] -各エグゼキュータまたはワーカー・ノード -[[ドライバ>#v784d760]]から[[タスクを受け取り、そのタスクを実行>#zf7deb5b]]。 -前述の[[シャッフル>#zf7deb5b]]処理は、エグゼキュータの多対多のNW間で実現される。 -エグゼキュータは、[[クラスタ>#wa43ce12]]と呼ばれるエンティティ上に存在。 ***クラスタ [#wa43ce12] -クラスタ~ [[エグゼキュータ>#g0e4218a]]のホスティング -クラスター マネージャ~ 次の目的で[[ドライバ>#v784d760]]と[[エグゼキュータ>#g0e4218a]]の両方と通信する。 --リソースの割り当てを管理する --プログラム分割を管理する --プログラム実行を管理する **コンポーネント [#dff3f3fa] |>|>|>|>|CENTER:Java、Scala、Python、R、[[C#>#p4fdae20]]、SQL| |>|>|>|>|CENTER:↓ ↓ ↓| |[[Spark Streaming>#d6241ffe]]|[[GraphX>#v5d93805]]|[[MLlib>#v5d93805]]|[[MLlib>#v5d93805]]|[[Structured Streaming>#d6241ffe]]| |~|~|~|>|[[Spark SQL>#meeb789d]]| |>|>|>|>|[[Spark Core>#t805c63c]]| ***Resilient Distributed Dataset (RDD) [#f411c5af] [[Hadoop MapReduce>Hadoop#y0681858]]が苦手としていた、~ スループットとレイテンシの両立が必要な領域にアプローチ -分散共有メモリを提供する分散プログラムのワーキングセット。 -永続化先として、主に、計算機のメモリ(キャッシュ)と二次記憶を利用できる。 -メモリと二次記憶を組み合わせることも可能 --メモリに保持しきれないパーティションを一時的に二次記憶に退避 --当該パーティションを利用する際に再び二次記憶から読み出す。 ***Spark Core [#t805c63c] -プロジェクト全体の基盤 -[[RDD>#f411c5af]]抽象化した各種の実装 -API(Java、Python、Scala、R)を介して公開 --分散タスクディスパッチ --スケジューリング --および基本I/O機能 ***[[Spark SQL]] [#meeb789d] -DataFrameというオンメモリのテーブルに対し、~ LINQ的に処理を行うことが出来る。 -裏側では、~ クエリ・エンジン経由で実行プラン生成し --[[RDD>#f411c5af]]を処理 --[[分散処理>#zf7deb5b]]を隠蔽 ***[[Spark Streaming]] [#d6241ffe] ***その他、用途向けのライブラリ [#v5d93805] -グラフ処理(GraphX) -機械学習([[MLlib>Spark MLlib]]) -昨今はML Pipelinesの開発が活発~ Scikit-Learnのような機械学習全体のパイプラインをサポートするAPIが提供される。 [[scikit-learn]]のような機械学習全体のパイプラインをサポートするAPIが提供される。 **耐障害性 [#i49b06cd] ≒ 再実行するタスクの数を最少にする機構。 ***ジョブ [#af6586eb] [[物理ロギング>分散処理#ie9bbdb3]]に依る。 -中間データを[[シャッフル>#zf7deb5b]]する際に、 -中間データを二時記憶に書き出す。 ***[[RDD>#f411c5af]] [#ue1a42ac] 以下の2つの方法に依る。 -再計算と呼ばれる[[論理ロギング>分散処理#ie9bbdb3]]の一種 -RDDの永続化と同時に[[レプリケーション>分散処理#ie9bbdb3]] **CLI [#i0563e4f] ***spark-submit [#qbafa5e9] 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 ***, etc. [#u207c166] **言語バインディング [#a2ce8cf5] 基本はScalarで実装する。 -Apache Spark: PythonとScalaのどっちを使うべきか比較する - コンサルでデータサイエンティスト~ https://hktech.hatenablog.com/entry/2019/01/08/194519 ***[[PySpark]] [#nf8b7c8c] ***[[.NET for Apache Spark>https://techinfoofmicrosofttech.osscons.jp/index.php?.NET%20for%20Apache%20Spark]] [#p4fdae20] **[[チュートリアル>Apache Sparkチュートリアル]] [#p6e2fc56] *参考 [#vf82bc03] -Apache Spark - Wikipedia~ https://ja.wikipedia.org/wiki/Apache_Spark **[[分散処理 > 目的別>分散処理#w454319b]] [#u79fd41a] ***[[分散(バッチ)系>分散処理#jb20d368]] [#y8c91f0b] ***[[ストリーム系>分散処理#ta706e0b]] [#z30417d3] **NTTデータ [#jae5ffc5] ***先端技術株式会社 [#bfb56996] -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 ***技術開発本部 [#h2d2611d] 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 -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 -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 ---動画 : https://www.youtube.com/watch?v=294IPdNHbhA --大量のデータ処理や分析に使えるOSS Apache Spark入門~ https://www2.slideshare.net/nttdata-tech/spark-introduction-osc-fukuoka-nttdata-saruta ---動画 : https://www.youtube.com/watch?v=Kv4x97qFuDw ***システム技術本部 [#z00773f3] https://www.slideshare.net/hadoopxnttdata/presentations -Apache Spark の紹介 --(前半:Sparkのキホン)~ https://www.slideshare.net/hadoopxnttdata/apache-spark-spark --(後半:技術トピック)~ https://www.slideshare.net/hadoopxnttdata/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 **Qiita [#uf346561] -Apache Spark で分散処理入門~ https://qiita.com/Hiroki11x/items/4f5129094da4c91955bc -Sparkの内部処理を理解する~ https://qiita.com/uryyyyyyy/items/ba2dceb709f8701715f7 -Spark SQLによるビッグデータ集計をチューニング~ するために分散処理の基礎から駈けぬける速習ガイド~ https://qiita.com/piyo7/items/b2b26ca5a91b813562d4 ***YARN [#be160f72] -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 **gihyo.jp … 技術評論社 [#r1d8a217] 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