SlideShare a Scribd company logo
1 of 44
Download to read offline
Survey of Apache Spark
Tokyo Institute of Technology 

School of Computing
Department of Computer Science B4
Hiroki Naganuma
01Spark Overview
Sparkの概要
Architecture in Mesos
Mesosでのアーキテクチャ 03
01 Index
02Flow of Spark processing
Sparkの処理の流れについて
Apache Sparkは高速で汎用的なクラスタコンピュータシステム
Sparkは巨大なデータに対して高速に分散処理を行うオープンソースのフレームワーク
(Java MagazineにはSparkは高速でスケーラブルな汎用分散処理エンジンと書いてました) e.t.c



特徴は高速性とプログラミングの容易さ
01Spark Overview
Sparkの概要
Overview of Apache Spark
01Spark Overview
Sparkの概要
Hadoopとの違いは?
01Spark Overview
Sparkの概要
分散処理のフレームワークとしては同じ目的を持ってる
MapReduceとは?
01Spark Overview
Sparkの概要
このフレームワークは関数型言語でよく使われるMap関数とReduce関数からヒントを得て作られているが、フレームワーク
におけるそれらの用いられ方は元々のものと同じではない。
MapReduce は、巨大なデータセットを持つ高度に並列可能な問題に対して、多数のコンピューター(ノード)の集合であ
るコンピュータ・クラスター(各ノードが同じハードウェア構成を持つ場合)もしくはグリッド(各ノードが違うハードウェ
ア構成を持つ場合)を用いて並列処理させるためのフレームワークである。
処理は、ファイルシステム(非構造的)バイト級のデータの並べ替えをわずか数時間で行うことも可能。

