Interactive Analytics With 

Spark And Cassandra
!
Evan Chan

Ooyala, Inc.
April 7Th, 2014
• Staff Engineer, Compute and Data Services, Ooyala

• Building multiple web-scale real-time systems on top of
C*, Kafka, Storm, etc.

• Scala/Akka guy

• Very excited by open source, big data projects

• @evanfchan
Who is this guy?
!2
• Cassandra at Ooyala

• What problem are we trying to solve?

• Spark and Shark

• Integrating Cassandra and Spark

• Our Spark/Cassandra Architecture
Agenda
!3
CASSANDRA AT
OOYALA
!4
OOYALA
Powering personalized video
experiences across all
screens.
CONFIDENTIAL—DO NOT DISTRIBUTE !6CONFIDENTIAL—DO NOT DISTRIBUTE
Founded in 2007

Commercially launch in 2009

230+ employees in Silicon Valley, LA, NYC, 

London, Paris, Tokyo, Sydney & Guadalajara 

Global footprint, 200M unique users,
110+
countries, and more than 6,000 websites

Over 1 billion videos played per month 
and 2
billion analytic events per day

25% of U.S. online viewers watch video 

powered by Ooyala
COMPANY OVERVIEW
CONFIDENTIAL—DO NOT DISTRIBUTE !7
TRUSTED VIDEO PARTNER
STRATEGIC PARTNERS
CUSTOMERS
CONFIDENTIAL—DO NOT DISTRIBUTE
TITLE TEXT GOES HERE
• 12 clusters ranging in size from 3 to 107
nodes
• Total of 28TB of data managed over ~220
nodes
• Powers all of our analytics infrastructure
• Traditional analytics aggregations
• Recommendations and trends
• DSE/C* 1.0.x, 1.1.x, 1.2.6
We are a large Cassandra user
!8
TITLE TEXT GOES HERE
• Started investing in Spark beginning of 2013

• 2 teams of developers doing stuff with Spark

• Actively contributing to Spark developer community

• Deploying Spark to a large (>100 node) production
cluster

• Spark community very active, huge amount of interest
Becoming a big Spark user...
!9
WHAT PROBLEM ARE
WE TRYING TO SOLVE?
!10
From mountains of raw data...
• Quickly
• Painlessly
• At scale?

To nuggets of truth...
Today: Precomputed Aggregates
• Video metrics computed along several high cardinality dimensions
• Very fast lookups, but inflexible, and hard to change
• Most computed aggregates are never read
• What if we need more dynamic queries?
• Top content for mobile users in France
• Engagement curves for users who watched recommendations
• Data mining, trends, machine learning
The Static - Dynamic Continuum
• Super fast lookups
• Inflexible, wasteful
• Best for 80% most
common queries
• Always compute
results from raw data
• Flexible but slow
100% Precomputation 100% Dynamic
Where We Want To Be
Partly dynamic
• Pre-aggregate most
common queries
• Flexible, fast
dynamic queries
• Easily generate
many materialized
views
WHY SPARK?
!16
Introduction To Spark
• In-memory distributed computing framework
• Created by UC Berkeley AMP Lab in 2010
• Targeted problems that MR is bad at:
–Iterative algorithms (machine learning)
–Interactive data mining
• More general purpose than Hadoop MR
• Top level Apache project
• Active contributions from Intel, Yahoo, lots of
Spark Vs Hadoop
HDFS
Map
Reducee
Map
Reduce
Data	
  Source
map()
join()
Source	
  2
cache()
transform
Throughput: Memory Is King
6-node C*/DSE 1.1.9 cluster,

Spark 0.7.0
Spark cached RDD 10-50x faster than raw Cassandra
Developers Love It
• “I wrote my first aggregation job in 30
minutes”
• High level “distributed collections” API
• No Hadoop cruft
• Full power of Scala, Java, Python
• Interactive REPL shell
Spark Vs Hadoop Word Count
file = spark.textFile("hdfs://...")	
 	
