Advanced Data Science on Spark
Transcript of Advanced Data Science on Spark
![Page 1: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/1.jpg)
Reza Zadeh
Advanced Data Science on Spark
@Reza_Zadeh | http://reza-zadeh.com
![Page 2: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/2.jpg)
Data Science Problem Data growing faster than processing speeds Only solution is to parallelize on large clusters » Wide use in both enterprises and web industry
How do we program these things?
![Page 3: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/3.jpg)
Use a Cluster
Convex Optimization
Matrix Factorization
Machine Learning
Numerical Linear Algebra
Large Graph analysis
Streaming and online algorithms
Following lectures on http://stanford.edu/~rezab/dao
Slides at http://stanford.edu/~rezab/slides/sparksummit2015
![Page 4: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/4.jpg)
Outline Data Flow Engines and Spark The Three Dimensions of Machine Learning Built-in Libraries
MLlib + {Streaming, GraphX, SQL} Future of MLlib
![Page 5: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/5.jpg)
Traditional Network Programming
Message-passing between nodes (e.g. MPI) Very difficult to do at scale: » How to split problem across nodes?
• Must consider network & data locality » How to deal with failures? (inevitable at scale) » Even worse: stragglers (node not failed, but slow) » Ethernet networking not fast » Have to write programs for each machine
Rarely used in commodity datacenters
![Page 6: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/6.jpg)
Disk vs Memory L1 cache reference: 0.5 ns
L2 cache reference: 7 ns
Mutex lock/unlock: 100 ns
Main memory reference: 100 ns
Disk seek: 10,000,000 ns
![Page 7: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/7.jpg)
Network vs Local Send 2K bytes over 1 Gbps network: 20,000 ns
Read 1 MB sequentially from memory: 250,000 ns
Round trip within same datacenter: 500,000 ns
Read 1 MB sequentially from network: 10,000,000 ns
Read 1 MB sequentially from disk: 30,000,000 ns
Send packet CA->Netherlands->CA: 150,000,000 ns
![Page 8: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/8.jpg)
Data Flow Models Restrict the programming interface so that the system can do more automatically Express jobs as graphs of high-level operators » System picks how to split each operator into tasks
and where to run each task » Run parts twice fault recovery
Biggest example: MapReduce Map
Map
Map
Reduce
Reduce
![Page 9: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/9.jpg)
iter. 1 iter. 2 . . .
Input
file system"read
file system"write
file system"read
file system"write
Input
query 1
query 2
query 3
result 1
result 2
result 3
. . .
file system"read
Commonly spend 90% of time doing I/O
Example: Iterative Apps
![Page 10: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/10.jpg)
MapReduce evolved MapReduce is great at one-pass computation, but inefficient for multi-pass algorithms No efficient primitives for data sharing » State between steps goes to distributed file system » Slow due to replication & disk storage
![Page 11: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/11.jpg)
Verdict MapReduce algorithms research doesn’t go to waste, it just gets sped up and easier to use
Still useful to study as an algorithmic framework, silly to use directly
![Page 12: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/12.jpg)
Spark Computing Engine Extends a programming language with a distributed collection data-structure » “Resilient distributed datasets” (RDD)
Open source at Apache » Most active community in big data, with 50+
companies contributing
Clean APIs in Java, Scala, Python Community: SparkR, being released in 1.4!
![Page 13: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/13.jpg)
Key Idea Resilient Distributed Datasets (RDDs) » Collections of objects across a cluster with user
controlled partitioning & storage (memory, disk, ...) » Built via parallel transformations (map, filter, …) » The world only lets you make make RDDs such that
they can be:
Automatically rebuilt on failure
![Page 14: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/14.jpg)
Resilient Distributed Datasets (RDDs)
Main idea: Resilient Distributed Datasets » Immutable collections of objects, spread across cluster » Statically typed: RDD[T] has objects of type T
val sc = new SparkContext()!val lines = sc.textFile("log.txt") // RDD[String]!!// Transform using standard collection operations !val errors = lines.filter(_.startsWith("ERROR")) !val messages = errors.map(_.split(‘\t’)(2)) !!messages.saveAsTextFile("errors.txt") !
lazily evaluated
kicks off a computation
![Page 15: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/15.jpg)
Fault Tolerance
file.map(lambda rec: (rec.type, 1)) .reduceByKey(lambda x, y: x + y) .filter(lambda (type, count): count > 10)
filter reduce map
Inpu
t file
RDDs track lineage info to rebuild lost data
![Page 16: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/16.jpg)
filter reduce map
Inpu
t file
Fault Tolerance
file.map(lambda rec: (rec.type, 1)) .reduceByKey(lambda x, y: x + y) .filter(lambda (type, count): count > 10)
RDDs track lineage info to rebuild lost data
![Page 17: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/17.jpg)
Partitioning
file.map(lambda rec: (rec.type, 1)) .reduceByKey(lambda x, y: x + y) .filter(lambda (type, count): count > 10)
filter reduce map
Inpu
t file
RDDs know their partitioning functions
Known to be"hash-partitioned
Also known
![Page 18: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/18.jpg)
MLlib: Available algorithms classification: logistic regression, linear SVM,"naïve Bayes, least squares, classification tree regression: generalized linear models (GLMs), regression tree collaborative filtering: alternating least squares (ALS), non-negative matrix factorization (NMF) clustering: k-means|| decomposition: SVD, PCA optimization: stochastic gradient descent, L-BFGS
![Page 19: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/19.jpg)
The Three Dimensions
![Page 20: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/20.jpg)
ML Objectives
Almost all machine learning objectives are optimized using this update
w is a vector of dimension d"we’re trying to find the best w via optimization
![Page 21: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/21.jpg)
Scaling 1) Data size 2) Number of models
3) Model size
![Page 22: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/22.jpg)
Logistic Regression Goal: find best line separating two sets of points
+
–
+ + +
+
+
+ + +
– – –
–
–
– – –
+
target
–
random initial line
![Page 23: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/23.jpg)
Data Scaling data = spark.textFile(...).map(readPoint).cache() w = numpy.random.rand(D) for i in range(iterations): gradient = data.map(lambda p: (1 / (1 + exp(-‐p.y * w.dot(p.x)))) * p.y * p.x ).reduce(lambda a, b: a + b) w -‐= gradient print “Final w: %s” % w
![Page 24: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/24.jpg)
Separable Updates Can be generalized for » Unconstrained optimization » Smooth or non-smooth
» LBFGS, Conjugate Gradient, Accelerated Gradient methods, …
![Page 25: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/25.jpg)
Logistic Regression Results
0 500
1000 1500 2000 2500 3000 3500 4000
1 5 10 20 30
Runn
ing T
ime
(s)
Number of Iterations
Hadoop Spark
110 s / iteration
first iteration 80 s further iterations 1 s
100 GB of data on 50 m1.xlarge EC2 machines
![Page 26: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/26.jpg)
Behavior with Less RAM 68
.8
58.1
40.7
29.7
11.5
0
20
40
60
80
100
0% 25% 50% 75% 100%
Itera
tion
time
(s)
% of working set in memory
![Page 27: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/27.jpg)
Lots of little models Is embarrassingly parallel Most of the work should be handled by data flow paradigm
ML pipelines does this
![Page 28: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/28.jpg)
Hyper-parameter Tuning
![Page 29: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/29.jpg)
Model Scaling Linear models only need to compute the dot product of each example with model
Use a BlockMatrix to store data, use joins to compute dot products
Coming in 1.5
![Page 30: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/30.jpg)
Model Scaling Data joined with model (weight):
![Page 31: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/31.jpg)
Built-in libraries
![Page 32: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/32.jpg)
A General Platform
Spark Core
Spark Streaming"
real-time
Spark SQL structured
GraphX graph
MLlib machine learning
…
Standard libraries included with Spark
![Page 33: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/33.jpg)
Benefit for Users Same engine performs data extraction, model training and interactive queries
… DFS read
DFS write pa
rse DFS read
DFS write tra
in DFS read
DFS write qu
ery
DFS
DFS read pa
rse
train
quer
y
Separate engines
Spark
![Page 34: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/34.jpg)
Machine Learning Library (MLlib)
70+ contributors in past year
points = context.sql(“select latitude, longitude from tweets”) !
model = KMeans.train(points, 10) !!
![Page 35: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/35.jpg)
MLlib algorithms classification: logistic regression, linear SVM,"naïve Bayes, classification tree regression: generalized linear models (GLMs), regression tree collaborative filtering: alternating least squares (ALS), non-negative matrix factorization (NMF) clustering: k-means|| decomposition: SVD, PCA optimization: stochastic gradient descent, L-BFGS
![Page 36: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/36.jpg)
GraphX
![Page 37: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/37.jpg)
General graph processing library Build graph using RDDs of nodes and edges
Run standard algorithms such as PageRank
GraphX
![Page 38: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/38.jpg)
Spark Streaming Run a streaming computation as a series of very small, deterministic batch jobs
Spark
Spark Streaming
batches of X seconds
live data stream
processed results
• Chop up the live stream into batches of X seconds
• Spark treats each batch of data as RDDs and processes them using RDD opera;ons
• Finally, the processed results of the RDD opera;ons are returned in batches
![Page 39: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/39.jpg)
Spark Streaming Run a streaming computation as a series of very small, deterministic batch jobs
Spark
Spark Streaming
batches of X seconds
live data stream
processed results
• Batch sizes as low as ½ second, latency ~ 1 second
• Poten;al for combining batch processing and streaming processing in the same system
![Page 40: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/40.jpg)
Spark SQL // Run SQL statements !val teenagers = context.sql( ! "SELECT name FROM people WHERE age >= 13 AND age <= 19") !
!
// The results of SQL queries are RDDs of Row objects !val names = teenagers.map(t => "Name: " + t(0)).collect() !
![Page 41: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/41.jpg)
MLlib + {Streaming, GraphX, SQL}
![Page 42: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/42.jpg)
A General Platform
Spark Core
Spark Streaming"
real-time
Spark SQL structured
GraphX graph
MLlib machine learning
…
Standard libraries included with Spark
![Page 43: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/43.jpg)
MLlib + Streaming As of Spark 1.1, you can train linear models in a streaming fashion, k-means as of 1.2
Model weights are updated via SGD, thus amenable to streaming
More work needed for decision trees
![Page 44: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/44.jpg)
MLlib + SQL df = context.sql(“select latitude, longitude from tweets”) !
model = pipeline.fit(df) !
DataFrames in Spark 1.3! (March 2015) Powerful coupled with new pipeline API
![Page 45: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/45.jpg)
MLlib + GraphX
![Page 46: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/46.jpg)
Future of MLlib
![Page 47: Advanced Data Science on Spark](https://reader033.fdocuments.in/reader033/viewer/2022042611/58a1a9d51a28abd94d8c4633/html5/thumbnails/47.jpg)
Goals Tighter integration with DataFrame and spark.ml API
Accelerated gradient methods & Optimization interface
Model export: PMML (current export exists in Spark 1.3, but not PMML, which lacks distributed models)
Scaling: Model scaling