もしくはデータベース(構造的)に格納されたデータに対して行うことができる。
MapReduceは、コンピューター機器のクラスター上での巨大なデータセットに対す
る分散コンピューティングを支援する目的で、Googleによって2004年に導入された
プログラミングモデル。
MapReduceとは?
01Spark Overview
Sparkの概要
Reduce ステップ - 続いて、マスターノードが、Mapステッ
プでの処理結果を集約し、目的としていた問題に対する答
え(結果)を何らかの方法によって出力する。
Map ステップ - マスターノードは、入力データを受け取
り、それをより細かい単位に分割し、複数のワーカーノー
ドに配置する。受け取ったワーカーノードが、更に細かい
単位に分割し、他の複数のワーカーノードに配置するとい
う、より深い階層構造の分割を行うこともある。そして、
各ワーカーノードは、その細かい単位のデータを処理し、
処理結果を、マスターノードへと返す。
MapReduceとは?
01Spark Overview
Sparkの概要
それぞれのMap処理は、他のMap処理と完全独立であり、理論的に全て並列実行することができる(実際には、
データソースやCPUの数により制限がかかる)。
続くReduceステップでは、Mapステップでの処理結果がキー毎にまとめられてReduce処理に送られることに
なるが、これも同様に並列処理が可能である。
MapReduce による一連の処理は、逐次実行アルゴリズムと比較して非効率にみえるが、MapReduce は一般の
汎用サーバが取り扱うことが可能なデータ量をはるかに超える大きなデータセットに対しても適用することが
できる。
MapReduce の特徴は、MapとReduceの各ステップで並列処理が可能なことである。
01Spark Overview
Sparkの概要
【ポイント】
1. Scala、Java、R、Pythonなどに対応
(APIが用意されてる)
2. 多彩なライブラリ
3. 複数の導入シナリオ
(スタンドアロン、YARN、Mesos、
組み込み、クラウド)
5. 幅広い処理モデル(バッチ、
インタラクティブ、ストリーミング)
01Spark Overview
Sparkの概要
【ポイント】
1. Scala、Java、R、Pythonなどに対応
(APIが用意されてる)
2. 多彩なライブラリ
3. 複数の導入シナリオ
(スタンドアロン、YARN、Mesos、
組み込み、クラウド)
5. 幅広い処理モデル(バッチ、
インタラクティブ、ストリーミング)
6. RDD
RDD(Resilient Distributed Datasets)の仕組み
01Spark Overview
Sparkの概要
繰り返し利用するデータについてはメモリ上に保持することが可能な機構で
HadoopのMapReduceが保持していた(耐障害性、データ局所性、スケーラビリティ)はそのまま引き継いでいる
【RDDの性質】
1. イミュータブルで分割されたオブジェクトのコレクション(フォー
ルトトレラント性を実現するためRDDでは「得体データが失わ
れていたら前のデータから再生成する」というアプローチを取っ
ているため、それぞれイミュータブルである必要がある)
2. 読み取り専用(書き込みは新しいRDDを生成)
3. 並列処理(map,filter,groupBy,join)をストレージ上のデータに適
応した結果を生成
5. 再利用するためにメモリ上にキャッシュされる
6. 遅延評価される(アクション系のメソッド(*2)が呼ばれるまで」
実際の処理は行われない)
Hadoopとの違いは?
01Spark Overview
Sparkの概要
処理対象データ map処理
map処理
map処理
reduce処理
reduce処理
reduce処理
HDFS
処理対象データ
HDFS
map処理とreduce処理で完結するジョブを形成
データの加工・フィルタリング データの集計・結合
処理対象データ
HDFS
map処理 reduce処理 map処理 reduce処理 map処理 reduce処理
【ポイント】
個々のメモリを活用できる
設計でなかった(タスクごと
にデータをディスク読み込
み&書き込みしなきゃいけ
ないのがボトルネック)
同じ処理を複数行う際に、
その都度データアクセスが
発生
同じデータでもなんども使
うものは使う際に無駄にア
クセスがいっぱい発生
Hadoopとの違いは?
01Spark Overview
Sparkの概要
【ポイント】
RDDと呼ばれる部分故障へ
の耐性を考慮した分散コレ
クションに対して典型的な
データ処理を繰り返すこと
で目的の結果を得ることが
できます
複雑な処理を少ないジョブ
数で実現し、RDDごとに中
間データをその都度出力し
ないのでHDFSなどの外部
ストレージへのI/Oが抑え
られます
処理対象データ
HDFS
HDFS
RDD RDD RDD RDD
処理対象データ
HDFS
入力
フォーマット変換
グルーピング
フィルター
集計
処理モデル
RDD RDD RDD RDD
I/O
I/O
RDD RDD
RDDの加工
I/O
Hadoopとの違いは?
01Spark Overview
Sparkの概要
CPUの利用効率を向上させてる
HadoopではCPUを使いきれてなかった
(HDFS+MapReduce)
I/Oに時間かかりすぎ
抽象度の高いAPI
これが用意されているので開発が容易
インタラクティブな利用など
インタラクティブ・リアルタイムなど利用パター
ンがいろいろある。
リアルタイムは特に導入事例に多くインタラクティ
ブはデバッグなどに便利。
Hadoopとの違いは?
01Spark Overview
Sparkの概要
【ポイント】
RDDと呼ばれる部分故障へ
の耐性を考慮した分散コレ
クションに対して典型的な
データ処理を繰り返すこと
で目的の結果を得ることが
できます
複雑な処理を少ないジョブ
数で実現し、RDDごとに中
間データをその都度出力し
ないのでHDFSなどの外部
ストレージへのI/Oが抑え
られます
処理対象データ
HDFS
HDFS
RDD RDD RDD RDD
処理対象データ
HDFS
入力
フォーマット変換
グルーピング
フィルター
集計
処理モデル
RDD RDD RDD RDD
I/O
I/O
RDD RDD
RDDの加工
I/O
RDD(Resilient Distributed Datasets)の仕組み
01Spark Overview
Sparkの概要
繰り返し利用するデータについてはメモリ上に保持することが可能な機構で
HadoopのMapReduceが保持していた(耐障害性、データ局所性、スケーラビリティ)はそのまま引き継いでいる
【RDDの性質】
1. イミュータブルで分割されたオブジェクトのコレクション(フォー
ルトトレラント性を実現するためRDDでは「得体データが失わ
れていたら前のデータから再生成する」というアプローチを取っ
ているため、それぞれイミュータブルである必要がある)
2. 読み取り専用(書き込みは新しいRDDを生成)
3. 並列処理(map,filter,groupBy,join)をストレージ上のデータに適
応した結果を生成
5. 再利用するためにメモリ上にキャッシュされる
6. 遅延評価される(アクション系のメソッド(*2)が呼ばれるまで」
実際の処理は行われない)
RDDの変換例①filter()
01Spark Overview
Sparkの概要
図形を要素にもつRDD 三角形のみフィルターで取り除いたRDD
RDD
Partition
Element
例えばこのようなプログラムの場合filterの操作は右図のようになります。
import org.apache.spark.api.java.JavaRDD;