file.flatMap(line => line.split(" "))	
    .map(word => (word, 1))	
    .reduceByKey(_ + _)	
1 package org.myorg;!
2 !
3 import java.io.IOException;!
4 import java.util.*;!
5 !
6 import org.apache.hadoop.fs.Path;!
7 import org.apache.hadoop.conf.*;!
8 import org.apache.hadoop.io.*;!
9 import org.apache.hadoop.mapreduce.*;!
10 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;!
11 import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;!
12 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;!
13 import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;!
14 !
15 public class WordCount {!
16 !
17 public static class Map extends Mapper<LongWritable, Text, Text, IntWritable>
{!
18 private final static IntWritable one = new IntWritable(1);!
19 private Text word = new Text();!
20 !
21 public void map(LongWritable key, Text value, Context context) throws
IOException, InterruptedException {!
22 String line = value.toString();!
23 StringTokenizer tokenizer = new StringTokenizer(line);!
24 while (tokenizer.hasMoreTokens()) {!
25 word.set(tokenizer.nextToken());!
26 context.write(word, one);!
27 }!
28 }!
29 } !
30 !
31 public static class Reduce extends Reducer<Text, IntWritable, Text,
IntWritable> {!
32 !
33 public void reduce(Text key, Iterable<IntWritable> values, Context context) !
34 throws IOException, InterruptedException {!
35 int sum = 0;!
36 for (IntWritable val : values) {!
37 sum += val.get();!
38 }!
39 context.write(key, new IntWritable(sum));!
40 }!
41 }!
42 !
43 public static void main(String[] args) throws Exception {!
44 Configuration conf = new Configuration();!
45 !
46 Job job = new Job(conf, "wordcount");!
47 !
48 job.setOutputKeyClass(Text.class);!
49 job.setOutputValueClass(IntWritable.class);!
50 !
51 job.setMapperClass(Map.class);!
52 job.setReducerClass(Reduce.class);!
53 !
54 job.setInputFormatClass(TextInputFormat.class);!
55 job.setOutputFormatClass(TextOutputFormat.class);!
56 !
57 FileInputFormat.addInputPath(job, new Path(args[0]));!
58 FileOutputFormat.setOutputPath(job, new Path(args[1]));!
59 !
60 job.waitForCompletion(true);!
61 }!
62 !
63 }!
One Platform To Rule Them All
HIVE on Spark
Spark Streaming -
discretized stream
processing
• SQL, Graph, ML, Streaming all in one
framework
• Much higher code sharing/reuse
• Easy integration between components
• Fewer platforms == lower TCO
• Integration with Mesos, YARN helps
share resources
Shark - Hive On Spark
• 100% HiveQL compatible
• 10-100x faster than HIVE, answers in seconds
• Reuse UDFs, SerDe’s, StorageHandlers
• Can use DSE / CassandraFS for Metastore
INTEGRATING
CASSANDRA & SPARK
!24
Our Spark/Shark/Cassandra Stack
Node1
Cassandra
InputFormat
SerDe
Spark
Worker
Shark
Node2
Cassandra
InputFormat
SerDe
Spark
Worker
Shark
Node3
Cassandra
InputFormat
SerDe
Spark
Worker
Shark
Spark Master Job Server
OPTIONS FOR READING FROM C*
• Hadoop InputFormat
– ColumnFamilyInputFormat - reads all rows from 1 CF
– CqlPagingInputFormat, etc. - CQL3, 2-dary indexes
– Roll your own (join multiple CFs, etc)
• Spark native RDD
– sc.parallelize(rowkeys).flatMap(readColum
ns(_))
– JdbcRdd + Cassandra JDBC driver
Columnfamilyinputformat
video type
Record1 10 1
Record2 11 5
id Video Type
Record1 10 1
Record2 11 5
• Must read from all rows
• One CF only, not very flexible
Node 2Node 1
Spark RDD
• RDD = Resilient Distributed Dataset
• Multiple partitions living on different
nodes
• Each partition has records
Partition 1 Partition 2 Partition 3 Partition 4
Inputformat Vs Rdd
InputFormat RDD
Supports Hadoop, HIVE, Spark,
Shark
Spark / Shark only
Have to implement multiple classes
- InputFormat, RecordReader,
Writeable, etc. Clunky API.
One class - simple API.
Two APIs, and often need to
implement both (HIVE needs older...)
Just one API.
• You can easily use InputFormats in
Spark using newAPIHadoopRDD().
• Writing a custom RDD could have
saved us lots of time.
Node 2Node 1
Skipping The Inputformat
Row 1 data Row 2 data Row 3 data Row 4 data
Rowkey1 Rowkey2 Rowkey3 Rowkey4
sc.parallelize(rowkeys).flatMap(readColumns(_))
OUR CASSANDRA /
SPARK ARCHITECTURE
!31
From Raw Logs To Fast Queries
Process
C*

