December 17, 2015

Spark内部構造解説ドキュメントのリンク集

(翻訳を除き)全て英語のスライド・文書ですが、長い文が書かれているものは少ないので、理解できるかと思います。(翻訳を除き)全て英語のスライド・文書ですが、長い文が書かれているものは少ないので、理解できるかと思います。(Qiitaから引っ越してきました。)

全体像

  • A Deeper Understanding of Spark’s Internals
    • https://spark-summit.org/2014/wp-content/uploads/2014/07/A-Deeper-Understanding-of-Spark-Internals-Aaron-Davidson.pdf
    • Execution modelとShuffleに絞って解説しています(Cachingについては説明していません)
  • Spark Architecture
    • http://0x0fff.com/spark-architecture/
    • 日本語訳はこちら
      • http://qiita.com/kimutansk/items/3496e5b139959e362f02
    • Master&worker, Java heapの使われ方、RDDのpartition、について説明しています
    • 1.6からの新しいMemory管理については、こちら
      • http://0x0fff.com/spark-memory-management/
      • 日本語訳はこちら
        • http://qiita.com/giwa/items/96cc6cc9ea74aae83e2e
  • Apache Spark Architecture (Nov 7, 2015)
    • http://www.slideshare.net/AGrishchenko/apache-spark-architecture
    • 114ページと長いですが、Spark全体のコンポーネントを網羅しています。
    • Sparkでプログラムを実行したことがある人が、内部構造を理解しようとするとき、最初に眺めるのに最適なスライドだと思います。
  • Introduction to Apache Spark Internal (May 19, 2015)
    • http://www.slideshare.net/michiard/introduction-to-spark-internals
    • DAG scheduler, Task scheduler, Executor, RDD, Block Manager, Shuffleといった構成要素について説明されています
      • Shuffleは、Hash-basedとSort-basedを説明しています
    • RDDの説明が比較的詳しい
  • Mastering Apache Spark
    • https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/
    • Spark全体のコンポーネントを網羅しています。
    • Sparkのプログラムにそって、RDDなどを説明してくれている章(Section 2)もあります。
    • スライドではないので、他に比べて文章が多めです。それでも、クラス間の関係や、実際の実行時の画面キャプチャなど、図絵が多く使われており、わかりやすいと思います。
  • Spark Internals (May 29, 2014)
    • http://www.slideshare.net/taroleo/spark-internal-hadoop-source-code-reading-16-in-japan
    • RDDやTaskなど、要所のコンポーネントのソースの一部が紹介されています
    • 全体像を掴まれたあとにこれを読むと、ソースが紹介されているので、こういう実装になっているのか、と理解できるかと思います(ただし、2014年の資料なので、コードが古い部分もあります)
    • ClosureSerializerについて触れている数少ない資料の1つです
  • Spark Internals
    • https://github.com/JerryLead/SparkInternals/
    • 日本語訳はこちら
      • http://qiita.com/kimutansk/items/f47c2a28eda6817db531
      • http://qiita.com/kimutansk/items/3496e5b139959e362f02
      • http://qiita.com/kimutansk/items/be5a29c539061ad5a634
      • http://qiita.com/kimutansk/items/e36db0f22893ee4c428d
    • Overview, Job logical plan, Job physical plan, shuffle, Master&worker coordination, cache and check point, broad cast,について詳しく書かれています
    • 実装について、ソースコードやデータ構造の絵を使って説明しているので、細かい点もわかりやすいです
    • 詳細を把握したい人はおすすめです。

#RDD

  • Anatomy of RDD
    • スライド http://www.slideshare.net/datamantra/anatomy-of-rdd
    • ビデオ http://blog.madhukaraphatak.com/anatomy-of-rdd/
    • データの持ち方、計算のされかた、キャッシュの方法、など説明しています
    • ある程度、ソースコードを読んでからでないと、説明がピンとこないかもしれません。
  • caching and checkpoint
    • https://github.com/JerryLead/SparkInternals/blob/master/markdown/english/6-CacheAndCheckpoint.md
    • 全体像、の最後で紹介した資料の6章ですが、cacheについて、概念・実装をデータ構造の絵とともにわかりやすく説明しています
  • CacheされないRDDのpartitionに関する説明
    • https://www.quora.com/In-Spark-Where-is-one-RDD-which-hasnt-called-its-cache-or-persist-method-deleted
    • CacheされないRDDのpartitionは、ただのiteratorとそのSeqなので、使い終わったらどこからも参照がなくなってGCで回収される
  • Controlling Parallelism in Spark
    • http://www.bigsynapse.com/spark-input-output
    • localファイルから、データを読みだした際に生成される、パーティション数の計算方法の説明です
  • Glom in Spark
    • http://blog.madhukaraphatak.com/glom-in-spark/
    • RDDの各パーティションのデータを配列化する、RDD.glom()の説明
  • Extending Spark API
    • http://blog.madhukaraphatak.com/extending-spark-api/
    • カスタムRDDの作り方
  • Succinct Spark: Queries on Compressed RDDs
    • https://amplab.cs.berkeley.edu/succinct-spark-queries-on-compressed-rdds/ (Succinct Spark)
    • https://github.com/amplab/succinct
    • (RDDの構造の説明とは異なりますが)簡潔データ構造を用いて、圧縮した形でRDD内にデータを持ち、展開することなく演算を行うためのカスタムRDDパッケージの説明とソースコード