import org.apache.spark.api.java.JavaSparkContext;



/**

* Created by hirokinaganuma on 2016/10/11.

*/

public class Sample02 {

public static void main(String[] args) throws Exception {

String master;

if (args.length > 0) {

master = args[0];

} else {

master = "local";

}

JavaSparkContext sc = new JavaSparkContext(master, "basicavg",
System.getenv("SPARK_HOME"), System.getenv("JARS"));

JavaRDD<String> input = sc.textFile("bin/input/filter/*.txt");

JavaRDD<String> result = input.filter(s-> !s.contains("Triangle"));

result.saveAsTextFile("bin/output/output02");

sc.stop();

}

}
Sample02.java
RDDの変換例①filter()
01Spark Overview
Sparkの概要
図形を要素にもつRDD 三角形のみフィルターで取り除いたRDDRDD
Partition
Element
ファイルシステム
ディレクトリ
ファイルシステム
ディレクトリ
同じディレクトリに、パー
ティションごとに別々の
ファイルとして独立に書
き出します
RDDの変換例①filter()
01Spark Overview
Sparkの概要
RDDの変換例②flatmap()
01Spark Overview
Sparkの概要
英文を要素にもつRDD
RDD
Partition
Element
I am from Fukuoka
Hello Apache Spark
Tokyo Institute of Technology
I
am
from
Fukuoka
Hello
Apache
Spark
Tokyo
Institute
Technology
of
単語に分割したRDD例えばこのようなプログラムの場合flatmapの操作
は右図のようになります。
import org.apache.spark.api.java.JavaRDD;

import org.apache.spark.api.java.JavaSparkContext;

import org.apache.spark.api.java.function.FlatMapFunction;



import java.util.Arrays;



/**

* Created by hirokinaganuma on 2016/10/11.

*/

public class Sample03 {

public static void main(String[] args) throws Exception {

String master;

if (args.length > 0) {

master = args[0];

} else {

master = "local";

}

JavaSparkContext sc = new JavaSparkContext(master, "basicavg",
System.getenv("SPARK_HOME"), System.getenv("JARS"));

JavaRDD<String> input = sc.textFile("bin/input/flatmap/*.txt");

JavaRDD<String> result = input.flatMap(

new FlatMapFunction<String, String>() {

public Iterable<String> call(String x) {

return Arrays.asList(x.split(" "));

}

}

);

result.saveAsTextFile("bin/output/output03");

sc.stop();

}

}
Sample03.java
01Spark Overview
Sparkの概要
ファイルシステム
同じディレクトリに、パー
ティションごとに別々の
ファイルとして独立に書
き出します
英文を要素にもつRDD
RDD
Partition
Element
I am from Fukuoka
Hello Apache Spark
Tokyo Institute of Technology
I
am
from
Fukuoka
Hello
Apache
Spark
Tokyo
Institute
Technology
of
単語に分割したRDD
ディレクトリ
I am from Fukuoka
Hello Apache Spark
Tokyo Institute of
Technology
ファイルシステム
I
am
from
Fukuoka
Hello
Apache
Spark
Tokyo
Institute
Technology
of
RDDの変換例②flatmap()
01Spark Overview
Sparkの概要
RDDの変換例②flatmap()
RDDの変換例③reduceByKey()
01Spark Overview
Sparkの概要
RDD
Partition
Element
fish
cat
cat
fish
fish
単語に分割した
RDD/words
例えばこのようなプログラムの場合flatmapの操作
は右図のようになります。
import org.apache.spark.api.java.JavaPairRDD;

import org.apache.spark.api.java.JavaRDD;

import org.apache.spark.api.java.JavaSparkContext;

import org.apache.spark.api.java.function.FlatMapFunction;

import org.apache.spark.api.java.function.Function2;

import org.apache.spark.api.java.function.PairFunction;

import scala.Tuple2;



import java.util.Arrays;



/**

* Created by hirokinaganuma on 2016/10/11.

*/