columnar
storage
Raw Logs
Raw Logs
Raw Logs
Spark
Spark
Spark
OLAP Table
1
OLAP Table
2
OLAP Table
3
Spark
Shark
Predefined
queries
Ad-hoc
HiveQL
Why Cassandra Alone Isn’t Enough
• Over 30 million multi-dimensional
fact table rows per day
• Materializing every possible answer
isn’t close to possible
• Multi dimensional filtering and
grouping alone leads to many
billions of possible answers
• Querying fact tables in Cassandra is
too slow
• Reading millions or billion
random rows
• CQL doesn’t support grouping
Our Approach
• Use Cassandra to store the raw
fact tables
• Optimize the schema for OLAP
workloads
• Fast full table reads
• Easily read fewer columns
• Use Spark for fast random row
access and fast distributed
computation
uuid-
part-0
uuid-
part-1
2013-04-05T
00:00Z#id1
Section 0 Section 1 Section 2
country rows 0-9999 rows 10000-19999 rows ....
city rows 0-9999 rows 10000-19999 rows ....
Index CF
Columns CF
An OLAP Schema for Cassandra
Metadata
2013-04-05T
00:00-part-0
{columns:
[“country”,
“city”,
“plays” ]}
Metadata CF
•Optimized for: selective column loading, maximum throughput and compression
Olap Workflow
Dataset
Aggregation
Job
Query
Job
Spark

Executors
Cassandra
REST Job Server
Query
Job
Aggregate Query
Result
Query
Result
Querying Data In Spark
Node 2Node 1
Partition 1
!
record1
record2
record3

Partition 2
!
record4
record5
record6

Partition 3
!
record7
record8
record9
Partition 4
!
record10
record11
record12
Convert to Spark SQL /
Shark Table
Shark / Spark SQL
rdd.group / .map / .sort /
.join etc
rdd.reduce / .collect / .to
p
Fault Tolerance
• Cached dataset lives in Java Heap only - what if process
dies?
• Spark lineage - automatic recomputation from source, but
this is expensive!
• Can also replicate cached dataset to survive single node
failures
• Persist materialized views back to C*, then load into cache
-- now recovery path is much faster
DEMO
!39
Creating a Shark Table
Creating a Cached Table
Querying a Cached Table
THANK YOU
And YES, We’re HIRING!!
ooyala.com/careers
@evanfchan
Industry Trends
• Fast execution frameworks
• Impala
• In-memory databases
• VoltDB, Druid
• Streaming and real-time
• Higher-level, productive data
PERFORMANCE #’S
Spark: C* -> OLAP aggregates

cold cache, 1.4 million events
130 seconds
C* -> OLAP aggregates

warmed cache
20-30 seconds
OLAP aggregate query via
Spark

(56k records)
60 ms
6-node C*/DSE 1.1.9 cluster,

