SlideShare a Scribd company logo
1 of 26
Download to read offline
Apache Spark in Depth
core concepts, architecture & internals
Anton Kirillov Ooyala, Mar 2016
Roadmap
● RDDs
○ Definition
○ Operations
● Execution workflow
○ DAG
○ Stages and tasks
○ Shuffle
● Architecture
○ Components
○ Memory model
● Coding
○ spark-shell
○ building and submitting Spark applications to YARN
Meet Spark
● Generalized framework for distributed data processing (batch, graph, ML)
● Scala collections functional API for manipulating data at scale
● In-memory data caching and reuse across computations
● Applies set of coarse-grained transformations over partitioned data
● Failure recovery relies on lineage to recompute failed tasks
● Supports majority of input formats and integrates with Mesos / YARN
Spark makes data engineers happy
Backup/restore of Cassandra tables in Parquet
def backup(config: Config) {
sc.cassandraTable(config.keyspace, config.table).map(_.toEvent).toDF()
.write.parquet(config.path)
}
def restore(config: Config) {
sqlContext.read.parquet(config.path)
.map(_.toEvent).saveToCassandra(config.keyspace, config.table)
}
Query different data sources to identify discrepancies
sqlContext.sql {
"""
SELECT count()
FROM cassandra_event_rollups
JOIN mongo_event_rollups
ON cassandra_event_rollups.uuid = cassandra_event_rollups.uuid
WHERE cassandra_event_rollups.value != cassandra_event_rollups.value
""".stripMargin
}
Core Concepts
RDD: Resilient Distributed Dataset
● A fault-tolerant, immutable, parallel data structure
● Provides API for
○ manipulating the collection of elements (transformations and materialization)
○ persisting intermediate results in memory for later reuse
○ controlling partitioning to optimize data placement
● Can be created through deterministic operation
○ from storage (distributed file system, database, plain file)
○ from another RDD
● Stores information about parent RDDs
○ for execution optimization and operations pipelining
○ to recompute the data in case of failure
RDD: a developer’s view
● Distributed immutable data + lazily evaluated operations
○ partitioned data + iterator
○ transformations & actions
● An interface defining 5 main properties
a list of partitions (e.g. splits in Hadoop)
def getPartitions: Array[Partition]
a list of dependencies on other RDDs
def getDependencies: Seq[Dependency[_]]
a function for computing each split
def compute(split: Partition, context: TaskContext): Iterator[T]
(optional) a list of preferred locations to compute each split on
def getPreferredLocations(split: Partition): Seq[String] = Nil
(optional) a partitioner for key-value RDDs
val partitioner: Option[Partitioner] = None
lineage
execution optimization
RDDs Example
● HadoopRDD
○ getPartitions = HDFS blocks
○ getDependencies = None
○ compute = load block in memory
○ getPrefferedLocations = HDFS block locations
○ partitioner = None
● MapPartitionsRDD
○ getPartitions = same as parent
○ getDependencies = parent RDD
○ compute = compute parent and apply map()
○ getPrefferedLocations = same as parent
○ partitioner = None
sparkContext.textFile("hdfs://...")
RDD Operations
● Transformations
○ apply user function to every element in a partition (or to the whole partition)
○ apply aggregation function to the whole dataset (groupBy, sortBy)
○ introduce dependencies between RDDs to form DAG
○ provide functionality for repartitioning (repartition, partitionBy)
● Actions
○ trigger job execution
○ used to materialize computation results
● Extra: persistence
○ explicitly store RDDs in memory, on disk or off-heap (cache, persist)
○ checkpointing for truncating RDD lineage
Execution workflow
10
rdd1.join(rdd2)
.groupBy(...)
.filter(...)
splits graph into
stages of tasks
submits each stage
as ready
launches tasks via
cluster manager
retries failed or
struggling tasks
executes tasks
stores and serves
blocks
Code sample: joining aggregated and raw data
//aggregate events after specific date for given campaign
val events = sc.cassandraTable("demo", "event")
.map(_.toEvent)
.filter(event => event.campaignId == campaignId && event.time.isAfter(watermark))
.keyBy(_.eventType)
.reduceByKey(_ + _)
.cache()
//aggregate campaigns by type
val campaigns = sc.cassandraTable("demo", "campaign")
.map(_.toCampaign)
.filter(campaign => campaign.id == campaignId && campaign.time.isBefore(watermark))
.keyBy(_.eventType)
.reduceByKey(_ + _)
.cache()
//joined rollups and raw events
val joinedTotals = campaigns.join(events)
.map { case (key, (campaign, event)) => CampaignTotals(campaign, event) }
.collect()
//count totals separately
val eventTotals = events.map{ case (t, e) => s"$t -> ${e.value}" }.collect()
val campaignTotals = campaigns.map{ case (t, e) => s"$t -> ${e.value}" }.collect()
DAG
Dependency types
● Narrow (pipelineable)
○ each partition of the parent RDD is used by at most
one partition of the child RDD
○ allow for pipelined execution on one cluster node
○ failure recovery is more efficient as only lost parent
partitions need to be recomputed
● Wide (shuffle)
○ multiple child partitions may depend on one parent
partition
○ require data from all parent partitions to be available
and to be shuffled across the nodes
○ if some partition is lost from all the ancestors a
complete recomputation is needed
Stages and Tasks
● Stages breakdown strategy
○ check backwards from final RDD
○ add each “narrow” dependency to
the current stage
○ create new stage when there’s a
shuffle dependency
● Tasks
○ ShuffleMapTask partitions its
input for shuffle
○ ResultTask sends its output to
the driver
Shuffle
● Shuffle Write
○ redistributes data among partitions
and writes files to disk
○ each hash shuffle task creates one
file per “reduce” task (total = MxR)
○ sort shuffle task creates one file
with regions assigned to reducer
○ sort shuffle uses in-memory sorting
with spillover to disk to get final
result
● Shuffle Read
○ fetches the files and applies
reduce() logic
○ if data ordering is needed then it is
sorted on “reducer” side for any
type of shuffle (SPARK-2926)
Sort Shuffle
● Incoming records accumulated
and sorted in memory according
their target partition ids
● Sorted records are written to file
or multiple files if spilled and then
merged
● index file stores offsets of the
data blocks in the data file
● Sorting without deserialization is
possible under certain conditions
(SPARK-7081)
Architecture Recap
● Spark Driver
○ separate process to execute user
applications
○ creates SparkContext to schedule
jobs execution and negotiate with
cluster manager
● Executors
○ run tasks scheduled by driver
○ store computation results in
memory, on disk or off-heap
○ interact with storage systems
● Cluster Manager
○ Mesos
○ YARN
○ Spark Standalone
Spark Components
Spark Components
● SparkContext
○ represents the connection to a Spark cluster, and can be used to create RDDs, accumulators and
broadcast variables on that cluster
● DAGScheduler
○ computes a DAG of stages for each job and submits them to TaskScheduler
○ determines preferred locations for tasks (based on cache status or shuffle files locations) and finds
minimum schedule to run the jobs
● TaskScheduler
○ responsible for sending tasks to the cluster, running them, retrying if there are failures, and mitigating
stragglers
● SchedulerBackend
○ backend interface for scheduling systems that allows plugging in different implementations(Mesos,
YARN, Standalone, local)
● BlockManager
○ provides interfaces for putting and retrieving blocks both locally and remotely into various stores
(memory, disk, and off-heap)
Memory Management in Spark 1.6
● Execution Memory
○ storage for data needed during tasks execution
○ shuffle-related data
● Storage Memory
○ storage of cached RDDs and broadcast variables
○ possible to borrow from execution memory
(spill otherwise)
○ safeguard value is 0.5 of Spark Memory when cached
blocks are immune to eviction
● User Memory
○ user data structures and internal metadata in Spark
○ safeguarding against OOM
● Reserved memory
○ memory needed for running executor itself and not
strictly related to Spark
Workshop
code available @ github.com/datastrophic/spark-workshop
Execution Modes
● spark-shell --master [ local | spark | yarn-client | mesos]
○ launches REPL connected to specified cluster manager
○ always runs in client mode
● spark-submit --master [ local | spark:// | mesos:// | yarn ] spark-job.jar
○ launches assembly jar on the cluster
● Masters
○ local[k] - run Spark locally with K worker threads
○ spark - launches driver app on Spark Standalone installation
○ mesos - driver will spawn executors on Mesos cluster (deploy-mode: client | cluster)
○ yarn - same idea as with Mesos (deploy-mode: client | cluster)
● Deploy Modes
○ client - driver executed as a separate process on the machine where it has been launched and
spawns executors
○ cluster - driver launched as a container using underlying cluster manager
Invocation examples
spark-shell 
--master yarn 
--deploy-mode client 
--executor-cores 1 
--num-executors 2 
--jars /target/spark-workshop.jar 
--conf spark.cassandra.connection.host=cassandra
spark-submit --class io.datastrophic.spark.workshop.ParametrizedApplicationExample 
--master yarn 
--deploy-mode cluster 
--num-executors 2 
--driver-memory 1g 
--executor-memory 1g 
/target/spark-workshop.jar 
--cassandra-host cassandra 
--keyspace demo 
--table event 
--target-dir /workshop/dumps
Live Demo
● spark-shell
● Spark UI
● creating an app with Typesafe Activator
● Spark SQL and DataFrames API
● coding
Coding ideas
● get familiar with API through sample project
○ join data from different storage systems
○ aggregate data with breakdown by date
● play with caching and persistence
● check out join behavior applying different partitioning
● familiarize with Spark UI
● experiment with new DataSet API (since 1.6)
● [ your awesome idea here ]
Questions
@antonkirillov datastrophic.io

More Related Content

What's hot

What's hot (20)

Apache Spark Architecture
Apache Spark ArchitectureApache Spark Architecture
Apache Spark Architecture
 
A Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLA Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQL
 
Spark overview
Spark overviewSpark overview
Spark overview
 
Introduction to Apache Spark
Introduction to Apache SparkIntroduction to Apache Spark
Introduction to Apache Spark
 
Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...
Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...
Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...
 
A Deep Dive into Spark SQL's Catalyst Optimizer with Yin Huai
A Deep Dive into Spark SQL's Catalyst Optimizer with Yin HuaiA Deep Dive into Spark SQL's Catalyst Optimizer with Yin Huai
A Deep Dive into Spark SQL's Catalyst Optimizer with Yin Huai
 
Apache Spark Core—Deep Dive—Proper Optimization
Apache Spark Core—Deep Dive—Proper OptimizationApache Spark Core—Deep Dive—Proper Optimization
Apache Spark Core—Deep Dive—Proper Optimization
 
Apache Spark Introduction and Resilient Distributed Dataset basics and deep dive
Apache Spark Introduction and Resilient Distributed Dataset basics and deep diveApache Spark Introduction and Resilient Distributed Dataset basics and deep dive
Apache Spark Introduction and Resilient Distributed Dataset basics and deep dive
 
Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...
Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...
Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...
 
High-speed Database Throughput Using Apache Arrow Flight SQL
High-speed Database Throughput Using Apache Arrow Flight SQLHigh-speed Database Throughput Using Apache Arrow Flight SQL
High-speed Database Throughput Using Apache Arrow Flight SQL
 
Spark
SparkSpark
Spark
 
Apache Spark Introduction
Apache Spark IntroductionApache Spark Introduction
Apache Spark Introduction
 
Introduction to Apache Spark
Introduction to Apache SparkIntroduction to Apache Spark
Introduction to Apache Spark
 
Programming in Spark using PySpark
Programming in Spark using PySpark      Programming in Spark using PySpark
Programming in Spark using PySpark
 
Spark + Parquet In Depth: Spark Summit East Talk by Emily Curtin and Robbie S...
Spark + Parquet In Depth: Spark Summit East Talk by Emily Curtin and Robbie S...Spark + Parquet In Depth: Spark Summit East Talk by Emily Curtin and Robbie S...
Spark + Parquet In Depth: Spark Summit East Talk by Emily Curtin and Robbie S...
 
Processing Large Data with Apache Spark -- HasGeek
Processing Large Data with Apache Spark -- HasGeekProcessing Large Data with Apache Spark -- HasGeek
Processing Large Data with Apache Spark -- HasGeek
 
Understanding Query Plans and Spark UIs
Understanding Query Plans and Spark UIsUnderstanding Query Plans and Spark UIs
Understanding Query Plans and Spark UIs
 
Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...
Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...
Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...
 
Apache Spark Core – Practical Optimization
Apache Spark Core – Practical OptimizationApache Spark Core – Practical Optimization
Apache Spark Core – Practical Optimization
 
Introduction to PySpark
Introduction to PySparkIntroduction to PySpark
Introduction to PySpark
 

Viewers also liked

Simplifying Big Data Analytics with Apache Spark
Simplifying Big Data Analytics with Apache SparkSimplifying Big Data Analytics with Apache Spark
Simplifying Big Data Analytics with Apache Spark
Databricks
 
Hands on MapR -- Viadea
Hands on MapR -- ViadeaHands on MapR -- Viadea
Hands on MapR -- Viadea
viadea
 

Viewers also liked (14)

Introduction to Spark Internals
Introduction to Spark InternalsIntroduction to Spark Internals
Introduction to Spark Internals
 
Introduction to Apache Spark Developer Training
Introduction to Apache Spark Developer TrainingIntroduction to Apache Spark Developer Training
Introduction to Apache Spark Developer Training
 
MapR Tutorial Series
MapR Tutorial SeriesMapR Tutorial Series
MapR Tutorial Series
 
Simplifying Big Data Analytics with Apache Spark
Simplifying Big Data Analytics with Apache SparkSimplifying Big Data Analytics with Apache Spark
Simplifying Big Data Analytics with Apache Spark
 
MapR and Cisco Make IT Better
MapR and Cisco Make IT BetterMapR and Cisco Make IT Better
MapR and Cisco Make IT Better
 
AWS re:Invent 2016: Fraud Detection with Amazon Machine Learning on AWS (FIN301)
AWS re:Invent 2016: Fraud Detection with Amazon Machine Learning on AWS (FIN301)AWS re:Invent 2016: Fraud Detection with Amazon Machine Learning on AWS (FIN301)
AWS re:Invent 2016: Fraud Detection with Amazon Machine Learning on AWS (FIN301)
 
Apache Spark & Hadoop
Apache Spark & HadoopApache Spark & Hadoop
Apache Spark & Hadoop
 
Modern Data Architecture
Modern Data ArchitectureModern Data Architecture
Modern Data Architecture
 
Hands on MapR -- Viadea
Hands on MapR -- ViadeaHands on MapR -- Viadea
Hands on MapR -- Viadea
 
Architectural Overview of MapR's Apache Hadoop Distribution
Architectural Overview of MapR's Apache Hadoop DistributionArchitectural Overview of MapR's Apache Hadoop Distribution
Architectural Overview of MapR's Apache Hadoop Distribution
 
MapR M7: Providing an enterprise quality Apache HBase API
MapR M7: Providing an enterprise quality Apache HBase APIMapR M7: Providing an enterprise quality Apache HBase API
MapR M7: Providing an enterprise quality Apache HBase API
 
Deep Learning for Fraud Detection
Deep Learning for Fraud DetectionDeep Learning for Fraud Detection
Deep Learning for Fraud Detection
 
Apache Spark 2.0: Faster, Easier, and Smarter
Apache Spark 2.0: Faster, Easier, and SmarterApache Spark 2.0: Faster, Easier, and Smarter
Apache Spark 2.0: Faster, Easier, and Smarter
 
MapR Data Analyst
MapR Data AnalystMapR Data Analyst
MapR Data Analyst
 

Similar to Apache Spark in Depth: Core Concepts, Architecture & Internals

Similar to Apache Spark in Depth: Core Concepts, Architecture & Internals (20)

Data processing platforms with SMACK: Spark and Mesos internals
Data processing platforms with SMACK:  Spark and Mesos internalsData processing platforms with SMACK:  Spark and Mesos internals
Data processing platforms with SMACK: Spark and Mesos internals
 
Spark Deep Dive
Spark Deep DiveSpark Deep Dive
Spark Deep Dive
 
Introduction to Apache Spark
Introduction to Apache SparkIntroduction to Apache Spark
Introduction to Apache Spark
 
Apache spark - Installation
Apache spark - InstallationApache spark - Installation
Apache spark - Installation
 
Apache spark - Spark's distributed programming model
Apache spark - Spark's distributed programming modelApache spark - Spark's distributed programming model
Apache spark - Spark's distributed programming model
 
Apache Spark II (SparkSQL)
Apache Spark II (SparkSQL)Apache Spark II (SparkSQL)
Apache Spark II (SparkSQL)
 
Apache Spark™ is a multi-language engine for executing data-S5.ppt
Apache Spark™ is a multi-language engine for executing data-S5.pptApache Spark™ is a multi-language engine for executing data-S5.ppt
Apache Spark™ is a multi-language engine for executing data-S5.ppt
 
Spark 计算模型
Spark 计算模型Spark 计算模型
Spark 计算模型
 
Apache Spark: What? Why? When?
Apache Spark: What? Why? When?Apache Spark: What? Why? When?
Apache Spark: What? Why? When?
 
Core Services behind Spark Job Execution
Core Services behind Spark Job ExecutionCore Services behind Spark Job Execution
Core Services behind Spark Job Execution
 
DAGScheduler - The Internals of Apache Spark.pdf
DAGScheduler - The Internals of Apache Spark.pdfDAGScheduler - The Internals of Apache Spark.pdf
DAGScheduler - The Internals of Apache Spark.pdf
 
Apache Spark Workshop
Apache Spark WorkshopApache Spark Workshop
Apache Spark Workshop
 
Improving Apache Spark Downscaling
 Improving Apache Spark Downscaling Improving Apache Spark Downscaling
Improving Apache Spark Downscaling
 
Tuning and Debugging in Apache Spark
Tuning and Debugging in Apache SparkTuning and Debugging in Apache Spark
Tuning and Debugging in Apache Spark
 
Tuning and Debugging in Apache Spark
Tuning and Debugging in Apache SparkTuning and Debugging in Apache Spark
Tuning and Debugging in Apache Spark
 
Debugging & Tuning in Spark
Debugging & Tuning in SparkDebugging & Tuning in Spark
Debugging & Tuning in Spark
 
11. From Hadoop to Spark 2/2
11. From Hadoop to Spark 2/211. From Hadoop to Spark 2/2
11. From Hadoop to Spark 2/2
 
Big Data processing with Apache Spark
Big Data processing with Apache SparkBig Data processing with Apache Spark
Big Data processing with Apache Spark
 
SE2016 BigData Vitalii Bondarenko "HD insight spark. Advanced in-memory Big D...
SE2016 BigData Vitalii Bondarenko "HD insight spark. Advanced in-memory Big D...SE2016 BigData Vitalii Bondarenko "HD insight spark. Advanced in-memory Big D...
SE2016 BigData Vitalii Bondarenko "HD insight spark. Advanced in-memory Big D...
 
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
 

Recently uploaded

Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
amitlee9823
 
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get CytotecAbortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Riyadh +966572737505 get cytotec
 
Schema on read is obsolete. Welcome metaprogramming..pdf
Schema on read is obsolete. Welcome metaprogramming..pdfSchema on read is obsolete. Welcome metaprogramming..pdf
Schema on read is obsolete. Welcome metaprogramming..pdf
Lars Albertsson
 
Vip Model Call Girls (Delhi) Karol Bagh 9711199171✔️Body to body massage wit...
Vip Model  Call Girls (Delhi) Karol Bagh 9711199171✔️Body to body massage wit...Vip Model  Call Girls (Delhi) Karol Bagh 9711199171✔️Body to body massage wit...
Vip Model Call Girls (Delhi) Karol Bagh 9711199171✔️Body to body massage wit...
shivangimorya083
 
Delhi Call Girls CP 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls CP 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls CP 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls CP 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
shivangimorya083
 
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
shivangimorya083
 
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al BarshaAl Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
AroojKhan71
 
Delhi 99530 vip 56974 Genuine Escort Service Call Girls in Kishangarh
Delhi 99530 vip 56974 Genuine Escort Service Call Girls in  KishangarhDelhi 99530 vip 56974 Genuine Escort Service Call Girls in  Kishangarh
Delhi 99530 vip 56974 Genuine Escort Service Call Girls in Kishangarh
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
amitlee9823
 
Determinants of health, dimensions of health, positive health and spectrum of...
Determinants of health, dimensions of health, positive health and spectrum of...Determinants of health, dimensions of health, positive health and spectrum of...
Determinants of health, dimensions of health, positive health and spectrum of...
shambhavirathore45
 
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
amitlee9823
 

Recently uploaded (20)

Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
 
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get CytotecAbortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
 
Call Girls in Sarai Kale Khan Delhi 💯 Call Us 🔝9205541914 🔝( Delhi) Escorts S...
Call Girls in Sarai Kale Khan Delhi 💯 Call Us 🔝9205541914 🔝( Delhi) Escorts S...Call Girls in Sarai Kale Khan Delhi 💯 Call Us 🔝9205541914 🔝( Delhi) Escorts S...
Call Girls in Sarai Kale Khan Delhi 💯 Call Us 🔝9205541914 🔝( Delhi) Escorts S...
 
Schema on read is obsolete. Welcome metaprogramming..pdf
Schema on read is obsolete. Welcome metaprogramming..pdfSchema on read is obsolete. Welcome metaprogramming..pdf
Schema on read is obsolete. Welcome metaprogramming..pdf
 
Vip Model Call Girls (Delhi) Karol Bagh 9711199171✔️Body to body massage wit...
Vip Model  Call Girls (Delhi) Karol Bagh 9711199171✔️Body to body massage wit...Vip Model  Call Girls (Delhi) Karol Bagh 9711199171✔️Body to body massage wit...
Vip Model Call Girls (Delhi) Karol Bagh 9711199171✔️Body to body massage wit...
 
Delhi Call Girls CP 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls CP 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls CP 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls CP 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
 
Edukaciniai dropshipping via API with DroFx
Edukaciniai dropshipping via API with DroFxEdukaciniai dropshipping via API with DroFx
Edukaciniai dropshipping via API with DroFx
 
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
 
Ravak dropshipping via API with DroFx.pptx
Ravak dropshipping via API with DroFx.pptxRavak dropshipping via API with DroFx.pptx
Ravak dropshipping via API with DroFx.pptx
 
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al BarshaAl Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
 
Introduction-to-Machine-Learning (1).pptx
Introduction-to-Machine-Learning (1).pptxIntroduction-to-Machine-Learning (1).pptx
Introduction-to-Machine-Learning (1).pptx
 
Delhi 99530 vip 56974 Genuine Escort Service Call Girls in Kishangarh
Delhi 99530 vip 56974 Genuine Escort Service Call Girls in  KishangarhDelhi 99530 vip 56974 Genuine Escort Service Call Girls in  Kishangarh
Delhi 99530 vip 56974 Genuine Escort Service Call Girls in Kishangarh
 
BPAC WITH UFSBI GENERAL PRESENTATION 18_05_2017-1.pptx
BPAC WITH UFSBI GENERAL PRESENTATION 18_05_2017-1.pptxBPAC WITH UFSBI GENERAL PRESENTATION 18_05_2017-1.pptx
BPAC WITH UFSBI GENERAL PRESENTATION 18_05_2017-1.pptx
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
 
Determinants of health, dimensions of health, positive health and spectrum of...
Determinants of health, dimensions of health, positive health and spectrum of...Determinants of health, dimensions of health, positive health and spectrum of...
Determinants of health, dimensions of health, positive health and spectrum of...
 
Call me @ 9892124323 Cheap Rate Call Girls in Vashi with Real Photo 100% Secure
Call me @ 9892124323  Cheap Rate Call Girls in Vashi with Real Photo 100% SecureCall me @ 9892124323  Cheap Rate Call Girls in Vashi with Real Photo 100% Secure
Call me @ 9892124323 Cheap Rate Call Girls in Vashi with Real Photo 100% Secure
 
Accredited-Transport-Cooperatives-Jan-2021-Web.pdf
Accredited-Transport-Cooperatives-Jan-2021-Web.pdfAccredited-Transport-Cooperatives-Jan-2021-Web.pdf
Accredited-Transport-Cooperatives-Jan-2021-Web.pdf
 
Week-01-2.ppt BBB human Computer interaction
Week-01-2.ppt BBB human Computer interactionWeek-01-2.ppt BBB human Computer interaction
Week-01-2.ppt BBB human Computer interaction
 
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
 
Data-Analysis for Chicago Crime Data 2023
Data-Analysis for Chicago Crime Data  2023Data-Analysis for Chicago Crime Data  2023
Data-Analysis for Chicago Crime Data 2023
 

Apache Spark in Depth: Core Concepts, Architecture & Internals

  • 1. Apache Spark in Depth core concepts, architecture & internals Anton Kirillov Ooyala, Mar 2016
  • 2. Roadmap ● RDDs ○ Definition ○ Operations ● Execution workflow ○ DAG ○ Stages and tasks ○ Shuffle ● Architecture ○ Components ○ Memory model ● Coding ○ spark-shell ○ building and submitting Spark applications to YARN
  • 3. Meet Spark ● Generalized framework for distributed data processing (batch, graph, ML) ● Scala collections functional API for manipulating data at scale ● In-memory data caching and reuse across computations ● Applies set of coarse-grained transformations over partitioned data ● Failure recovery relies on lineage to recompute failed tasks ● Supports majority of input formats and integrates with Mesos / YARN
  • 4. Spark makes data engineers happy Backup/restore of Cassandra tables in Parquet def backup(config: Config) { sc.cassandraTable(config.keyspace, config.table).map(_.toEvent).toDF() .write.parquet(config.path) } def restore(config: Config) { sqlContext.read.parquet(config.path) .map(_.toEvent).saveToCassandra(config.keyspace, config.table) } Query different data sources to identify discrepancies sqlContext.sql { """ SELECT count() FROM cassandra_event_rollups JOIN mongo_event_rollups ON cassandra_event_rollups.uuid = cassandra_event_rollups.uuid WHERE cassandra_event_rollups.value != cassandra_event_rollups.value """.stripMargin }
  • 6. RDD: Resilient Distributed Dataset ● A fault-tolerant, immutable, parallel data structure ● Provides API for ○ manipulating the collection of elements (transformations and materialization) ○ persisting intermediate results in memory for later reuse ○ controlling partitioning to optimize data placement ● Can be created through deterministic operation ○ from storage (distributed file system, database, plain file) ○ from another RDD ● Stores information about parent RDDs ○ for execution optimization and operations pipelining ○ to recompute the data in case of failure
  • 7. RDD: a developer’s view ● Distributed immutable data + lazily evaluated operations ○ partitioned data + iterator ○ transformations & actions ● An interface defining 5 main properties a list of partitions (e.g. splits in Hadoop) def getPartitions: Array[Partition] a list of dependencies on other RDDs def getDependencies: Seq[Dependency[_]] a function for computing each split def compute(split: Partition, context: TaskContext): Iterator[T] (optional) a list of preferred locations to compute each split on def getPreferredLocations(split: Partition): Seq[String] = Nil (optional) a partitioner for key-value RDDs val partitioner: Option[Partitioner] = None lineage execution optimization
  • 8. RDDs Example ● HadoopRDD ○ getPartitions = HDFS blocks ○ getDependencies = None ○ compute = load block in memory ○ getPrefferedLocations = HDFS block locations ○ partitioner = None ● MapPartitionsRDD ○ getPartitions = same as parent ○ getDependencies = parent RDD ○ compute = compute parent and apply map() ○ getPrefferedLocations = same as parent ○ partitioner = None sparkContext.textFile("hdfs://...")
  • 9. RDD Operations ● Transformations ○ apply user function to every element in a partition (or to the whole partition) ○ apply aggregation function to the whole dataset (groupBy, sortBy) ○ introduce dependencies between RDDs to form DAG ○ provide functionality for repartitioning (repartition, partitionBy) ● Actions ○ trigger job execution ○ used to materialize computation results ● Extra: persistence ○ explicitly store RDDs in memory, on disk or off-heap (cache, persist) ○ checkpointing for truncating RDD lineage
  • 10. Execution workflow 10 rdd1.join(rdd2) .groupBy(...) .filter(...) splits graph into stages of tasks submits each stage as ready launches tasks via cluster manager retries failed or struggling tasks executes tasks stores and serves blocks
  • 11. Code sample: joining aggregated and raw data //aggregate events after specific date for given campaign val events = sc.cassandraTable("demo", "event") .map(_.toEvent) .filter(event => event.campaignId == campaignId && event.time.isAfter(watermark)) .keyBy(_.eventType) .reduceByKey(_ + _) .cache() //aggregate campaigns by type val campaigns = sc.cassandraTable("demo", "campaign") .map(_.toCampaign) .filter(campaign => campaign.id == campaignId && campaign.time.isBefore(watermark)) .keyBy(_.eventType) .reduceByKey(_ + _) .cache() //joined rollups and raw events val joinedTotals = campaigns.join(events) .map { case (key, (campaign, event)) => CampaignTotals(campaign, event) } .collect() //count totals separately val eventTotals = events.map{ case (t, e) => s"$t -> ${e.value}" }.collect() val campaignTotals = campaigns.map{ case (t, e) => s"$t -> ${e.value}" }.collect()
  • 12. DAG
  • 13. Dependency types ● Narrow (pipelineable) ○ each partition of the parent RDD is used by at most one partition of the child RDD ○ allow for pipelined execution on one cluster node ○ failure recovery is more efficient as only lost parent partitions need to be recomputed ● Wide (shuffle) ○ multiple child partitions may depend on one parent partition ○ require data from all parent partitions to be available and to be shuffled across the nodes ○ if some partition is lost from all the ancestors a complete recomputation is needed
  • 14. Stages and Tasks ● Stages breakdown strategy ○ check backwards from final RDD ○ add each “narrow” dependency to the current stage ○ create new stage when there’s a shuffle dependency ● Tasks ○ ShuffleMapTask partitions its input for shuffle ○ ResultTask sends its output to the driver
  • 15. Shuffle ● Shuffle Write ○ redistributes data among partitions and writes files to disk ○ each hash shuffle task creates one file per “reduce” task (total = MxR) ○ sort shuffle task creates one file with regions assigned to reducer ○ sort shuffle uses in-memory sorting with spillover to disk to get final result ● Shuffle Read ○ fetches the files and applies reduce() logic ○ if data ordering is needed then it is sorted on “reducer” side for any type of shuffle (SPARK-2926)
  • 16. Sort Shuffle ● Incoming records accumulated and sorted in memory according their target partition ids ● Sorted records are written to file or multiple files if spilled and then merged ● index file stores offsets of the data blocks in the data file ● Sorting without deserialization is possible under certain conditions (SPARK-7081)
  • 17. Architecture Recap ● Spark Driver ○ separate process to execute user applications ○ creates SparkContext to schedule jobs execution and negotiate with cluster manager ● Executors ○ run tasks scheduled by driver ○ store computation results in memory, on disk or off-heap ○ interact with storage systems ● Cluster Manager ○ Mesos ○ YARN ○ Spark Standalone
  • 19. Spark Components ● SparkContext ○ represents the connection to a Spark cluster, and can be used to create RDDs, accumulators and broadcast variables on that cluster ● DAGScheduler ○ computes a DAG of stages for each job and submits them to TaskScheduler ○ determines preferred locations for tasks (based on cache status or shuffle files locations) and finds minimum schedule to run the jobs ● TaskScheduler ○ responsible for sending tasks to the cluster, running them, retrying if there are failures, and mitigating stragglers ● SchedulerBackend ○ backend interface for scheduling systems that allows plugging in different implementations(Mesos, YARN, Standalone, local) ● BlockManager ○ provides interfaces for putting and retrieving blocks both locally and remotely into various stores (memory, disk, and off-heap)
  • 20. Memory Management in Spark 1.6 ● Execution Memory ○ storage for data needed during tasks execution ○ shuffle-related data ● Storage Memory ○ storage of cached RDDs and broadcast variables ○ possible to borrow from execution memory (spill otherwise) ○ safeguard value is 0.5 of Spark Memory when cached blocks are immune to eviction ● User Memory ○ user data structures and internal metadata in Spark ○ safeguarding against OOM ● Reserved memory ○ memory needed for running executor itself and not strictly related to Spark
  • 21. Workshop code available @ github.com/datastrophic/spark-workshop
  • 22. Execution Modes ● spark-shell --master [ local | spark | yarn-client | mesos] ○ launches REPL connected to specified cluster manager ○ always runs in client mode ● spark-submit --master [ local | spark:// | mesos:// | yarn ] spark-job.jar ○ launches assembly jar on the cluster ● Masters ○ local[k] - run Spark locally with K worker threads ○ spark - launches driver app on Spark Standalone installation ○ mesos - driver will spawn executors on Mesos cluster (deploy-mode: client | cluster) ○ yarn - same idea as with Mesos (deploy-mode: client | cluster) ● Deploy Modes ○ client - driver executed as a separate process on the machine where it has been launched and spawns executors ○ cluster - driver launched as a container using underlying cluster manager
  • 23. Invocation examples spark-shell --master yarn --deploy-mode client --executor-cores 1 --num-executors 2 --jars /target/spark-workshop.jar --conf spark.cassandra.connection.host=cassandra spark-submit --class io.datastrophic.spark.workshop.ParametrizedApplicationExample --master yarn --deploy-mode cluster --num-executors 2 --driver-memory 1g --executor-memory 1g /target/spark-workshop.jar --cassandra-host cassandra --keyspace demo --table event --target-dir /workshop/dumps
  • 24. Live Demo ● spark-shell ● Spark UI ● creating an app with Typesafe Activator ● Spark SQL and DataFrames API ● coding
  • 25. Coding ideas ● get familiar with API through sample project ○ join data from different storage systems ○ aggregate data with breakdown by date ● play with caching and persistence ● check out join behavior applying different partitioning ● familiarize with Spark UI ● experiment with new DataSet API (since 1.6) ● [ your awesome idea here ]