public class Sample04 {

public static void main(String[] args) throws Exception {

String master;

if (args.length > 0) {

master = args[0];

} else {

master = "local";

}

JavaSparkContext sc = new JavaSparkContext(master, "basicavg",
System.getenv("SPARK_HOME"), System.getenv("JARS"));

JavaRDD<String> input = sc.textFile("bin/input/reducebykey/*.txt");

JavaRDD<String> words = input.flatMap(

new FlatMapFunction<String, String>() {

public Iterable<String> call(String x) {

return Arrays.asList(x.split(" "));

}

}

);



JavaPairRDD<String, Integer> pairrdd = words.mapToPair(

new PairFunction<String, String, Integer>(){

public Tuple2<String, Integer> call(String x){

return new Tuple2(x, 1);

}

}

);



JavaPairRDD<String, Integer> output = pairrdd.reduceByKey(new Function2<Integer,
Integer, Integer>(){

public Integer call(Integer x, Integer y){

return x+y;

}

});



output.saveAsTextFile("bin/output/output04");

}

}
Sample04.java
cat
cat
dog
(fish,1)
(cat,1)
(cat,1)
(fish,1)
(fish,1)
(cat,1)
(cat,1)
(dog,1)
単語と数字をペアに
したRDD/pairrdd
(fish,1)
(fish,1)
(dog,1)
(cat,1)
(cat,1)
(cat,1)
(cat,1)
(fish,3)
(dog,1)
(cat,4)
(fish,1)
同じkeyを持つ
elementが集められ
た中間RDD
集約処理した結果の
RDD/output
shuffle
RDDの変換例③reduceByKey()
01Spark Overview
Sparkの概要
RDD
Partition
Element
fish
cat
cat
fish
fish
単語に分割した
RDD/words
例えばこのようなプログラムの場合flatmapの操作
は右図のようになります。
cat
cat
dog
(fish,1)
(cat,1)
(cat,1)
(fish,1)
(fish,1)
(cat,1)
(cat,1)
(dog,1)
単語と数字をペアに
したRDD/pairrdd
(fish,1)
(fish,1)
(dog,1)
(cat,1)
(cat,1)
(cat,1)
(cat,1)
(fish,3)
(dog,1)
(cat,4)
(fish,1)
同じkeyを持つ
elementが集められ
た中間RDD
集約処理した結果の
RDD/output
shuffle
ファイルシステム
ディレクトリ
fish
cat
cat
fish
fish
ロードした
RDD/input
cat
cat
dog
fish
cat
cat
fish
fish
cat
cat
dog
たまたま変更なし
ファイルシステム
ディレクトリ
(fish,3)
(dog,1)
(cat,4)
RDDの変換例③reduceByKey()
01Spark Overview
Sparkの概要
例えばこのようなプログラムの場合flatmapの操作
は右図のようになります。
01Spark Overview
Sparkの概要
Architecture in Mesos
Mesosでのアーキテクチャ 03
01 Index
02Flow of Spark processing
Sparkの処理の流れについて
(Standalone Clusterモードの場合の)デプロイの流れ
【ポイント】
Driverはmain関数の実行とSparkContextの作成を行う。
各WorkerNodeは複数のExecutorBackendプロセスを管理している。
各ExecutorBackendプロセスは起動後Executorを管理する。各
Executorはスレッドプールを保持し、各Taskがスレッド上で実行さ
れる。