Spark 0.7.0
EXAMPLE: OLAP PROCESSING
t0
2013-0
4-05T0
0:00Z#i
{vide
o:
10,
2013-0
4-05T0
0:00Z#i
{vide
o:
20,
C* events
OLAP
Aggregates
OLAP
Aggregates
OLAP
Aggregates
Cached Materialized Views
Spark
Spark
Spark
Union
Query 1: Plays by
Provider
Query 2: Top content
for mobile

More Related Content

PDF
Lessons Learned: Using Spark and Microservices
PPTX
Kinesis and Spark Streaming - Advanced AWS Meetup - August 2014
PPTX
Event Detection Pipelines with Apache Kafka
PPTX
2016 Utah Cloud Summit: Big Data Architectural Patterns and Best Practices on...
PDF
Kafka spark cassandra webinar feb 16 2016
PPTX
Global Big Data Conference Sept 2014 AWS Kinesis Spark Streaming Approximatio...
PDF
Spark with Cassandra by Christopher Batey
PDF
Cassandra Day 2014: Interactive Analytics with Cassandra and Spark
Lessons Learned: Using Spark and Microservices
Kinesis and Spark Streaming - Advanced AWS Meetup - August 2014
Event Detection Pipelines with Apache Kafka
2016 Utah Cloud Summit: Big Data Architectural Patterns and Best Practices on...
Kafka spark cassandra webinar feb 16 2016
Global Big Data Conference Sept 2014 AWS Kinesis Spark Streaming Approximatio...
Spark with Cassandra by Christopher Batey
Cassandra Day 2014: Interactive Analytics with Cassandra and Spark

Similar to Cassandra Day SV 2014: Spark, Shark, and Apache Cassandra (20)

PDF
C* Summit 2013: Real-time Analytics using Cassandra, Spark and Shark by Evan ...
PDF
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
PDF
Kafka spark cassandra webinar feb 16 2016
PDF
Johnny Miller – Cassandra + Spark = Awesome- NoSQL matters Barcelona 2014
PDF
Munich March 2015 - Cassandra + Spark Overview
PDF
Manchester Hadoop Meetup: Spark Cassandra Integration
PDF
Reading Cassandra Meetup Feb 2015: Apache Spark
PDF
Lightning fast analytics with Spark and Cassandra
PDF
New Analytics Toolbox DevNexus 2015
PDF
A Cassandra + Solr + Spark Love Triangle Using DataStax Enterprise
PDF
Fast track to getting started with DSE Max @ ING
PDF
3 Dundee-Spark Overview for C* developers
PPTX
Unlocking Your Hadoop Data with Apache Spark and CDH5
PPTX
5 Ways to Use Spark to Enrich your Cassandra Environment
PDF
Beyond the Query: A Cassandra + Solr + Spark Love Triangle Using Datastax Ent...
PDF
xPatterns on Spark, Tachyon and Mesos - Bucharest meetup
PDF
Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...
PDF
Big data analytics with Spark & Cassandra
PDF
Cassandra and Spark, closing the gap between no sql and analytics codemotio...
PPTX
Intro to Spark development
C* Summit 2013: Real-time Analytics using Cassandra, Spark and Shark by Evan ...
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Kafka spark cassandra webinar feb 16 2016
Johnny Miller – Cassandra + Spark = Awesome- NoSQL matters Barcelona 2014
Munich March 2015 - Cassandra + Spark Overview
Manchester Hadoop Meetup: Spark Cassandra Integration
Reading Cassandra Meetup Feb 2015: Apache Spark
Lightning fast analytics with Spark and Cassandra
New Analytics Toolbox DevNexus 2015
A Cassandra + Solr + Spark Love Triangle Using DataStax Enterprise
Fast track to getting started with DSE Max @ ING
3 Dundee-Spark Overview for C* developers
Unlocking Your Hadoop Data with Apache Spark and CDH5
5 Ways to Use Spark to Enrich your Cassandra Environment
Beyond the Query: A Cassandra + Solr + Spark Love Triangle Using Datastax Ent...
xPatterns on Spark, Tachyon and Mesos - Bucharest meetup
Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...
Big data analytics with Spark & Cassandra
Cassandra and Spark, closing the gap between no sql and analytics codemotio...
Intro to Spark development
Ad

More from DataStax Academy (20)

PDF
Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
PPTX
Introduction to DataStax Enterprise Graph Database
PPTX
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
PPTX
Cassandra on Docker @ Walmart Labs
PDF
Cassandra 3.0 Data Modeling
PPTX
Cassandra Adoption on Cisco UCS & Open stack
PDF
Data Modeling for Apache Cassandra
PDF
Coursera Cassandra Driver
PDF
Production Ready Cassandra
PDF
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
PPTX
Cassandra @ Sony: The good, the bad, and the ugly part 1
PPTX
Cassandra @ Sony: The good, the bad, and the ugly part 2
PDF
Standing Up Your First Cluster
PDF
Real Time Analytics with Dse
PDF
Introduction to Data Modeling with Apache Cassandra
PDF
Cassandra Core Concepts
PPTX
Enabling Search in your Cassandra Application with DataStax Enterprise
PPTX
Bad Habits Die Hard
PDF
Advanced Data Modeling with Apache Cassandra
PDF
Advanced Cassandra
Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
Introduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Cassandra on Docker @ Walmart Labs
Cassandra 3.0 Data Modeling
Cassandra Adoption on Cisco UCS & Open stack
Data Modeling for Apache Cassandra
Coursera Cassandra Driver
Production Ready Cassandra
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 2
Standing Up Your First Cluster
Real Time Analytics with Dse
Introduction to Data Modeling with Apache Cassandra
Cassandra Core Concepts
Enabling Search in your Cassandra Application with DataStax Enterprise
Bad Habits Die Hard
Advanced Data Modeling with Apache Cassandra
Advanced Cassandra
Ad

Recently uploaded (20)

PDF
Transform-Quality-Engineering-with-AI-A-60-Day-Blueprint-for-Digital-Success.pdf
PDF
Early detection and classification of bone marrow changes in lumbar vertebrae...
PDF
Transform-Your-Streaming-Platform-with-AI-Driven-Quality-Engineering.pdf
PPTX
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
PDF
giants, standing on the shoulders of - by Daniel Stenberg
PDF
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
PPTX
Microsoft Excel 365/2024 Beginner's training
PPTX
Custom Battery Pack Design Considerations for Performance and Safety
PPTX
Training Program for knowledge in solar cell and solar industry
PDF
5-Ways-AI-is-Revolutionizing-Telecom-Quality-Engineering.pdf
PPTX
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
PDF
Enhancing plagiarism detection using data pre-processing and machine learning...
PDF
UiPath Agentic Automation session 1: RPA to Agents
PDF
Dell Pro Micro: Speed customer interactions, patient processing, and learning...
PDF
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
PPTX
AI IN MARKETING- PRESENTED BY ANWAR KABIR 1st June 2025.pptx
PDF
Consumable AI The What, Why & How for Small Teams.pdf
PDF
Comparative analysis of machine learning models for fake news detection in so...
PPTX
Build Your First AI Agent with UiPath.pptx
PDF
Improvisation in detection of pomegranate leaf disease using transfer learni...
Transform-Quality-Engineering-with-AI-A-60-Day-Blueprint-for-Digital-Success.pdf
Early detection and classification of bone marrow changes in lumbar vertebrae...
Transform-Your-Streaming-Platform-with-AI-Driven-Quality-Engineering.pdf
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
giants, standing on the shoulders of - by Daniel Stenberg
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
Microsoft Excel 365/2024 Beginner's training
Custom Battery Pack Design Considerations for Performance and Safety
Training Program for knowledge in solar cell and solar industry
5-Ways-AI-is-Revolutionizing-Telecom-Quality-Engineering.pdf
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
Enhancing plagiarism detection using data pre-processing and machine learning...
UiPath Agentic Automation session 1: RPA to Agents
Dell Pro Micro: Speed customer interactions, patient processing, and learning...
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
AI IN MARKETING- PRESENTED BY ANWAR KABIR 1st June 2025.pptx
Consumable AI The What, Why & How for Small Teams.pdf
Comparative analysis of machine learning models for fake news detection in so...
Build Your First AI Agent with UiPath.pptx
Improvisation in detection of pomegranate leaf disease using transfer learni...

Cassandra Day SV 2014: Spark, Shark, and Apache Cassandra

  • 1. Interactive Analytics With 
 Spark And Cassandra ! Evan Chan
 Ooyala, Inc. April 7Th, 2014
  • 2. • Staff Engineer, Compute and Data Services, Ooyala • Building multiple web-scale real-time systems on top of C*, Kafka, Storm, etc. • Scala/Akka guy • Very excited by open source, big data projects • @evanfchan Who is this guy? !2
  • 3. • Cassandra at Ooyala • What problem are we trying to solve? • Spark and Shark • Integrating Cassandra and Spark • Our Spark/Cassandra Architecture Agenda !3
  • 6. CONFIDENTIAL—DO NOT DISTRIBUTE !6CONFIDENTIAL—DO NOT DISTRIBUTE Founded in 2007 Commercially launch in 2009 230+ employees in Silicon Valley, LA, NYC, 
 London, Paris, Tokyo, Sydney & Guadalajara Global footprint, 200M unique users,
110+ countries, and more than 6,000 websites Over 1 billion videos played per month 
and 2 billion analytic events per day 25% of U.S. online viewers watch video 
 powered by Ooyala COMPANY OVERVIEW
  • 7. CONFIDENTIAL—DO NOT DISTRIBUTE !7 TRUSTED VIDEO PARTNER STRATEGIC PARTNERS CUSTOMERS CONFIDENTIAL—DO NOT DISTRIBUTE
  • 8. TITLE TEXT GOES HERE • 12 clusters ranging in size from 3 to 107 nodes • Total of 28TB of data managed over ~220 nodes • Powers all of our analytics infrastructure • Traditional analytics aggregations • Recommendations and trends • DSE/C* 1.0.x, 1.1.x, 1.2.6 We are a large Cassandra user !8
  • 9. TITLE TEXT GOES HERE • Started investing in Spark beginning of 2013 • 2 teams of developers doing stuff with Spark • Actively contributing to Spark developer community • Deploying Spark to a large (>100 node) production cluster • Spark community very active, huge amount of interest Becoming a big Spark user... !9
  • 10. WHAT PROBLEM ARE WE TRYING TO SOLVE? !10
  • 11. From mountains of raw data...
  • 12. • Quickly • Painlessly • At scale?
 To nuggets of truth...
  • 13. Today: Precomputed Aggregates • Video metrics computed along several high cardinality dimensions • Very fast lookups, but inflexible, and hard to change • Most computed aggregates are never read • What if we need more dynamic queries? • Top content for mobile users in France • Engagement curves for users who watched recommendations • Data mining, trends, machine learning
  • 14. The Static - Dynamic Continuum • Super fast lookups • Inflexible, wasteful • Best for 80% most common queries • Always compute results from raw data • Flexible but slow 100% Precomputation 100% Dynamic
  • 15. Where We Want To Be Partly dynamic • Pre-aggregate most common queries • Flexible, fast dynamic queries • Easily generate many materialized views
  • 17. Introduction To Spark • In-memory distributed computing framework • Created by UC Berkeley AMP Lab in 2010 • Targeted problems that MR is bad at: –Iterative algorithms (machine learning) –Interactive data mining • More general purpose than Hadoop MR • Top level Apache project • Active contributions from Intel, Yahoo, lots of
  • 18. Spark Vs Hadoop HDFS Map Reducee Map Reduce Data  Source map() join() Source  2 cache() transform
  • 19. Throughput: Memory Is King 6-node C*/DSE 1.1.9 cluster,
 Spark 0.7.0 Spark cached RDD 10-50x faster than raw Cassandra
  • 20. Developers Love It • “I wrote my first aggregation job in 30 minutes” • High level “distributed collections” API • No Hadoop cruft • Full power of Scala, Java, Python • Interactive REPL shell
  • 21. Spark Vs Hadoop Word Count file = spark.textFile("hdfs://...")   file.flatMap(line => line.split(" "))     .map(word => (word, 1))     .reduceByKey(_ + _) 1 package org.myorg;! 2 ! 3 import java.io.IOException;! 4 import java.util.*;! 5 ! 6 import org.apache.hadoop.fs.Path;! 7 import org.apache.hadoop.conf.*;! 8 import org.apache.hadoop.io.*;! 9 import org.apache.hadoop.mapreduce.*;! 10 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;! 11 import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;! 12 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;! 13 import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;! 14 ! 15 public class WordCount {! 16 ! 17 public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {! 18 private final static IntWritable one = new IntWritable(1);! 19 private Text word = new Text();! 20 ! 21 public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {! 22 String line = value.toString();! 23 StringTokenizer tokenizer = new StringTokenizer(line);! 24 while (tokenizer.hasMoreTokens()) {! 25 word.set(tokenizer.nextToken());! 26 context.write(word, one);! 27 }! 28 }! 29 } ! 30 ! 31 public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {! 32 ! 33 public void reduce(Text key, Iterable<IntWritable> values, Context context) ! 34 throws IOException, InterruptedException {! 35 int sum = 0;! 36 for (IntWritable val : values) {! 37 sum += val.get();! 38 }! 39 context.write(key, new IntWritable(sum));! 40 }! 41 }! 42 ! 43 public static void main(String[] args) throws Exception {! 44 Configuration conf = new Configuration();! 45 ! 46 Job job = new Job(conf, "wordcount");! 47 ! 48 job.setOutputKeyClass(Text.class);! 49 job.setOutputValueClass(IntWritable.class);! 50 ! 51 job.setMapperClass(Map.class);! 52 job.setReducerClass(Reduce.class);! 53 ! 54 job.setInputFormatClass(TextInputFormat.class);! 55 job.setOutputFormatClass(TextOutputFormat.class);! 56 ! 57 FileInputFormat.addInputPath(job, new Path(args[0]));! 58 FileOutputFormat.setOutputPath(job, new Path(args[1]));! 59 ! 60 job.waitForCompletion(true);! 61 }! 62 ! 63 }!
  • 22. One Platform To Rule Them All HIVE on Spark Spark Streaming - discretized stream processing • SQL, Graph, ML, Streaming all in one framework • Much higher code sharing/reuse • Easy integration between components • Fewer platforms == lower TCO • Integration with Mesos, YARN helps share resources
  • 23. Shark - Hive On Spark • 100% HiveQL compatible • 10-100x faster than HIVE, answers in seconds • Reuse UDFs, SerDe’s, StorageHandlers • Can use DSE / CassandraFS for Metastore
  • 26. OPTIONS FOR READING FROM C* • Hadoop InputFormat – ColumnFamilyInputFormat - reads all rows from 1 CF – CqlPagingInputFormat, etc. - CQL3, 2-dary indexes – Roll your own (join multiple CFs, etc) • Spark native RDD – sc.parallelize(rowkeys).flatMap(readColum ns(_)) – JdbcRdd + Cassandra JDBC driver
  • 27. Columnfamilyinputformat video type Record1 10 1 Record2 11 5 id Video Type Record1 10 1 Record2 11 5 • Must read from all rows • One CF only, not very flexible
  • 28. Node 2Node 1 Spark RDD • RDD = Resilient Distributed Dataset • Multiple partitions living on different nodes • Each partition has records Partition 1 Partition 2 Partition 3 Partition 4
  • 29. Inputformat Vs Rdd InputFormat RDD Supports Hadoop, HIVE, Spark, Shark Spark / Shark only Have to implement multiple classes - InputFormat, RecordReader, Writeable, etc. Clunky API. One class - simple API. Two APIs, and often need to implement both (HIVE needs older...) Just one API. • You can easily use InputFormats in Spark using newAPIHadoopRDD(). • Writing a custom RDD could have saved us lots of time.
  • 30. Node 2Node 1 Skipping The Inputformat Row 1 data Row 2 data Row 3 data Row 4 data Rowkey1 Rowkey2 Rowkey3 Rowkey4 sc.parallelize(rowkeys).flatMap(readColumns(_))
  • 31. OUR CASSANDRA / SPARK ARCHITECTURE !31
  • 32. From Raw Logs To Fast Queries Process C*
 columnar storage Raw Logs Raw Logs Raw Logs Spark Spark Spark OLAP Table 1 OLAP Table 2 OLAP Table 3 Spark Shark Predefined queries Ad-hoc HiveQL
  • 33. Why Cassandra Alone Isn’t Enough • Over 30 million multi-dimensional fact table rows per day • Materializing every possible answer isn’t close to possible • Multi dimensional filtering and grouping alone leads to many billions of possible answers • Querying fact tables in Cassandra is too slow • Reading millions or billion random rows • CQL doesn’t support grouping
  • 34. Our Approach • Use Cassandra to store the raw fact tables • Optimize the schema for OLAP workloads • Fast full table reads • Easily read fewer columns • Use Spark for fast random row access and fast distributed computation
  • 35. uuid- part-0 uuid- part-1 2013-04-05T 00:00Z#id1 Section 0 Section 1 Section 2 country rows 0-9999 rows 10000-19999 rows .... city rows 0-9999 rows 10000-19999 rows .... Index CF Columns CF An OLAP Schema for Cassandra Metadata 2013-04-05T 00:00-part-0 {columns: [“country”, “city”, “plays” ]} Metadata CF •Optimized for: selective column loading, maximum throughput and compression
  • 37. Querying Data In Spark Node 2Node 1 Partition 1 ! record1 record2 record3
 Partition 2 ! record4 record5 record6
 Partition 3 ! record7 record8 record9 Partition 4 ! record10 record11 record12 Convert to Spark SQL / Shark Table Shark / Spark SQL rdd.group / .map / .sort / .join etc rdd.reduce / .collect / .to p
  • 38. Fault Tolerance • Cached dataset lives in Java Heap only - what if process dies? • Spark lineage - automatic recomputation from source, but this is expensive! • Can also replicate cached dataset to survive single node failures • Persist materialized views back to C*, then load into cache -- now recovery path is much faster
  • 43. THANK YOU And YES, We’re HIRING!! ooyala.com/careers @evanfchan
  • 44. Industry Trends • Fast execution frameworks • Impala • In-memory databases • VoltDB, Druid • Streaming and real-time • Higher-level, productive data
  • 45. PERFORMANCE #’S Spark: C* -> OLAP aggregates
 cold cache, 1.4 million events 130 seconds C* -> OLAP aggregates
 warmed cache 20-30 seconds OLAP aggregate query via Spark
 (56k records) 60 ms 6-node C*/DSE 1.1.9 cluster,
 Spark 0.7.0
  • 46. EXAMPLE: OLAP PROCESSING t0 2013-0 4-05T0 0:00Z#i {vide o: 10, 2013-0 4-05T0 0:00Z#i {vide o: 20, C* events OLAP Aggregates OLAP Aggregates OLAP Aggregates Cached Materialized Views Spark Spark Spark Union Query 1: Plays by Provider Query 2: Top content for mobile