Shuffle

  • How Spark Beat Hadoop @ 100 TB Daytona GraySort Challenge
    • http://www.slideshare.net/cfregly/advanced-apache-spark-meetup-how-spark-beat-hadoop-100-tb-daytona-graysort-challenge
    • P.22-34に、シャッフルの概要、設定できるオプションについて触れています
  • Spark Architecture: Shuffle
    • http://0x0fff.com/spark-architecture-shuffle/
    • 日本語訳はこちら
      • http://qiita.com/giwa/items/08ac5bda1eabb8c597b3
      • http://qiita.com/kimutansk/items/3496e5b139959e362f02
    • 絵を用いて動作を説明しています
      • Hash, Sort, Tungsten-sortの3つの動作をそれぞれ説明している資料です
  • Shuffle Process
    • https://github.com/JerryLead/SparkInternals/blob/master/markdown/english/4-shuffleDetails.md
    • 全体像、の最後で紹介した資料の4章ですが、shuffleについて、概念・動作をデータ構造の絵とともにわかりやすく説明しています
      • hashのみを説明しています
  • Optimizing Shuffle Performance in Spark
    • http://www.cs.berkeley.edu/~kubitron/courses/cs262a-F13/projects/reports/project16_report.pdf
    • Sparkの(Hash) shuffleの問題点をあげ、改善方法としてcolumn方向のデータ圧縮、送信側がファイルに各内容をまとめてファイル数を減らす、を提案しています。
  • Everyday I’m Shuffling - Tips for Writing Better Spark Programs
    • http://www.slideshare.net/databricks/strata-sj-everyday-im-shuffling-tips-for-writing-better-spark-programs
    • Shuffleを使うコードを書くときに、性能を低下させないためのtipsが書かれています
  • A simplified sequence diagram of Spark Shuffle Write
    • https://www.linkedin.com/groups/7403611/7403611-6103074141341044737
    • Shuffleの動作のシーケンス図です

DataFrame

  • Anatomy of Data Frame API
    • スライド http://www.slideshare.net/datamantra/anatomy-of-data-frame-api
    • ビデオ http://blog.madhukaraphatak.com/anatomy-of-spark-dataframe-api/
    • SQLのData Frame APIに絞って、どのように最適化されるかを説明しています

Tungsten

  • Project Tungsten Nov 12 2015
    • http://www.slideshare.net/cfregly/advanced-apache-spark-meetup-project-tungsten-nov-12-2015
    • P.37から、Tungstenの3つのアイデアのうち、データ構造の最適化、コード生成、についてより具体的に説明しています
  • リンクおきば
    • http://www.slideshare.net/datamantra/anatomy-of-in-memory-processing-in-spark
    • (説明は後日)

Catalyst

  • Data Sources API Cassandra Spark Connector Spark 1.5.1 Zeppelin 0.6.0
    • http://www.slideshare.net/cfregly/advanced-apache-spark-meetup-data-sources-api-cassandra-spark-connector-spark-151-zeppelin-060
    • P.15-18に、簡単にPlan optimizerについて触れています
  • SparkSQLInternal
    • http://www.trongkhoanguyen.com/2014/11/introduction-to-sparksql.html
    • SparkSQLがどのようにRDDのオペレーションとなって最適化され実行されるか説明しています。
    • http://www.trongkhoanguyen.com/2015/08/sparksql-internals.html
    • (説明は後日)
    • https://hxquangnhat.com/2015/04/10/sparksql-internals-part-1-sqlcontext/
    • (説明は後日)
    • https://hxquangnhat.com/2015/04/14/arch-sparksql-internals-part-2-sparksql-data-flow/
    • (説明は後日)
    • http://www.slideshare.net/sachinparmarss/deep-dive-spark-data-frames-sql-and-catalyst-optimizer
    • (説明は後日)
  • リンクおきば
    • http://www.slideshare.net/maropu0804/20160322-bdi
    • おすすめ
    • http://www.slideshare.net/SparkSummit/enhancements-on-spark-sql-optimizer-by-min-qiu
    • (説明は後日)
    • http://www.slideshare.net/ueshin/introduction-to-spark-sql-catalyst
    • (説明は後日)
    • http://igm.univ-mlv.fr/~ocure/LIGM_LIKE/Teaching/m2Log/sparkSQLDF.pdf
    • (説明は後日)