SparkはまずLogicalPlan(DataDependencyGraphと呼ばれる)を
各アプリケーションに対して作成し、LogicalPlanを基にPhysicalPlan
(Map/ReduceのStageのDAG)を作成する。その後、Stageを更に
分割したTaskをMap/Reduceとして起動し、入力データを処理する。
ジョブ中のLogicalPlanがどのようにSparkにおいてPartitionに分割
され、依存性を関連付けて処理されるかについてのちに紹介します。
02Flow of Spark processing
Sparkの処理の流れについて
LogicalPlan
02Flow of Spark processing
Sparkの処理の流れについて
package org.apache.spark.examples
import java.util.Random
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.SparkContext._
/**
* Usage: GroupByTest [numMappers] [numKVPairs] [valSize] [numReducers]
*/
object GroupByTest {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setAppName("GroupBy Test")
var numMappers = 100
var numKVPairs = 10000
var valSize = 1000
var numReducers = 36
val sc = new SparkContext(sparkConf)
val pairs1 = sc.parallelize(0 until numMappers, numMappers).flatMap { p =>
val ranGen = new Random
var arr1 = new Array[(Int, Array[Byte])](numKVPairs)
for (i <- 0 until numKVPairs) {
val byteArr = new Array[Byte](valSize)
ranGen.nextBytes(byteArr)
arr1(i) = (ranGen.nextInt(Int.MaxValue), byteArr)
}
arr1
}.cache
// Enforce that everything has been calculated and in cache
pairs1.count
println(pairs1.groupByKey(numReducers).count)
sc.stop()
}
}
GroupByTest.scala
02Flow of Spark processing
Sparkの処理の流れについて
【ポイント】
SparkConfが初期化される。
numMappers=100, numKVPairs=10,000, valSize=1000, numReducers=36として初期
化される。
SparkContextが初期化され、Driverに必要なオブジェクトとアクター類が生成される。
各Mapperではarr1: Array[(Int, Byte[])]を生成し、numKVPairs個の要素を保持する。各Int
値はランダムの整数値となっており、各Byte配列のサイズはvalSizeとなっている。 arr1のサ
イズはnumKVPairs * (4 + valSize) より10MBと計算されるため、pairs1のサイズは
numMappers * Size(arr1)より1000MBとなる。
各Mapperはarr1をメモリ上にキャッシュするよう指定されている。
count()アクションが全Mapper上のarr1の要素数の合計を取得するよう動作し、結果は
numMappers * numKVPairsから1,000,000となる。このアクションによって実際にarr1の
計算がおこなわれ、キャッシュされる。
groupByKeyオペレーションはキャッシュされたpairs1に対して実行される。Reducer数(=
パーティション数)はnumReducersで示される。 理論上、もしhash(key)が上手く分散され
た場合、各ReducerはnumMappers * numKVPairs / numReducerより27,777個の(Int,
Array[Byte])ペアを受信する。そのため、各Reducer上におけるデータサイズはSize(pairs1)
/ numReducerより27MBとなる。
Reducerは同一のIntキー値を保持するレコードをマージし、(Int, List(Byte[], Byte[], ...,
Byte[]))の結果を生成する。
最後にcount()アクションが各Reducer上でのレコード数の合計値を取得し、最終的な結果は
paris1中のキー重複を排除した個数となる。
package org.apache.spark.examples
import java.util.Random
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.SparkContext._
/**
* Usage: GroupByTest [numMappers] [numKVPairs] [valSize] [numReducers]
*/
object GroupByTest {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setAppName("GroupBy Test")
var numMappers = 100
var numKVPairs = 10000
var valSize = 1000
var numReducers = 36
val sc = new SparkContext(sparkConf)
val pairs1 = sc.parallelize(0 until numMappers, numMappers).flatMap { p =>
val ranGen = new Random
var arr1 = new Array[(Int, Array[Byte])](numKVPairs)
for (i <- 0 until numKVPairs) {
val byteArr = new Array[Byte](valSize)
ranGen.nextBytes(byteArr)
arr1(i) = (ranGen.nextInt(Int.MaxValue), byteArr)
}
arr1
}.cache
// Enforce that everything has been calculated and in cache
pairs1.count
println(pairs1.groupByKey(numReducers).count)
sc.stop()
}
}
GroupByTest.scala
LogicalPlan
LogicalPlan
02Flow of Spark processing
Sparkの処理の流れについて
package org.apache.spark.examples
import java.util.Random
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.SparkContext._
/**
* Usage: GroupByTest [numMappers] [numKVPairs] [valSize] [numReducers]
*/
object GroupByTest {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setAppName("GroupBy Test")
var numMappers = 100
var numKVPairs = 10000
var valSize = 1000
var numReducers = 36
val sc = new SparkContext(sparkConf)
val pairs1 = sc.parallelize(0 until numMappers, numMappers).flatMap { p =>
val ranGen = new Random
var arr1 = new Array[(Int, Array[Byte])](numKVPairs)
for (i <- 0 until numKVPairs) {
val byteArr = new Array[Byte](valSize)
ranGen.nextBytes(byteArr)
arr1(i) = (ranGen.nextInt(Int.MaxValue), byteArr)
}
arr1
}.cache
// Enforce that everything has been calculated and in cache
pairs1.count
println(pairs1.groupByKey(numReducers).count)
sc.stop()
}
}
GroupByTest.scala
LogicalPlan
02Flow of Spark processing
Sparkの処理の流れについて
【ポイント】
ユーザ側で100の整数値を保持する配列(今回の場合0∼99)を初期化する。
parallelize()は各要素が整数値iを含むParallelCollectionRDDを生成する。
flatMapメソッドによってParallelCollectionRDDからFlatMappedRDDが
生成される。
FlatMappedRDDの各Partitionは[(Int, Array[Byte])]の配列を保持する。
count()がFlatMappedRDDに対して実行される。
FlatMappedRDDがメモリにキャッシュされる。(色を変えてある)
groupByKey()が続く2つのRDD(ShuffledRDD and MapPartitionsRDD)
を生成する。(詳細については後の章で説明)
ShuffleRDDはLogicalPlan中ではShuffleが必要なジョブとして示されてい
る。ShuffleはHadoop MapReduceでのShuffleと共通。
MapPartitionRDDがgroupByKey()の結果を保持する。
MapPartitionRDD(Array[Byte])の各要素がIterableに変換される。
最終的なcount()アクションがMapPartitionRDDに対して実行される。
LogicalPlanはアプリケーションのデータフロー(Transformation群、内部
RDD、RDD間の依存関係 )を示している。
LogicalPlan
データフローから実行フローへの変換
LogicalPlan
02Flow of Spark processing
Sparkの処理の流れについて
PhysicalDAGPlan
PhysicalDAGPlan
02Flow of Spark processing
Sparkの処理の流れについて
PhysicalDAGPlan
【ポイント】
DAGSchedulerが、系譜をスケジュールに分割します。
ステージは系譜中で狭い依存関係が連続して発生する範囲(依存関係の
種類は変換の種類できまる)
系譜中で広い依存関係が発生する変換関数を処理する場合はエグゼ
キュータ間でシャッフルと呼ばれる多数対多数の通信が発生してしま
います。
この分割は、パーティションごとに一つのエグゼキュータがまとめて
計算できる変換の範囲を決めるためのものです。
その後タスクの作成に入ります。
DAGSchedulerが実行対象の個々のステージについてタスクを定義す
し各ステージにおいて、ステージ内の最後のRDDのパーティション数
から当該ステージのタスク数が決まります。
ステージに含まれるRDDの変換チェインから、タスクあたりの処理範
囲も決まります。
PhysicalDAGPlan
02Flow of Spark processing
Sparkの処理の流れについて
PhysicalDAGPlan【ポイント】
右の図から、GroupByTestアプリケーションは2個のSparkジョブを生成する
ことがわかる。
はじめのジョブは初回に実行されるcountアクションであり、詳細は以下のと
おりとなる。
ジョブは1Stage(100のResultTaskを保持)から構成される。ここでのStageは
HadoopのMap Stageと似ている。(図中では示されないが
最初のジョブはつまりは下にあるfirst count()で示されるresut 1 ∼ result 99
が表示されている部分のみを示すわけですね。
各TaskはflatMap関数を実行し、FlatMappedRDDを生成する。その後count
アクションを実行することで各Partitionが保持するレコード数をカウントする。
例えば、Partition99は図中では9個のレコードを保持するため、Partition99
のcount結果は9となる。
pairs1はキャッシュされることを指定されているため、本Task実行時に
FlatMappedRDDのPartition群はExecutorのメモリ上に保存され、それは実
行中常時保持される。
ResultTask群終了後、Driverは各Taskの結果から結果を収集し、それを合計し
て結果を算出する。
これでジョブ0が終了となる。
PhysicalDAGPlan
02Flow of Spark processing
Sparkの処理の流れについて
PhysicalDAGPlan【ポイント】
次のジョブはpairs1.groupByKey(numReducers).countの実行によって起動
される。
このジョブは2個のStageから構成される。
左上のShuffleTaskと、右上のResultTaskが対象となります。
Stage0は100個のShuffleMapTaskを保持し、各Taskはparis1のPartitionを
キャッシュから読み込み、Repartitionを行い、そのRepartition実行結果をロー
カルディスクに出力する。この過程はHadoop MapReduceにおいてMapが結
果の各Partitionを出力する処理と共通。
Stage1は36個のResultTasksを保持する。各Taskは各プロセスが必要とする
データを取得し、Shuffleする。データ取得後データを統合し、mapPartitions
処理をパイプラインのように実行する。最終的に、countアクションが実行さ
れ、各結果の取得が行われる。
ResultTasks終了後、DriverはTaskの実行結果を取得し、合計する。
これでジョブ1が終了となる。
処理の流れおさらい①
02Flow of Spark processing
Sparkの処理の流れについて
ジョブを生成し、Workerノードに登録LogicalPlanを作成(詳細には次回以降触れます)演算の連鎖
処理の流れおさらい②
02Flow of Spark processing
Sparkの処理の流れについて
ジョブを生成し、Workerノードに登録
【ポイント】
# 系譜のステージへの分割
・DAGSchedulerが、系譜をスケジュールに分割する
・ステージは系譜中で狭い依存関係が連続して発生する範囲(依存関係の種類は変換の種類できまる)
・系譜中で広い依存関係が発生する変換関数を処理する場合はエグゼキュータ間でシャッフルと呼ばれる
多数対多数の通信が発生する。
・この分割は、パーティションごとに一つのエグゼキュータがまとめて計算できる変換の範囲を決めるた
め
# ステージの実行要否を判定する
・Sparkではスケジューラで制御されてる複数のジョブで同じRDDを共有することができる
・共有しているRDDがすでに計算済みで、ディスクやメモリに実態を持つ場合、そのRDDを生成するため
の前段のステージ実行を省略できる
処理の流れおさらい③
02Flow of Spark processing
Sparkの処理の流れについて
ジョブを生成し、Workerノードに登録
【ポイント】
# タスクを生成する
・DAGSchedulerが実行対象の個々のステージについてタスクを定義する
・各ステージにおいて、ステージ内の最後のRDDのパーティション数から当該ステージのタスク数が決ま
る
・ステージに含まれるRDDの変換チェインから、タスクあたりの処理範囲が決まる



# タスクを実行する場所を決める
・プリファードロケーションがRDDにセットされている場合はそれをヒントにエグゼキュータを選ぶ
・ない場合は親をたどって最初に見つかったものを使う
・プリファードロケーションはRDDの種類ごとに定義される
・データソースをもとに異性されるRDDはプリファードロケーションを持つので
・いつかはプリファードロケーションが見つかる
# タスクの実行順序をスケジューリングする
・ステージを構築するタスク群は「タスクセット」としてTaskSchedulerに渡される
・TaskSchedulerはタスクセット単位で実行順序のスケジューリングを行う。
・TaskSchedulerはタスクセットの実行順序を決定するまでに、タスクセットを登録して・おく「プー
ル」を一つ以上保持。スケジューリング方法によってプールの数や使い方が異なる
01Spark Overview
Sparkの概要
Architecture in Mesos
Mesosでのアーキテクチャ 03
01 Index
02Flow of Spark processing
Sparkの処理の流れについて
【ポイント】
1. Scala、Java、R、Pythonなどに対応
(APIが用意されてる)
2. 多彩なライブラリ
3. 複数の導入シナリオ
(スタンドアロン、YARN、Mesos、
組み込み、クラウド)
5. 幅広い処理モデル(バッチ、
インタラクティブ、ストリーミング)
Architecture in Mesos
Mesosでのアーキテクチャ 03
【ポイント】
Apache Mesos もサポートしているが、企業向け
で最もメジャーなのはHadoop YARN(Hadoopコ
アの一部)でこれももちろんサポートしている。
またSpark Standaloneと呼ばれる小規模ビルトイ
ン・クラスタ・システムも含まれており、小規模ク
ラスタ・テストなどの用途でのデプロイに適してい
ます。
分散モードでは、Sparkは一つのセントラルコーディ
ネータ(ドライバ)と、多くの分散ワーカー(エグゼ
キュータ)を持つマスター/スレーブアーキテクチャ
を利用します。
またそのドライバ単体でjavaのプロセスとして動作
し、各エグゼキュータも個別のjavaプロセスとして
動作します。このドライバとエグゼキュータ群はま
とめてSparkアプリケーションと呼ばれます。
Architecture in Mesos
Mesosでのアーキテクチャ 03
Architecture in Mesos
Mesosでのアーキテクチャ 03
Apache Mesosは汎用のクラスタマネージャ
リソース効率の高い分散システムを簡単に作れる。
Apache Mesos は、分散アプリケーション or フレームワークに対して、効率的なリソース分離、共
有を提供するクラスタ管理ソフトです。Mesos を使うと、ノードの動的共有プール上で Hadoop,
MPI, Hypertable, Spark, その他のアプリケーションを走らせることができます。
Architecture in Mesos
Mesosでのアーキテクチャ 03
To be continued.
To be continued.

More Related Content

Similar to Survey of Apache Spark

Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)NTT DATA OSS Professional Services
 
Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoHideo Harada
 
Deep Learning On Apache Spark
Deep Learning On Apache SparkDeep Learning On Apache Spark
Deep Learning On Apache SparkYuta Imai
 
Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係hishidama
 
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...NTT DATA Technology & Innovation
 
Apache Spark チュートリアル
Apache Spark チュートリアルApache Spark チュートリアル
Apache Spark チュートリアルK Yamaguchi
 
Apache Sparkを使った感情極性分析
Apache Sparkを使った感情極性分析Apache Sparkを使った感情極性分析
Apache Sparkを使った感情極性分析Tanaka Yuichi
 
Apache Sparkについて
Apache SparkについてApache Sparkについて
Apache SparkについてBrainPad Inc.
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門Daiyu Hatakeyama
 
Scala.jsはじめました?
Scala.jsはじめました?Scala.jsはじめました?
Scala.jsはじめました?K Kinzal
 
Apache Sparkやってみたところ
Apache SparkやってみたところApache Sparkやってみたところ
Apache SparkやってみたところTatsunori Nishikori
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門Shintaro Fukushima
 
Configureing analytics system with apache spark and object storage service of...
Configureing analytics system with apache spark and object storage service of...Configureing analytics system with apache spark and object storage service of...
Configureing analytics system with apache spark and object storage service of...Kenichi Sonoda
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情takezoe
 
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...NTT DATA Technology & Innovation
 
Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析Tanaka Yuichi
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 

Similar to Survey of Apache Spark (20)

Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
 
Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 Hokkaido
 
Deep Learning On Apache Spark
Deep Learning On Apache SparkDeep Learning On Apache Spark
Deep Learning On Apache Spark
 
Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係
 
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
 
Apache Spark チュートリアル
Apache Spark チュートリアルApache Spark チュートリアル
Apache Spark チュートリアル
 
Apache Sparkを使った感情極性分析
Apache Sparkを使った感情極性分析Apache Sparkを使った感情極性分析
Apache Sparkを使った感情極性分析
 
Apache Sparkについて
Apache SparkについてApache Sparkについて
Apache Sparkについて
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 
Scala.jsはじめました?
Scala.jsはじめました?Scala.jsはじめました?
Scala.jsはじめました?
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Spark CL
Spark CLSpark CL
Spark CL
 
Apache Sparkやってみたところ
Apache SparkやってみたところApache Sparkやってみたところ
Apache Sparkやってみたところ
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
 
Configureing analytics system with apache spark and object storage service of...
Configureing analytics system with apache spark and object storage service of...Configureing analytics system with apache spark and object storage service of...
Configureing analytics system with apache spark and object storage service of...
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
 
Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析
 
Apache Spark + Arrow
Apache Spark + ArrowApache Spark + Arrow
Apache Spark + Arrow
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 

More from Mila, Université de Montréal (12)

Introduction of tokyo and tokyo tech
Introduction of tokyo and tokyo techIntroduction of tokyo and tokyo tech
Introduction of tokyo and tokyo tech
 
Eps world heritage1
Eps world heritage1Eps world heritage1
Eps world heritage1
 
Eps scientific realism
Eps scientific realismEps scientific realism
Eps scientific realism
 
International hpc summer school presentation
International hpc summer school presentationInternational hpc summer school presentation
International hpc summer school presentation
 
Gt leadership challenge
Gt leadership challengeGt leadership challenge
Gt leadership challenge
 
Survey of recent deep learning with low precision
Survey of recent deep learning with low precisionSurvey of recent deep learning with low precision
Survey of recent deep learning with low precision
 
Imagine cup 2017 world finals report
Imagine cup 2017 world finals reportImagine cup 2017 world finals report
Imagine cup 2017 world finals report
 
Training ImageNet-1k ResNet50 in 15min pfn
Training ImageNet-1k ResNet50 in 15min pfnTraining ImageNet-1k ResNet50 in 15min pfn
Training ImageNet-1k ResNet50 in 15min pfn
 
Mathematical Sociology Final Report
Mathematical Sociology Final ReportMathematical Sociology Final Report
Mathematical Sociology Final Report
 
English4lsb1
English4lsb1 English4lsb1
English4lsb1
 
Large scale logistic regression and linear support vector machines using spark
Large scale logistic regression and linear support vector machines using sparkLarge scale logistic regression and linear support vector machines using spark
Large scale logistic regression and linear support vector machines using spark
 
Hack U TokyoTech 2016
Hack U TokyoTech 2016Hack U TokyoTech 2016
Hack U TokyoTech 2016
 

Survey of Apache Spark