Top Banner
The Spark Big Data Analytics Platform Amir H. Payberah [email protected] Amirkabir University of Technology (Tehran Polytechnic) 1393/10/10 Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 1 / 171
259

The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Mar 21, 2019

Download

Documents

lethuan
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

The Spark Big Data Analytics Platform

Amir H. [email protected]

Amirkabir University of Technology(Tehran Polytechnic)

1393/10/10

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 1 / 171

Page 2: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 2 / 171

Page 3: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

I Big Data refers to datasets and flows largeenough that has outpaced our capability tostore, process, analyze, and understand.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 3 / 171

Page 4: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Where DoesBig Data Come From?

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 4 / 171

Page 5: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data Market Driving Factors

The number of web pages indexed by Google, which were aroundone million in 1998, have exceeded one trillion in 2008, and itsexpansion is accelerated by appearance of the social networks.∗

∗“Mining big data: current status, and forecast to the future” [Wei Fan et al., 2013]

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 5 / 171

Page 6: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data Market Driving Factors

The amount of mobile data traffic is expected to grow to 10.8Exabyte per month by 2016.∗

∗“Worldwide Big Data Technology and Services 2012-2015 Forecast” [Dan Vesset et al., 2013]

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 6 / 171

Page 7: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data Market Driving Factors

More than 65 billion devices were connected to the Internet by2010, and this number will go up to 230 billion by 2020.∗

∗“The Internet of Things Is Coming” [John Mahoney et al., 2013]

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 7 / 171

Page 8: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data Market Driving Factors

Many companies are moving towards using Cloud services toaccess Big Data analytical tools.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 8 / 171

Page 9: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data Market Driving Factors

Open source communities

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 9 / 171

Page 10: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

How To Store and ProcessBig Data?

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 10 / 171

Page 11: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scale Up vs. Scale Out (1/2)

I Scale up or scale vertically: adding resources to a single node in asystem.

I Scale out or scale horizontally: adding more nodes to a system.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 11 / 171

Page 12: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scale Up vs. Scale Out (2/2)

I Scale up: more expensive than scaling out.

I Scale out: more challenging for fault tolerance and software devel-opment.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 12 / 171

Page 13: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Taxonomy of Parallel Architectures

DeWitt, D. and Gray, J. “Parallel database systems: the future of high performance database systems”. ACMCommunications, 35(6), 85-98, 1992.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 13 / 171

Page 14: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Taxonomy of Parallel Architectures

DeWitt, D. and Gray, J. “Parallel database systems: the future of high performance database systems”. ACMCommunications, 35(6), 85-98, 1992.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 13 / 171

Page 15: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 14 / 171

Page 16: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data Analytics Stack

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 15 / 171

Page 17: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Hadoop Big Data Analytics Stack

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 16 / 171

Page 18: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Big Data Analytics Stack

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 17 / 171

Page 19: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - File systems

I Traditional file-systems are not well-designed for large-scale dataprocessing systems.

I Efficiency has a higher priority than other features, e.g., directoryservice.

I Massive size of data tends to store it across multiple machines in adistributed way.

I HDFS/GFS, Amazon S3, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 18 / 171

Page 20: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - File systems

I Traditional file-systems are not well-designed for large-scale dataprocessing systems.

I Efficiency has a higher priority than other features, e.g., directoryservice.

I Massive size of data tends to store it across multiple machines in adistributed way.

I HDFS/GFS, Amazon S3, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 18 / 171

Page 21: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - File systems

I Traditional file-systems are not well-designed for large-scale dataprocessing systems.

I Efficiency has a higher priority than other features, e.g., directoryservice.

I Massive size of data tends to store it across multiple machines in adistributed way.

I HDFS/GFS, Amazon S3, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 18 / 171

Page 22: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - File systems

I Traditional file-systems are not well-designed for large-scale dataprocessing systems.

I Efficiency has a higher priority than other features, e.g., directoryservice.

I Massive size of data tends to store it across multiple machines in adistributed way.

I HDFS/GFS, Amazon S3, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 18 / 171

Page 23: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Database

I Relational Databases Management Systems (RDMS) were not de-signed to be distributed.

I NoSQL databases relax one or more of the ACID properties: BASE

I Different data models: key/value, column-family, graph, document.

I Hbase/BigTable, Dynamo, Scalaris, Cassandra, MongoDB, Volde-mort, Riak, Neo4J, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 19 / 171

Page 24: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Database

I Relational Databases Management Systems (RDMS) were not de-signed to be distributed.

I NoSQL databases relax one or more of the ACID properties: BASE

I Different data models: key/value, column-family, graph, document.

I Hbase/BigTable, Dynamo, Scalaris, Cassandra, MongoDB, Volde-mort, Riak, Neo4J, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 19 / 171

Page 25: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Database

I Relational Databases Management Systems (RDMS) were not de-signed to be distributed.

I NoSQL databases relax one or more of the ACID properties: BASE

I Different data models: key/value, column-family, graph, document.

I Hbase/BigTable, Dynamo, Scalaris, Cassandra, MongoDB, Volde-mort, Riak, Neo4J, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 19 / 171

Page 26: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Database

I Relational Databases Management Systems (RDMS) were not de-signed to be distributed.

I NoSQL databases relax one or more of the ACID properties: BASE

I Different data models: key/value, column-family, graph, document.

I Hbase/BigTable, Dynamo, Scalaris, Cassandra, MongoDB, Volde-mort, Riak, Neo4J, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 19 / 171

Page 27: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Resource Management

I Different frameworks require different computing resources.

I Large organizations need the ability to share data and resourcesbetween multiple frameworks.

I Resource management share resources in a cluster between multipleframeworks while providing resource isolation.

I Mesos, YARN, Quincy, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 20 / 171

Page 28: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Resource Management

I Different frameworks require different computing resources.

I Large organizations need the ability to share data and resourcesbetween multiple frameworks.

I Resource management share resources in a cluster between multipleframeworks while providing resource isolation.

I Mesos, YARN, Quincy, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 20 / 171

Page 29: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Resource Management

I Different frameworks require different computing resources.

I Large organizations need the ability to share data and resourcesbetween multiple frameworks.

I Resource management share resources in a cluster between multipleframeworks while providing resource isolation.

I Mesos, YARN, Quincy, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 20 / 171

Page 30: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Resource Management

I Different frameworks require different computing resources.

I Large organizations need the ability to share data and resourcesbetween multiple frameworks.

I Resource management share resources in a cluster between multipleframeworks while providing resource isolation.

I Mesos, YARN, Quincy, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 20 / 171

Page 31: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Execution Engine

I Scalable and fault tolerance parallel data processing on clusters ofunreliable machines.

I Data-parallel programming model for clusters of commodity ma-chines.

I MapReduce, Spark, Stratosphere, Dryad, Hyracks, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 21 / 171

Page 32: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Execution Engine

I Scalable and fault tolerance parallel data processing on clusters ofunreliable machines.

I Data-parallel programming model for clusters of commodity ma-chines.

I MapReduce, Spark, Stratosphere, Dryad, Hyracks, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 21 / 171

Page 33: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Execution Engine

I Scalable and fault tolerance parallel data processing on clusters ofunreliable machines.

I Data-parallel programming model for clusters of commodity ma-chines.

I MapReduce, Spark, Stratosphere, Dryad, Hyracks, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 21 / 171

Page 34: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Query/Scripting Language

I Low-level programming of execution engines, e.g., MapReduce, isnot easy for end users.

I Need high-level language to improve the query capabilities of exe-cution engines.

I It translates user-defined functions to low-level API of the executionengines.

I Pig, Hive, Shark, Meteor, DryadLINQ, SCOPE, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 22 / 171

Page 35: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Query/Scripting Language

I Low-level programming of execution engines, e.g., MapReduce, isnot easy for end users.

I Need high-level language to improve the query capabilities of exe-cution engines.

I It translates user-defined functions to low-level API of the executionengines.

I Pig, Hive, Shark, Meteor, DryadLINQ, SCOPE, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 22 / 171

Page 36: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Query/Scripting Language

I Low-level programming of execution engines, e.g., MapReduce, isnot easy for end users.

I Need high-level language to improve the query capabilities of exe-cution engines.

I It translates user-defined functions to low-level API of the executionengines.

I Pig, Hive, Shark, Meteor, DryadLINQ, SCOPE, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 22 / 171

Page 37: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Query/Scripting Language

I Low-level programming of execution engines, e.g., MapReduce, isnot easy for end users.

I Need high-level language to improve the query capabilities of exe-cution engines.

I It translates user-defined functions to low-level API of the executionengines.

I Pig, Hive, Shark, Meteor, DryadLINQ, SCOPE, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 22 / 171

Page 38: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Stream Processing

I Providing users with fresh and low latency results.

I Database Management Systems (DBMS) vs. Data Stream Man-agement Systems (DSMS)

I Storm, S4, SEEP, D-Stream, Naiad, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 23 / 171

Page 39: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Stream Processing

I Providing users with fresh and low latency results.

I Database Management Systems (DBMS) vs. Data Stream Man-agement Systems (DSMS)

I Storm, S4, SEEP, D-Stream, Naiad, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 23 / 171

Page 40: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Stream Processing

I Providing users with fresh and low latency results.

I Database Management Systems (DBMS) vs. Data Stream Man-agement Systems (DSMS)

I Storm, S4, SEEP, D-Stream, Naiad, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 23 / 171

Page 41: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Graph Processing

I Many problems are expressed using graphs: sparse computationaldependencies, and multiple iterations to converge.

I Data-parallel frameworks, such as MapReduce, are not ideal forthese problems: slow

I Graph processing frameworks are optimized for graph-based prob-lems.

I Pregel, Giraph, GraphX, GraphLab, PowerGraph, GraphChi, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 24 / 171

Page 42: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Graph Processing

I Many problems are expressed using graphs: sparse computationaldependencies, and multiple iterations to converge.

I Data-parallel frameworks, such as MapReduce, are not ideal forthese problems: slow

I Graph processing frameworks are optimized for graph-based prob-lems.

I Pregel, Giraph, GraphX, GraphLab, PowerGraph, GraphChi, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 24 / 171

Page 43: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Graph Processing

I Many problems are expressed using graphs: sparse computationaldependencies, and multiple iterations to converge.

I Data-parallel frameworks, such as MapReduce, are not ideal forthese problems: slow

I Graph processing frameworks are optimized for graph-based prob-lems.

I Pregel, Giraph, GraphX, GraphLab, PowerGraph, GraphChi, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 24 / 171

Page 44: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Graph Processing

I Many problems are expressed using graphs: sparse computationaldependencies, and multiple iterations to converge.

I Data-parallel frameworks, such as MapReduce, are not ideal forthese problems: slow

I Graph processing frameworks are optimized for graph-based prob-lems.

I Pregel, Giraph, GraphX, GraphLab, PowerGraph, GraphChi, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 24 / 171

Page 45: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Machine Learning

I Implementing and consuming machine learning techniques at scaleare difficult tasks for developers and end users.

I There exist platforms that address it by providing scalable machine-learning and data mining libraries.

I Mahout, MLBase, SystemML, Ricardo, Presto, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 25 / 171

Page 46: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Machine Learning

I Implementing and consuming machine learning techniques at scaleare difficult tasks for developers and end users.

I There exist platforms that address it by providing scalable machine-learning and data mining libraries.

I Mahout, MLBase, SystemML, Ricardo, Presto, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 25 / 171

Page 47: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Machine Learning

I Implementing and consuming machine learning techniques at scaleare difficult tasks for developers and end users.

I There exist platforms that address it by providing scalable machine-learning and data mining libraries.

I Mahout, MLBase, SystemML, Ricardo, Presto, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 25 / 171

Page 48: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Configuration and Synchronization Service

I A means to synchronize distributed applications accesses to sharedresources.

I Allows distributed processes to coordinate with each other.

I Zookeeper, Chubby, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 26 / 171

Page 49: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Configuration and Synchronization Service

I A means to synchronize distributed applications accesses to sharedresources.

I Allows distributed processes to coordinate with each other.

I Zookeeper, Chubby, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 26 / 171

Page 50: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Big Data - Configuration and Synchronization Service

I A means to synchronize distributed applications accesses to sharedresources.

I Allows distributed processes to coordinate with each other.

I Zookeeper, Chubby, ...

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 26 / 171

Page 51: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Outline

I Introduction to HDFS

I Data processing with MapReduce

I Introduction to Scala

I Data exploration using Spark

I Stream processing with Spark Streaming

I Graph analytics with GraphX

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 27 / 171

Page 52: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 28 / 171

Page 53: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

What is Filesystem?

I Controls how data is stored in and retrieved from disk.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 29 / 171

Page 54: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

What is Filesystem?

I Controls how data is stored in and retrieved from disk.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 29 / 171

Page 55: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Distributed Filesystems

I When data outgrows the storage capacity of a single machine: par-tition it across a number of separate machines.

I Distributed filesystems: manage the storage across a network ofmachines.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 30 / 171

Page 56: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS

I Hadoop Distributed FileSystem

I Appears as a single disk

I Runs on top of a native filesystem, e.g., ext3

I Fault tolerant: can handle disk crashes, machine crashes, ...

I Based on Google’s filesystem GFS

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 31 / 171

Page 57: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS is Good for ...

I Storing large files• Terabytes, Petabytes, etc...• 100MB or more per file.

I Streaming data access• Data is written once and read many times.• Optimized for batch reads rather than random reads.

I Cheap commodity hardware• No need for super-computers, use less reliable commodity hardware.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 32 / 171

Page 58: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS is Not Good for ...

I Low-latency reads• High-throughput rather than low latency for small chunks of data.• HBase addresses this issue.

I Large amount of small files• Better for millions of large files instead of billions of small files.

I Multiple writers• Single writer per file.• Writes only at the end of file, no-support for arbitrary offset.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 33 / 171

Page 59: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Daemons (1/2)

I HDFS cluster is manager by three types of processes.

I Namenode• Manages the filesystem, e.g., namespace, meta-data, and file blocks• Metadata is stored in memory.

I Datanode• Stores and retrieves data blocks• Reports to Namenode• Runs on many machines

I Secondary Namenode• Only for checkpointing.• Not a backup for Namenode

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 34 / 171

Page 60: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Daemons (1/2)

I HDFS cluster is manager by three types of processes.

I Namenode• Manages the filesystem, e.g., namespace, meta-data, and file blocks• Metadata is stored in memory.

I Datanode• Stores and retrieves data blocks• Reports to Namenode• Runs on many machines

I Secondary Namenode• Only for checkpointing.• Not a backup for Namenode

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 34 / 171

Page 61: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Daemons (1/2)

I HDFS cluster is manager by three types of processes.

I Namenode• Manages the filesystem, e.g., namespace, meta-data, and file blocks• Metadata is stored in memory.

I Datanode• Stores and retrieves data blocks• Reports to Namenode• Runs on many machines

I Secondary Namenode• Only for checkpointing.• Not a backup for Namenode

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 34 / 171

Page 62: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Daemons (1/2)

I HDFS cluster is manager by three types of processes.

I Namenode• Manages the filesystem, e.g., namespace, meta-data, and file blocks• Metadata is stored in memory.

I Datanode• Stores and retrieves data blocks• Reports to Namenode• Runs on many machines

I Secondary Namenode• Only for checkpointing.• Not a backup for Namenode

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 34 / 171

Page 63: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Daemons (2/2)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 35 / 171

Page 64: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Files and Blocks (1/2)

I Files are split into blocks.

I Blocks• Single unit of storage: a contiguous piece of information on a disk.• Transparent to user.• Managed by Namenode, stored by Datanode.• Blocks are traditionally either 64MB or 128MB: default is 64MB.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 36 / 171

Page 65: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Files and Blocks (2/2)

I Same block is replicated on multiple machines: default is 3• Replica placements are rack aware.• 1st replica on the local rack.• 2nd replica on the local rack but different machine.• 3rd replica on the different rack.

I Namenode determines replica placement.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 37 / 171

Page 66: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Client

I Client interacts with Namenode• To update the Namenode namespace.• To retrieve block locations for writing and reading.

I Client interacts directly with Datanode• To read and write data.

I Namenode does not directly write or read data.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 38 / 171

Page 67: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Write

I 1. Create a new file in the Namenode’s Namespace; calculate blocktopology.

I 2, 3, 4. Stream data to the first, second and third node.

I 5, 6, 7. Success/failure acknowledgment.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 39 / 171

Page 68: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Read

I 1. Retrieve block locations.

I 2, 3. Read blocks to re-assemble the file.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 40 / 171

Page 69: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Namenode Memory Concerns

I For fast access Namenode keeps all block metadata in-memory.• Will work well for clusters of 100 machines.

I Changing block size will affect how much space a cluster can host.• 64MB to 128MB will reduce the number of blocks and increase the

space that Namenode can support.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 41 / 171

Page 70: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Federation

I Hadoop 2+

I Each Namenode will host part of the blocks.

I A Block Pool is a set of blocks that belong to a single namespace.

I Support for 1000+ machine clusters.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 42 / 171

Page 71: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Namenode Fault-Tolerance (1/2)

I Namenode is a single point of failure.

I If Namenode crashes then cluster is down.

I Secondary Namenode periodically merges the namespace image andlog and a persistent record of it written to disk (checkpointing).

I But, the state of the secondary Namenode lags that of the primary:does not provide high-availability of the filesystem

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 43 / 171

Page 72: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Namenode Fault-Tolerance (1/2)

I Namenode is a single point of failure.

I If Namenode crashes then cluster is down.

I Secondary Namenode periodically merges the namespace image andlog and a persistent record of it written to disk (checkpointing).

I But, the state of the secondary Namenode lags that of the primary:does not provide high-availability of the filesystem

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 43 / 171

Page 73: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Namenode Fault-Tolerance (2/2)

I High availability Namenode.• Hadoop 2+• Active standby is always running and takes over in case main Namen-

ode fails.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 44 / 171

Page 74: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Installation and Shell

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 45 / 171

Page 75: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Installation

I Three options

• Local (Standalone) Mode

• Pseudo-Distributed Mode

• Fully-Distributed Mode

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 46 / 171

Page 76: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Installation - Local

I Default configuration after the download.

I Executes as a single Java process.

I Works directly with local filesystem.

I Useful for debugging.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 47 / 171

Page 77: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Installation - Pseudo-Distributed (1/6)

I Still runs on a single node.

I Each daemon runs in its own Java process.• Namenode• Secondary Namenode• Datanode

I Configuration files:• hadoop-env.sh• core-site.xml• hdfs-site.xml

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 48 / 171

Page 78: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Installation - Pseudo-Distributed (2/6)

I Specify environment variables in hadoop-env.sh

export JAVA_HOME=/opt/jdk1.7.0_51

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 49 / 171

Page 79: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Installation - Pseudo-Distributed (3/6)

I Specify location of Namenode in core-site.sh

<property>

<name>fs.defaultFS</name>

<value>hdfs://localhost:8020</value>

<description>NameNode URI</description>

</property>

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 50 / 171

Page 80: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Installation - Pseudo-Distributed (4/6)

I Configurations of Namenode in hdfs-site.sh

I Path on the local filesystem where the Namenode stores the names-pace and transaction logs persistently.

<property>

<name>dfs.namenode.name.dir</name>

<value>/opt/hadoop-2.2.0/hdfs/namenode</value>

<description>description...</description>

</property>

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 51 / 171

Page 81: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Installation - Pseudo-Distributed (5/6)

I Configurations of Secondary Namenode in hdfs-site.sh

I Path on the local filesystem where the Secondary Namenode storesthe temporary images to merge.

<property>

<name>dfs.namenode.checkpoint.dir</name>

<value>/opt/hadoop-2.2.0/hdfs/secondary</value>

<description>description...</description>

</property>

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 52 / 171

Page 82: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Installation - Pseudo-Distributed (6/6)

I Configurations of Datanode in hdfs-site.sh

I Comma separated list of paths on the local filesystem of a Datanodewhere it should store its blocks.

<property>

<name>dfs.datanode.data.dir</name>

<value>/opt/hadoop-2.2.0/hdfs/datanode</value>

<description>description...</description>

</property>

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 53 / 171

Page 83: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Start HDFS and Test

I Format the Namenode directory (do this only once, the first time).

hdfs namenode -format

I Start the Namenode, Secondary namenode and Datanode daemons.

hadoop-daemon.sh start namenode

hadoop-daemon.sh start secondarynamenode

hadoop-daemon.sh start datanode

jps

I Verify the deamons are running:• Namenode: http://localhost:50070• Secondary Namenode: http://localhost:50090• Datanode: http://localhost:50075

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 54 / 171

Page 84: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Start HDFS and Test

I Format the Namenode directory (do this only once, the first time).

hdfs namenode -format

I Start the Namenode, Secondary namenode and Datanode daemons.

hadoop-daemon.sh start namenode

hadoop-daemon.sh start secondarynamenode

hadoop-daemon.sh start datanode

jps

I Verify the deamons are running:• Namenode: http://localhost:50070• Secondary Namenode: http://localhost:50090• Datanode: http://localhost:50075

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 54 / 171

Page 85: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Start HDFS and Test

I Format the Namenode directory (do this only once, the first time).

hdfs namenode -format

I Start the Namenode, Secondary namenode and Datanode daemons.

hadoop-daemon.sh start namenode

hadoop-daemon.sh start secondarynamenode

hadoop-daemon.sh start datanode

jps

I Verify the deamons are running:• Namenode: http://localhost:50070• Secondary Namenode: http://localhost:50090• Datanode: http://localhost:50075

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 54 / 171

Page 86: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Shell

hdfs dfs -<command> -<option> <path>

hdfs dfs -ls /

hdfs dfs -ls file:///home/big

hdfs dfs -ls hdfs://localhost/

hdfs dfs -cat /dir/file.txt

hdfs dfs -cp /dir/file1 /otherDir/file2

hdfs dfs -mv /dir/file1 /dir2/file2

hdfs dfs -mkdir /newDir

hdfs dfs -put file.txt /dir/file.txt # can also use copyFromLocal

hdfs dfs -get /dir/file.txt file.txt # can also use copyToLocal

hdfs dfs -rm /dir/fileToDelete

hdfs dfs -help

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 55 / 171

Page 87: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

HDFS Shell

hdfs dfs -<command> -<option> <path>

hdfs dfs -ls /

hdfs dfs -ls file:///home/big

hdfs dfs -ls hdfs://localhost/

hdfs dfs -cat /dir/file.txt

hdfs dfs -cp /dir/file1 /otherDir/file2

hdfs dfs -mv /dir/file1 /dir2/file2

hdfs dfs -mkdir /newDir

hdfs dfs -put file.txt /dir/file.txt # can also use copyFromLocal

hdfs dfs -get /dir/file.txt file.txt # can also use copyToLocal

hdfs dfs -rm /dir/fileToDelete

hdfs dfs -help

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 55 / 171

Page 88: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 56 / 171

Page 89: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce

I A shared nothing architecture for processing large data sets with aparallel/distributed algorithm on clusters.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 57 / 171

Page 90: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce Definition

I A programming model: to batch process large data sets (inspiredby functional programming).

I An execution framework: to run parallel algorithms on clusters ofcommodity hardware.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 58 / 171

Page 91: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce Definition

I A programming model: to batch process large data sets (inspiredby functional programming).

I An execution framework: to run parallel algorithms on clusters ofcommodity hardware.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 58 / 171

Page 92: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Simplicity

I Don’t worry about parallelization, fault tolerance, data distribution,and load balancing (MapReduce takes care of these).

I Hide system-level details from programmers.

Simplicity!

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 59 / 171

Page 93: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Programming Model

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 60 / 171

Page 94: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce Dataflow

I map function: processes data and generates a set of intermediatekey/value pairs.

I reduce function: merges all intermediate values associated with thesame intermediate key.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 61 / 171

Page 95: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example: Word Count

I Consider doing a word count of the following file using MapReduce:

Hello World Bye World

Hello Hadoop Goodbye Hadoop

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 62 / 171

Page 96: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example: Word Count - map

I The map function reads in words one a time and outputs (word, 1)for each parsed input word.

I The map function output is:

(Hello, 1)

(World, 1)

(Bye, 1)

(World, 1)

(Hello, 1)

(Hadoop, 1)

(Goodbye, 1)

(Hadoop, 1)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 63 / 171

Page 97: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example: Word Count - shuffle

I The shuffle phase between map and reduce phase creates a list ofvalues associated with each key.

I The reduce function input is:

(Bye, (1))

(Goodbye, (1))

(Hadoop, (1, 1)

(Hello, (1, 1))

(World, (1, 1))

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 64 / 171

Page 98: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example: Word Count - reduce

I The reduce function sums the numbers in the list for each key andoutputs (word, count) pairs.

I The output of the reduce function is the output of the MapReducejob:

(Bye, 1)

(Goodbye, 1)

(Hadoop, 2)

(Hello, 2)

(World, 2)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 65 / 171

Page 99: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Combiner Function (1/2)

I In some cases, there is significant repetition in the intermediate keysproduced by each map task, and the reduce function is commutativeand associative.

Machine 1:(Hello, 1)

(World, 1)

(Bye, 1)

(World, 1)

Machine 2:(Hello, 1)

(Hadoop, 1)

(Goodbye, 1)

(Hadoop, 1)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 66 / 171

Page 100: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Combiner Function (2/2)

I Users can specify an optional combiner function to merge partiallydata before it is sent over the network to the reduce function.

I Typically the same code is used to implement both the combinerand the reduce function.

Machine 1:(Hello, 1)

(World, 2)

(Bye, 1)

Machine 2:(Hello, 1)

(Hadoop, 2)

(Goodbye, 1)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 67 / 171

Page 101: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example: Word Count - map

public static class MyMap extends Mapper<...> {

private final static IntWritable one = new IntWritable(1);

private Text word = new Text();

public void map(LongWritable key, Text value, Context context)

throws IOException, InterruptedException {

String line = value.toString();

StringTokenizer tokenizer = new StringTokenizer(line);

while (tokenizer.hasMoreTokens()) {

word.set(tokenizer.nextToken());

context.write(word, one);

}

}

}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 68 / 171

Page 102: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example: Word Count - reduce

public static class MyReduce extends Reducer<...> {

public void reduce(Text key, Iterator<...> values, Context context)

throws IOException, InterruptedException {

int sum = 0;

while (values.hasNext())

sum += values.next().get();

context.write(key, new IntWritable(sum));

}

}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 69 / 171

Page 103: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example: Word Count - driver

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

Configuration conf = new Configuration();

Job job = new Job(conf, "wordcount");

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

job.setMapperClass(MyMap.class);

job.setCombinerClass(MyReduce.class);

job.setReducerClass(MyReduce.class);

job.setInputFormatClass(TextInputFormat.class);

job.setOutputFormatClass(TextOutputFormat.class);

FileInputFormat.addInputPath(job, new Path(args[0]));

FileOutputFormat.setOutputPath(job, new Path(args[1]));

job.waitForCompletion(true);

}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 70 / 171

Page 104: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example: Word Count - Compile and Run (1/2)

# start hdfs

> hadoop-daemon.sh start namenode

> hadoop-daemon.sh start datanode

# make the input folder in hdfs

> hdfs dfs -mkdir -p input

# copy input files from local filesystem into hdfs

> hdfs dfs -put file0 input/file0

> hdfs dfs -put file1 input/file1

> hdfs dfs -ls input/

input/file0

input/file1

> hdfs dfs -cat input/file0

Hello World Bye World

> hdfs dfs -cat input/file1

Hello Hadoop Goodbye Hadoop

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 71 / 171

Page 105: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example: Word Count - Compile and Run (2/2)

> mkdir wordcount_classes

> javac -classpath

$HADOOP_HOME/share/hadoop/common/hadoop-common-2.2.0.jar:

$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.2.0.jar:

$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar

-d wordcount_classes sics/WordCount.java

> jar -cvf wordcount.jar -C wordcount_classes/ .

> hadoop jar wordcount.jar sics.WordCount input output

> hdfs dfs -ls output

output/part-00000

> hdfs dfs -cat output/part-00000

Bye 1

Goodbye 1

Hadoop 2

Hello 2

World 2

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 72 / 171

Page 106: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Execution Engine

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 73 / 171

Page 107: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce Execution (1/7)

I The user program divides the input files into M splits.• A typical size of a split is the size of a HDFS block (64 MB).• Converts them to key/value pairs.

I It starts up many copies of the program on a cluster of machines.

J. Dean and S. Ghemawat, “MapReduce: simplified data processing on large clusters”, ACM Communications 51(1), 2008.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 74 / 171

Page 108: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce Execution (2/7)

I One of the copies of the program is master, and the rest are workers.

I The master assigns works to the workers.• It picks idle workers and assigns each one a map task or a reduce

task.

J. Dean and S. Ghemawat, “MapReduce: simplified data processing on large clusters”, ACM Communications 51(1), 2008.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 75 / 171

Page 109: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce Execution (3/7)

I A map worker reads the contents of the corresponding input splits.

I It parses key/value pairs out of the input data and passes each pairto the user defined map function.

I The intermediate key/value pairs produced by the map function arebuffered in memory.

J. Dean and S. Ghemawat, “MapReduce: simplified data processing on large clusters”, ACM Communications 51(1), 2008.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 76 / 171

Page 110: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce Execution (4/7)

I The buffered pairs are periodically written to local disk.• They are partitioned into R regions (hash(key) mod R).

I The locations of the buffered pairs on the local disk are passed backto the master.

I The master forwards these locations to the reduce workers.

J. Dean and S. Ghemawat, “MapReduce: simplified data processing on large clusters”, ACM Communications 51(1), 2008.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 77 / 171

Page 111: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce Execution (5/7)

I A reduce worker reads the buffered data from the local disks of themap workers.

I When a reduce worker has read all intermediate data, it sorts it bythe intermediate keys.

J. Dean and S. Ghemawat, “MapReduce: simplified data processing on large clusters”, ACM Communications 51(1), 2008.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 78 / 171

Page 112: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce Execution (6/7)

I The reduce worker iterates over the intermediate data.

I For each unique intermediate key, it passes the key and the cor-responding set of intermediate values to the user defined reducefunction.

I The output of the reduce function is appended to a final output filefor this reduce partition.

J. Dean and S. Ghemawat, “MapReduce: simplified data processing on large clusters”, ACM Communications 51(1), 2008.Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 79 / 171

Page 113: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

MapReduce Execution (7/7)

I When all map tasks and reduce tasks have been completed, themaster wakes up the user program.

J. Dean and S. Ghemawat, “MapReduce: simplified data processing on large clusters”, ACM Communications 51(1), 2008.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 80 / 171

Page 114: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Hadoop MapReduce and HDFS

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 81 / 171

Page 115: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Fault Tolerance

I On worker failure:

• Detect failure via periodic heartbeats.

• Re-execute in-progress map and reduce tasks.

• Re-execute completed map tasks: their output is stored on the localdisk of the failed machine and is therefore inaccessible.

• Completed reduce tasks do not need to be re-executed since theiroutput is stored in a global filesystem.

I On master failure:• State is periodically checkpointed: a new copy of master starts from

the last checkpoint state.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 82 / 171

Page 116: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 83 / 171

Page 117: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala

I Scala: scalable language

I A blend of object-oriented and functional programming

I Runs on the Java Virtual Machine

I Designed by Martin Odersky at EPFL

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 84 / 171

Page 118: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Functional Programming Languages

I In a restricted sense: a language that does not have mutable vari-ables, assignments, or imperative control structures.

I In a wider sense: it enables the construction of programs that focuson functions.

I Functions are first-class citizens:• Defined anywhere (including inside other functions).• Passed as parameters to functions and returned as results.• Operators to compose functions.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 85 / 171

Page 119: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Functional Programming Languages

I In a restricted sense: a language that does not have mutable vari-ables, assignments, or imperative control structures.

I In a wider sense: it enables the construction of programs that focuson functions.

I Functions are first-class citizens:• Defined anywhere (including inside other functions).• Passed as parameters to functions and returned as results.• Operators to compose functions.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 85 / 171

Page 120: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Variables

I Values: immutable

I Variables: mutable

var myVar: Int = 0

val myVal: Int = 1

I Scala data types:• Boolean, Byte, Short, Char, Int, Long, Float, Double, String

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 86 / 171

Page 121: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

If ... Else

var x = 30;

if (x == 10) {

println("Value of X is 10");

} else if (x == 20) {

println("Value of X is 20");

} else {

println("This is else statement");

}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 87 / 171

Page 122: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Loop

var a = 0

var b = 0

for (a <- 1 to 3; b <- 1 until 3) {

println("Value of a: " + a + ", b: " + b )

}

// loop with collections

val numList = List(1, 2, 3, 4, 5, 6)

for (a <- numList) {

println("Value of a: " + a)

}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 88 / 171

Page 123: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Functions

def functionName([list of parameters]): [return type] = {

function body

return [expr]

}

def addInt(a: Int, b: Int): Int = {

var sum: Int = 0

sum = a + b

sum

}

println("Returned Value: " + addInt(5, 7))

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 89 / 171

Page 124: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Anonymous Functions

I Lightweight syntax for defining functions.

var mul = (x: Int, y: Int) => x * y

println(mul(3, 4))

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 90 / 171

Page 125: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Higher-Order Functions

def apply(f: Int => String, v: Int) = f(v)

def layout(x: Int) = "[" + x.toString() + "]"

println(apply(layout, 10))

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 91 / 171

Page 126: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Collections (1/2)

I Array: fixed-size sequential collection of elements of the same type

val t = Array("zero", "one", "two")

val b = t(0) // b = zero

I List: sequential collection of elements of the same type

val t = List("zero", "one", "two")

val b = t(0) // b = zero

I Set: sequential collection of elements of the same type withoutduplicates

val t = Set("zero", "one", "two")

val t.contains("zero")

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 92 / 171

Page 127: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Collections (1/2)

I Array: fixed-size sequential collection of elements of the same type

val t = Array("zero", "one", "two")

val b = t(0) // b = zero

I List: sequential collection of elements of the same type

val t = List("zero", "one", "two")

val b = t(0) // b = zero

I Set: sequential collection of elements of the same type withoutduplicates

val t = Set("zero", "one", "two")

val t.contains("zero")

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 92 / 171

Page 128: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Collections (1/2)

I Array: fixed-size sequential collection of elements of the same type

val t = Array("zero", "one", "two")

val b = t(0) // b = zero

I List: sequential collection of elements of the same type

val t = List("zero", "one", "two")

val b = t(0) // b = zero

I Set: sequential collection of elements of the same type withoutduplicates

val t = Set("zero", "one", "two")

val t.contains("zero")

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 92 / 171

Page 129: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Collections (2/2)

I Map: collection of key/value pairs

val m = Map(1 -> "sics", 2 -> "kth")

val b = m(1) // b = sics

I Tuple: A fixed number of items of different types together

val t = (1, "hello")

val b = t._1 // b = 1

val c = t._2 // c = hello

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 93 / 171

Page 130: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Collections (2/2)

I Map: collection of key/value pairs

val m = Map(1 -> "sics", 2 -> "kth")

val b = m(1) // b = sics

I Tuple: A fixed number of items of different types together

val t = (1, "hello")

val b = t._1 // b = 1

val c = t._2 // c = hello

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 93 / 171

Page 131: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Functional Combinators

I map: applies a function over each element in the list

val numbers = List(1, 2, 3, 4)

numbers.map(i => i * 2) // List(2, 4, 6, 8)

I flatten: it collapses one level of nested structure

List(List(1, 2), List(3, 4)).flatten // List(1, 2, 3, 4)

I flatMap: map + flatten

I foreach: it is like map but returns nothing

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 94 / 171

Page 132: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Classes and Objects

class Calculator {

val brand: String = "HP"

def add(m: Int, n: Int): Int = m + n

}

val calc = new Calculator

calc.add(1, 2)

println(calc.brand)

I A singleton is a class that can have only one instance.

object Test {

def main(args: Array[String]) { ... }

}

Test.main(null)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 95 / 171

Page 133: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Classes and Objects

class Calculator {

val brand: String = "HP"

def add(m: Int, n: Int): Int = m + n

}

val calc = new Calculator

calc.add(1, 2)

println(calc.brand)

I A singleton is a class that can have only one instance.

object Test {

def main(args: Array[String]) { ... }

}

Test.main(null)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 95 / 171

Page 134: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Case Classes and Pattern Matching

I Case classes are used to store and match on the contents of a class.

I They are designed to be used with pattern matching.

I You can construct them without using new.

case class Calc(brand: String, model: String)

def calcType(calc: Calc) = calc match {

case Calc("hp", "20B") => "financial"

case Calc("hp", "48G") => "scientific"

case Calc("hp", "30B") => "business"

case _ => "Calculator of unknown type"

}

calcType(Calc("hp", "20B"))

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 96 / 171

Page 135: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Simple Build Tool (SBT)

I An open source build tool for Scala and Java projects.

I Similar to Java’s Maven or Ant.

I It is written in Scala.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 97 / 171

Page 136: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

SBT - Hello World!

// make dir hello and edit Hello.scala

object Hello {

def main(args: Array[String]) {

println("Hello world.")

}

}

$ cd hello

$ sbt compile run

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 98 / 171

Page 137: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Common Commands

I compile: compiles the main sources.

I run <argument>*: run the main class.

I package: creates a jar file.

I console: starts the Scala interpreter.

I clean: deletes all generated files.

I help <command>: displays detailed help for the specified command.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 99 / 171

Page 138: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Create a Simple Project

I Create project directory.

I Create src/main/scala directory.

I Create build.sbt in the project root.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 100 / 171

Page 139: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

build.sbt

I A list of Scala expressions, separated by blank lines.

I Located in the project’s base directory.

$ cat build.sbt

name := "hello"

version := "1.0"

scalaVersion := "2.10.4"

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 101 / 171

Page 140: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Add Dependencies

I Add in build.sbt.

I Module ID format:"groupID" %% "artifact" % "version" % "configuration"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.0.0"

// multiple dependencies

libraryDependencies ++= Seq(

"org.apache.spark" %% "spark-core" % "1.0.0",

"org.apache.spark" %% "spark-streaming" % "1.0.0"

)

I sbt uses the standard Maven2 repository by default, but you can addmore resolvers.

resolvers += "Akka Repository" at "http://repo.akka.io/releases/"

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 102 / 171

Page 141: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (1/3)

I Declare a list of integers as a variable called myNumbers

val myNumbers = List(1, 2, 5, 4, 7, 3)

I Declare a function, pow, that computes the second power of an Int

def pow(a: Int): Int = a * a

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 103 / 171

Page 142: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (1/3)

I Declare a list of integers as a variable called myNumbers

val myNumbers = List(1, 2, 5, 4, 7, 3)

I Declare a function, pow, that computes the second power of an Int

def pow(a: Int): Int = a * a

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 103 / 171

Page 143: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (1/3)

I Declare a list of integers as a variable called myNumbers

val myNumbers = List(1, 2, 5, 4, 7, 3)

I Declare a function, pow, that computes the second power of an Int

def pow(a: Int): Int = a * a

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 103 / 171

Page 144: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (1/3)

I Declare a list of integers as a variable called myNumbers

val myNumbers = List(1, 2, 5, 4, 7, 3)

I Declare a function, pow, that computes the second power of an Int

def pow(a: Int): Int = a * a

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 103 / 171

Page 145: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (2/3)

I Apply the function to myNumbers using the map function

myNumbers.map(x => pow(x))

// or

myNumbers.map(pow(_))

// or

myNumbers.map(pow)

I Write the pow function inline in a map call, using closure notation

myNumbers.map(x => x * x)

I Iterate through myNumbers and print out its items

for (i <- myNumbers)

println(i)

// or

myNumbers.foreach(println)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 104 / 171

Page 146: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (2/3)

I Apply the function to myNumbers using the map function

myNumbers.map(x => pow(x))

// or

myNumbers.map(pow(_))

// or

myNumbers.map(pow)

I Write the pow function inline in a map call, using closure notation

myNumbers.map(x => x * x)

I Iterate through myNumbers and print out its items

for (i <- myNumbers)

println(i)

// or

myNumbers.foreach(println)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 104 / 171

Page 147: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (2/3)

I Apply the function to myNumbers using the map function

myNumbers.map(x => pow(x))

// or

myNumbers.map(pow(_))

// or

myNumbers.map(pow)

I Write the pow function inline in a map call, using closure notation

myNumbers.map(x => x * x)

I Iterate through myNumbers and print out its items

for (i <- myNumbers)

println(i)

// or

myNumbers.foreach(println)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 104 / 171

Page 148: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (2/3)

I Apply the function to myNumbers using the map function

myNumbers.map(x => pow(x))

// or

myNumbers.map(pow(_))

// or

myNumbers.map(pow)

I Write the pow function inline in a map call, using closure notation

myNumbers.map(x => x * x)

I Iterate through myNumbers and print out its items

for (i <- myNumbers)

println(i)

// or

myNumbers.foreach(println)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 104 / 171

Page 149: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (2/3)

I Apply the function to myNumbers using the map function

myNumbers.map(x => pow(x))

// or

myNumbers.map(pow(_))

// or

myNumbers.map(pow)

I Write the pow function inline in a map call, using closure notation

myNumbers.map(x => x * x)

I Iterate through myNumbers and print out its items

for (i <- myNumbers)

println(i)

// or

myNumbers.foreach(println)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 104 / 171

Page 150: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (2/3)

I Apply the function to myNumbers using the map function

myNumbers.map(x => pow(x))

// or

myNumbers.map(pow(_))

// or

myNumbers.map(pow)

I Write the pow function inline in a map call, using closure notation

myNumbers.map(x => x * x)

I Iterate through myNumbers and print out its items

for (i <- myNumbers)

println(i)

// or

myNumbers.foreach(println)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 104 / 171

Page 151: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (3/3)

I Declare a list of pair of string and integers as a variable called myList

val myList = List[(String, Int)](("a", 1), ("b", 2), ("c", 3))

I Write an inline function to increment the integer values of the listmyList

val x = v.map { case (name, age) => age + 1 }

// or

val x = v.map(i => i._2 + 1)

// or

val x = v.map(_._2 + 1)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 105 / 171

Page 152: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (3/3)

I Declare a list of pair of string and integers as a variable called myList

val myList = List[(String, Int)](("a", 1), ("b", 2), ("c", 3))

I Write an inline function to increment the integer values of the listmyList

val x = v.map { case (name, age) => age + 1 }

// or

val x = v.map(i => i._2 + 1)

// or

val x = v.map(_._2 + 1)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 105 / 171

Page 153: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (3/3)

I Declare a list of pair of string and integers as a variable called myList

val myList = List[(String, Int)](("a", 1), ("b", 2), ("c", 3))

I Write an inline function to increment the integer values of the listmyList

val x = v.map { case (name, age) => age + 1 }

// or

val x = v.map(i => i._2 + 1)

// or

val x = v.map(_._2 + 1)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 105 / 171

Page 154: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Scala Hands-on Exercises (3/3)

I Declare a list of pair of string and integers as a variable called myList

val myList = List[(String, Int)](("a", 1), ("b", 2), ("c", 3))

I Write an inline function to increment the integer values of the listmyList

val x = v.map { case (name, age) => age + 1 }

// or

val x = v.map(i => i._2 + 1)

// or

val x = v.map(_._2 + 1)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 105 / 171

Page 155: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 106 / 171

Page 156: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

What is Spark?

I An efficient distributed general-purpose data analysis platform.

I Focusing on ease of programming and high performance.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 107 / 171

Page 157: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Motivation

I MapReduce programming model has not been designed for complexoperations, e.g., data mining.

I Very expensive, i.e., always goes to disk and HDFS.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 108 / 171

Page 158: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Solution

I Extends MapReduce with more operators.

I Support for advanced data flow graphs.

I In-memory and out-of-core processing.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 109 / 171

Page 159: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark vs. Hadoop

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 110 / 171

Page 160: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark vs. Hadoop

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 110 / 171

Page 161: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark vs. Hadoop

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 111 / 171

Page 162: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark vs. Hadoop

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 111 / 171

Page 163: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Resilient Distributed Datasets (RDD) (1/2)

I A distributed memory abstraction.

I Immutable collections of objects spread across a cluster.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 112 / 171

Page 164: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Resilient Distributed Datasets (RDD) (1/2)

I A distributed memory abstraction.

I Immutable collections of objects spread across a cluster.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 112 / 171

Page 165: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Resilient Distributed Datasets (RDD) (2/2)

I An RDD is divided into a number of partitions, which are atomicpieces of information.

I Partitions of an RDD can be stored on different nodes of a cluster.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 113 / 171

Page 166: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

RDD Operators

I Higher-order functions: transformations and actions.

I Transformations: lazy operators that create new RDDs.

I Actions: launch a computation and return a value to the programor write data to the external storage.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 114 / 171

Page 167: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Transformations vs. Actions

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 115 / 171

Page 168: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

RDD Transformations - Map

I All pairs are independently processed.

// passing each element through a function.

val nums = sc.parallelize(Array(1, 2, 3))

val squares = nums.map(x => x * x) // {1, 4, 9}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 116 / 171

Page 169: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

RDD Transformations - Map

I All pairs are independently processed.

// passing each element through a function.

val nums = sc.parallelize(Array(1, 2, 3))

val squares = nums.map(x => x * x) // {1, 4, 9}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 116 / 171

Page 170: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

RDD Transformations - GroupBy

I Pairs with identical key are grouped.

I Groups are independently processed.

val schools = sc.parallelize(Seq(("sics", 1), ("kth", 1), ("sics", 2)))

schools.groupByKey()

// {("sics", (1, 2)), ("kth", (1))}

schools.reduceByKey((x, y) => x + y)

// {("sics", 3), ("kth", 1)}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 117 / 171

Page 171: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

RDD Transformations - GroupBy

I Pairs with identical key are grouped.

I Groups are independently processed.

val schools = sc.parallelize(Seq(("sics", 1), ("kth", 1), ("sics", 2)))

schools.groupByKey()

// {("sics", (1, 2)), ("kth", (1))}

schools.reduceByKey((x, y) => x + y)

// {("sics", 3), ("kth", 1)}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 117 / 171

Page 172: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

RDD Transformations - Join

I Performs an equi-join on the key.

I Join candidates are independently pro-cessed.

val list1 = sc.parallelize(Seq(("sics", "10"),

("kth", "50"),

("sics", "20")))

val list2 = sc.parallelize(Seq(("sics", "upsala"),

("kth", "stockholm")))

list1.join(list2)

// ("sics", ("10", "upsala"))

// ("sics", ("20", "upsala"))

// ("kth", ("50", "stockholm"))

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 118 / 171

Page 173: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

RDD Transformations - Join

I Performs an equi-join on the key.

I Join candidates are independently pro-cessed.

val list1 = sc.parallelize(Seq(("sics", "10"),

("kth", "50"),

("sics", "20")))

val list2 = sc.parallelize(Seq(("sics", "upsala"),

("kth", "stockholm")))

list1.join(list2)

// ("sics", ("10", "upsala"))

// ("sics", ("20", "upsala"))

// ("kth", ("50", "stockholm"))

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 118 / 171

Page 174: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Basic RDD Actions

I Return all the elements of the RDD as an array.

val nums = sc.parallelize(Array(1, 2, 3))

nums.collect() // Array(1, 2, 3)

I Return an array with the first n elements of the RDD.

nums.take(2) // Array(1, 2)

I Return the number of elements in the RDD.

nums.count() // 3

I Aggregate the elements of the RDD using the given function.

nums.reduce((x, y) => x + y) // 6

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 119 / 171

Page 175: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Basic RDD Actions

I Return all the elements of the RDD as an array.

val nums = sc.parallelize(Array(1, 2, 3))

nums.collect() // Array(1, 2, 3)

I Return an array with the first n elements of the RDD.

nums.take(2) // Array(1, 2)

I Return the number of elements in the RDD.

nums.count() // 3

I Aggregate the elements of the RDD using the given function.

nums.reduce((x, y) => x + y) // 6

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 119 / 171

Page 176: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Basic RDD Actions

I Return all the elements of the RDD as an array.

val nums = sc.parallelize(Array(1, 2, 3))

nums.collect() // Array(1, 2, 3)

I Return an array with the first n elements of the RDD.

nums.take(2) // Array(1, 2)

I Return the number of elements in the RDD.

nums.count() // 3

I Aggregate the elements of the RDD using the given function.

nums.reduce((x, y) => x + y) // 6

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 119 / 171

Page 177: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Basic RDD Actions

I Return all the elements of the RDD as an array.

val nums = sc.parallelize(Array(1, 2, 3))

nums.collect() // Array(1, 2, 3)

I Return an array with the first n elements of the RDD.

nums.take(2) // Array(1, 2)

I Return the number of elements in the RDD.

nums.count() // 3

I Aggregate the elements of the RDD using the given function.

nums.reduce((x, y) => x + y) // 6

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 119 / 171

Page 178: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Creating RDDs

I Turn a collection into an RDD.

val a = sc.parallelize(Array(1, 2, 3))

I Load text file from local FS, HDFS, or S3.

val a = sc.textFile("file.txt")

val b = sc.textFile("directory/*.txt")

val c = sc.textFile("hdfs://namenode:9000/path/file")

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 120 / 171

Page 179: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

SparkContext

I Main entry point to Spark functionality.

I Available in shell as variable sc.

I In standalone programs, you should make your own.

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

val sc = new SparkContext(master, appName, [sparkHome], [jars])

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 121 / 171

Page 180: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (1/3)

I Read data from a text file and create an RDD named pagecounts.

val pagecounts = sc.textFile("hamlet")

I Get the first 10 lines of the text file.

pagecounts.take(10).foreach(println)

I Count the total records in the data set pagecounts.

pagecounts.count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 122 / 171

Page 181: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (1/3)

I Read data from a text file and create an RDD named pagecounts.

val pagecounts = sc.textFile("hamlet")

I Get the first 10 lines of the text file.

pagecounts.take(10).foreach(println)

I Count the total records in the data set pagecounts.

pagecounts.count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 122 / 171

Page 182: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (1/3)

I Read data from a text file and create an RDD named pagecounts.

val pagecounts = sc.textFile("hamlet")

I Get the first 10 lines of the text file.

pagecounts.take(10).foreach(println)

I Count the total records in the data set pagecounts.

pagecounts.count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 122 / 171

Page 183: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (1/3)

I Read data from a text file and create an RDD named pagecounts.

val pagecounts = sc.textFile("hamlet")

I Get the first 10 lines of the text file.

pagecounts.take(10).foreach(println)

I Count the total records in the data set pagecounts.

pagecounts.count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 122 / 171

Page 184: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (1/3)

I Read data from a text file and create an RDD named pagecounts.

val pagecounts = sc.textFile("hamlet")

I Get the first 10 lines of the text file.

pagecounts.take(10).foreach(println)

I Count the total records in the data set pagecounts.

pagecounts.count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 122 / 171

Page 185: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (1/3)

I Read data from a text file and create an RDD named pagecounts.

val pagecounts = sc.textFile("hamlet")

I Get the first 10 lines of the text file.

pagecounts.take(10).foreach(println)

I Count the total records in the data set pagecounts.

pagecounts.count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 122 / 171

Page 186: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (2/3)

I Filter the data set pagecounts and return the items that have theword this, and cache in the memory.

val linesWithThis = pagecounts.filter(line => line.contains("this")).cache

\\ or

val linesWithThis = pagecounts.filter(_.contains("this")).cache

I Find the lines with the most number of words.

linesWithThis.map(line => line.split(" ").size)

.reduce((a, b) => if (a > b) a else b)

I Count the total number of words.

val wordCounts = linesWithThis.flatMap(line => line.split(" ")).count

\\ or

val wordCounts = linesWithThis.flatMap(_.split(" ")).count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 123 / 171

Page 187: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (2/3)

I Filter the data set pagecounts and return the items that have theword this, and cache in the memory.

val linesWithThis = pagecounts.filter(line => line.contains("this")).cache

\\ or

val linesWithThis = pagecounts.filter(_.contains("this")).cache

I Find the lines with the most number of words.

linesWithThis.map(line => line.split(" ").size)

.reduce((a, b) => if (a > b) a else b)

I Count the total number of words.

val wordCounts = linesWithThis.flatMap(line => line.split(" ")).count

\\ or

val wordCounts = linesWithThis.flatMap(_.split(" ")).count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 123 / 171

Page 188: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (2/3)

I Filter the data set pagecounts and return the items that have theword this, and cache in the memory.

val linesWithThis = pagecounts.filter(line => line.contains("this")).cache

\\ or

val linesWithThis = pagecounts.filter(_.contains("this")).cache

I Find the lines with the most number of words.

linesWithThis.map(line => line.split(" ").size)

.reduce((a, b) => if (a > b) a else b)

I Count the total number of words.

val wordCounts = linesWithThis.flatMap(line => line.split(" ")).count

\\ or

val wordCounts = linesWithThis.flatMap(_.split(" ")).count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 123 / 171

Page 189: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (2/3)

I Filter the data set pagecounts and return the items that have theword this, and cache in the memory.

val linesWithThis = pagecounts.filter(line => line.contains("this")).cache

\\ or

val linesWithThis = pagecounts.filter(_.contains("this")).cache

I Find the lines with the most number of words.

linesWithThis.map(line => line.split(" ").size)

.reduce((a, b) => if (a > b) a else b)

I Count the total number of words.

val wordCounts = linesWithThis.flatMap(line => line.split(" ")).count

\\ or

val wordCounts = linesWithThis.flatMap(_.split(" ")).count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 123 / 171

Page 190: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (2/3)

I Filter the data set pagecounts and return the items that have theword this, and cache in the memory.

val linesWithThis = pagecounts.filter(line => line.contains("this")).cache

\\ or

val linesWithThis = pagecounts.filter(_.contains("this")).cache

I Find the lines with the most number of words.

linesWithThis.map(line => line.split(" ").size)

.reduce((a, b) => if (a > b) a else b)

I Count the total number of words.

val wordCounts = linesWithThis.flatMap(line => line.split(" ")).count

\\ or

val wordCounts = linesWithThis.flatMap(_.split(" ")).count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 123 / 171

Page 191: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (2/3)

I Filter the data set pagecounts and return the items that have theword this, and cache in the memory.

val linesWithThis = pagecounts.filter(line => line.contains("this")).cache

\\ or

val linesWithThis = pagecounts.filter(_.contains("this")).cache

I Find the lines with the most number of words.

linesWithThis.map(line => line.split(" ").size)

.reduce((a, b) => if (a > b) a else b)

I Count the total number of words.

val wordCounts = linesWithThis.flatMap(line => line.split(" ")).count

\\ or

val wordCounts = linesWithThis.flatMap(_.split(" ")).count

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 123 / 171

Page 192: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (3/3)

I Count the number of distinct words.

val uniqueWordCounts = linesWithThis.flatMap(_.split(" ")).distinct.count

I Count the number of each word.

val eachWordCounts = linesWithThis.flatMap(_.split(" "))

.map(word => (word, 1))

.reduceByKey((a, b) => a + b)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 124 / 171

Page 193: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (3/3)

I Count the number of distinct words.

val uniqueWordCounts = linesWithThis.flatMap(_.split(" ")).distinct.count

I Count the number of each word.

val eachWordCounts = linesWithThis.flatMap(_.split(" "))

.map(word => (word, 1))

.reduceByKey((a, b) => a + b)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 124 / 171

Page 194: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (3/3)

I Count the number of distinct words.

val uniqueWordCounts = linesWithThis.flatMap(_.split(" ")).distinct.count

I Count the number of each word.

val eachWordCounts = linesWithThis.flatMap(_.split(" "))

.map(word => (word, 1))

.reduceByKey((a, b) => a + b)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 124 / 171

Page 195: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Hands-on Exercises (3/3)

I Count the number of distinct words.

val uniqueWordCounts = linesWithThis.flatMap(_.split(" ")).distinct.count

I Count the number of each word.

val eachWordCounts = linesWithThis.flatMap(_.split(" "))

.map(word => (word, 1))

.reduceByKey((a, b) => a + b)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 124 / 171

Page 196: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 125 / 171

Page 197: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Motivation

I Many applications must process large streams of live data and pro-vide results in real-time.

I Processing information as it flows, without storing them persistently.

I Traditional DBMSs:• Store and index data before processing it.• Process data only when explicitly asked by the users.• Both aspects contrast with our requirements.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 126 / 171

Page 198: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Motivation

I Many applications must process large streams of live data and pro-vide results in real-time.

I Processing information as it flows, without storing them persistently.

I Traditional DBMSs:• Store and index data before processing it.• Process data only when explicitly asked by the users.• Both aspects contrast with our requirements.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 126 / 171

Page 199: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

DBMS vs. DSMS (1/3)

I DBMS: persistent data where updates are relatively infrequent.

I DSMS: transient data that is continuously updated.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 127 / 171

Page 200: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

DBMS vs. DSMS (2/3)

I DBMS: runs queries just once to return a complete answer.

I DSMS: executes standing queries, which run continuously and pro-vide updated answers as new data arrives.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 128 / 171

Page 201: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

DBMS vs. DSMS (3/3)

I Despite these differences, DSMSs resemble DBMSs: both processincoming data through a sequence of transformations based on SQLoperators, e.g., selections, aggregates, joins.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 129 / 171

Page 202: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming

I Run a streaming computation as a series of very small, deterministicbatch jobs.

• Chop up the live stream into batches of X seconds.

• Spark treats each batch of data as RDDs and processes them usingRDD operations.

• Finally, the processed results of the RDD operations are returned inbatches.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 130 / 171

Page 203: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming

I Run a streaming computation as a series of very small, deterministicbatch jobs.

• Chop up the live stream into batches of X seconds.

• Spark treats each batch of data as RDDs and processes them usingRDD operations.

• Finally, the processed results of the RDD operations are returned inbatches.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 130 / 171

Page 204: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

DStream

I DStream: sequence of RDDs representing a stream of data.• TCP sockets, Twitter, HDFS, Kafka, ...

I Initializing Spark streaming

val scc = new StreamingContext(master, appName, batchDuration,

[sparkHome], [jars])

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 131 / 171

Page 205: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

DStream

I DStream: sequence of RDDs representing a stream of data.• TCP sockets, Twitter, HDFS, Kafka, ...

I Initializing Spark streaming

val scc = new StreamingContext(master, appName, batchDuration,

[sparkHome], [jars])

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 131 / 171

Page 206: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

DStream Operations (1/2)

I Transformations: modify data from on DStream to a new DStream.• Standard RDD operations (stateless/stateful operations): map, join, ...

• Window operations: group all the records from a sliding window of thepast time intervals into one RDD: window, reduceByAndWindow, ...

Window length: the duration of the window.Slide interval: the interval at which the operation is performed.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 132 / 171

Page 207: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

DStream Operations (1/2)

I Transformations: modify data from on DStream to a new DStream.• Standard RDD operations (stateless/stateful operations): map, join, ...

• Window operations: group all the records from a sliding window of thepast time intervals into one RDD: window, reduceByAndWindow, ...

Window length: the duration of the window.Slide interval: the interval at which the operation is performed.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 132 / 171

Page 208: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

DStream Operations (2/2)

I Output operations: send data to external entity• saveAsHadoopFiles, foreach, print, ...

I Attaching input sources

ssc.textFileStream(directory)

ssc.socketStream(hostname, port)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 133 / 171

Page 209: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

DStream Operations (2/2)

I Output operations: send data to external entity• saveAsHadoopFiles, foreach, print, ...

I Attaching input sources

ssc.textFileStream(directory)

ssc.socketStream(hostname, port)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 133 / 171

Page 210: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example 1 (1/3)

I Get hash-tags from Twitter.

val ssc = new StreamingContext("local[2]", "Tweets", Seconds(1))

val tweets = TwitterUtils.createStream(ssc, None)

DStream: a sequence of RDD representing a stream of data

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 134 / 171

Page 211: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example 1 (2/3)

I Get hash-tags from Twitter.

val ssc = new StreamingContext("local[2]", "Tweets", Seconds(1))

val tweets = TwitterUtils.createStream(ssc, None)

val hashTags = tweets.flatMap(status => getTags(status))

transformation: modify data in one DStreamto create another DStream

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 135 / 171

Page 212: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example 1 (3/3)

I Get hash-tags from Twitter.

val ssc = new StreamingContext("local[2]", "Tweets", Seconds(1))

val tweets = TwitterUtils.createStream(ssc, None)

val hashTags = tweets.flatMap(status => getTags(status))

hashTags.saveAsHadoopFiles("hdfs://...")

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 136 / 171

Page 213: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example 2

I Count frequency of words received every second.

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(1))

val lines = ssc.socketTextStream(ip, port)

val words = lines.flatMap(_.split(" "))

val ones = words.map(x => (x, 1))

val freqs = ones.reduceByKey(_ + _)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 137 / 171

Page 214: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example 3

I Count frequency of words received in last minute.

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(1))

val lines = ssc.socketTextStream(ip, port)

val words = lines.flatMap(_.split(" "))

val ones = words.map(x => (x, 1))

val freqs = ones.reduceByKey(_ + _)

val freqs_60s = freqs.window(Seconds(60), Second(1)).reduceByKey(_ + _)

window length window movement

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 138 / 171

Page 215: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming Hands-on Exercises (1/2)

I Stream data through a TCP connection and port 9999

nc -lk 9999

I import the streaming libraries

import org.apache.spark.streaming.{Seconds, StreamingContext}

import org.apache.spark.streaming.StreamingContext._

I Print out the incoming stream every five seconds at port 9999

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(5))

val lines = ssc.socketTextStream("127.0.0.1", 9999)

lines.print()

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 139 / 171

Page 216: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming Hands-on Exercises (1/2)

I Stream data through a TCP connection and port 9999

nc -lk 9999

I import the streaming libraries

import org.apache.spark.streaming.{Seconds, StreamingContext}

import org.apache.spark.streaming.StreamingContext._

I Print out the incoming stream every five seconds at port 9999

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(5))

val lines = ssc.socketTextStream("127.0.0.1", 9999)

lines.print()

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 139 / 171

Page 217: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming Hands-on Exercises (1/2)

I Stream data through a TCP connection and port 9999

nc -lk 9999

I import the streaming libraries

import org.apache.spark.streaming.{Seconds, StreamingContext}

import org.apache.spark.streaming.StreamingContext._

I Print out the incoming stream every five seconds at port 9999

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(5))

val lines = ssc.socketTextStream("127.0.0.1", 9999)

lines.print()

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 139 / 171

Page 218: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming Hands-on Exercises (1/2)

I Stream data through a TCP connection and port 9999

nc -lk 9999

I import the streaming libraries

import org.apache.spark.streaming.{Seconds, StreamingContext}

import org.apache.spark.streaming.StreamingContext._

I Print out the incoming stream every five seconds at port 9999

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(5))

val lines = ssc.socketTextStream("127.0.0.1", 9999)

lines.print()

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 139 / 171

Page 219: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming Hands-on Exercises (1/2)

I Stream data through a TCP connection and port 9999

nc -lk 9999

I import the streaming libraries

import org.apache.spark.streaming.{Seconds, StreamingContext}

import org.apache.spark.streaming.StreamingContext._

I Print out the incoming stream every five seconds at port 9999

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(5))

val lines = ssc.socketTextStream("127.0.0.1", 9999)

lines.print()

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 139 / 171

Page 220: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming Hands-on Exercises (1/2)

I Count the number of each word in the incoming stream every fiveseconds at port 9999

import org.apache.spark.streaming.{Seconds, StreamingContext}

import org.apache.spark.streaming.StreamingContext._

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(1))

val lines = ssc.socketTextStream("127.0.0.1", 9999)

val words = lines.flatMap(_.split(" "))

val pairs = words.map(x => (x, 1))

val wordCounts = pairs.reduceByKey(_ + _)

wordCounts.print()

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 140 / 171

Page 221: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming Hands-on Exercises (1/2)

I Count the number of each word in the incoming stream every fiveseconds at port 9999

import org.apache.spark.streaming.{Seconds, StreamingContext}

import org.apache.spark.streaming.StreamingContext._

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(1))

val lines = ssc.socketTextStream("127.0.0.1", 9999)

val words = lines.flatMap(_.split(" "))

val pairs = words.map(x => (x, 1))

val wordCounts = pairs.reduceByKey(_ + _)

wordCounts.print()

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 140 / 171

Page 222: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming Hands-on Exercises (2/2)

I Extend the code to generate word count over last 30 seconds ofdata, and repeat the computation every 10 seconds

import org.apache.spark.streaming.{Seconds, StreamingContext}

import org.apache.spark.streaming.StreamingContext._

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(5))

val lines = ssc.socketTextStream("127.0.0.1", 9999)

val words = lines.flatMap(_.split(" "))

val pairs = words.map(word => (word, 1))

val windowedWordCounts = pairs

.reduceByKeyAndWindow(_ + _, _ - _, Seconds(30), Seconds(10))

windowedWordCounts.print()

wordCounts.print()

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 141 / 171

Page 223: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Spark Streaming Hands-on Exercises (2/2)

I Extend the code to generate word count over last 30 seconds ofdata, and repeat the computation every 10 seconds

import org.apache.spark.streaming.{Seconds, StreamingContext}

import org.apache.spark.streaming.StreamingContext._

val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(5))

val lines = ssc.socketTextStream("127.0.0.1", 9999)

val words = lines.flatMap(_.split(" "))

val pairs = words.map(word => (word, 1))

val windowedWordCounts = pairs

.reduceByKeyAndWindow(_ + _, _ - _, Seconds(30), Seconds(10))

windowedWordCounts.print()

wordCounts.print()

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 141 / 171

Page 224: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 142 / 171

Page 225: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 143 / 171

Page 226: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Introduction

I Graphs provide a flexible abstraction for describing relationships be-tween discrete objects.

I Many problems can be modeled by graphs and solved with appro-priate graph algorithms.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 144 / 171

Page 227: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Large Graph

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 145 / 171

Page 228: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Large-Scale Graph Processing

I Large graphs need large-scale processing.

I A large graph either cannot fit into memory of single computer orit fits with huge cost.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 146 / 171

Page 229: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Question

Can we use platforms like MapReduce or Spark, which are based on data-parallel

model, for large-scale graph proceeding?

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 147 / 171

Page 230: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Data-Parallel Model for Large-Scale Graph Processing

I The platforms that have worked well for developing parallel applica-tions are not necessarily effective for large-scale graph problems.

I Why?

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 148 / 171

Page 231: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Graph Algorithms Characteristics (1/2)

I Unstructured problems

• Difficult to extract parallelism based on partitioning of the data: theirregular structure of graphs.

• Limited scalability: unbalanced computational loads resulting frompoorly partitioned data.

I Data-driven computations

• Difficult to express parallelism based on partitioning of computation:the structure of computations in the algorithm is not known a priori.

• The computations are dictated by nodes and links of the graph.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 149 / 171

Page 232: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Graph Algorithms Characteristics (1/2)

I Unstructured problems

• Difficult to extract parallelism based on partitioning of the data: theirregular structure of graphs.

• Limited scalability: unbalanced computational loads resulting frompoorly partitioned data.

I Data-driven computations

• Difficult to express parallelism based on partitioning of computation:the structure of computations in the algorithm is not known a priori.

• The computations are dictated by nodes and links of the graph.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 149 / 171

Page 233: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Graph Algorithms Characteristics (2/2)

I Poor data locality

• The computations and data access patterns do not have much local-ity: the irregular structure of graphs.

I High data access to computation ratio

• Graph algorithms are often based on exploring the structure of agraph to perform computations on the graph data.

• Runtime can be dominated by waiting memory fetches: low locality.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 150 / 171

Page 234: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Graph Algorithms Characteristics (2/2)

I Poor data locality

• The computations and data access patterns do not have much local-ity: the irregular structure of graphs.

I High data access to computation ratio

• Graph algorithms are often based on exploring the structure of agraph to perform computations on the graph data.

• Runtime can be dominated by waiting memory fetches: low locality.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 150 / 171

Page 235: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Proposed Solution

Graph-Parallel Processing

I Computation typically depends on the neighbors.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 151 / 171

Page 236: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Proposed Solution

Graph-Parallel Processing

I Computation typically depends on the neighbors.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 151 / 171

Page 237: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Graph-Parallel Processing

I Restricts the types of computation.

I New techniques to partition and distribute graphs.

I Exploit graph structure.

I Executes graph algorithms orders-of-magnitude faster than moregeneral data-parallel systems.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 152 / 171

Page 238: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Data-Parallel vs. Graph-Parallel Computation

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 153 / 171

Page 239: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Data-Parallel vs. Graph-Parallel Computation

I Data-parallel computation• Record-centric view of data.• Parallelism: processing independent data on separate resources.

I Graph-parallel computation• Vertex-centric view of graphs.• Parallelism: partitioning graph (dependent) data across processing

resources, and resolving dependencies (along edges) throughiterative computation and communication.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 154 / 171

Page 240: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Graph-Parallel Computation Frameworks

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 155 / 171

Page 241: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Data-Parallel vs. Graph-Parallel Computation

I Graph-parallel computation: restricting the types of computation toachieve performance.

I But, the same restrictions make it difficult and inefficient to expressmany stages in a typical graph-analytics pipeline.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 156 / 171

Page 242: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Data-Parallel vs. Graph-Parallel Computation

I Graph-parallel computation: restricting the types of computation toachieve performance.

I But, the same restrictions make it difficult and inefficient to expressmany stages in a typical graph-analytics pipeline.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 156 / 171

Page 243: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Data-Parallel and Graph-Parallel Pipeline

I Moving between table and graph views of the same physical data.

I Inefficient: extensive data movement and duplication across the net-work and file system.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 157 / 171

Page 244: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

GraphX vs. Data-Parallel/Graph-Parallel Systems

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 158 / 171

Page 245: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

GraphX vs. Data-Parallel/Graph-Parallel Systems

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 158 / 171

Page 246: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

GraphX

I New API that blurs the distinction between Tables and Graphs.

I New system that unifies Data-Parallel and Graph-Parallel systems.

I It is implemented on top of Spark.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 159 / 171

Page 247: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Unifying Data-Parallel and Graph-Parallel Analytics

I Tables and Graphs are composable views of the same physical data.

I Each view has its own operators that exploit the semantics of theview to achieve efficient execution.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 160 / 171

Page 248: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Data Model

I Property Graph: represented using two Spark RDDs:• Edge collection: VertexRDD• Vertex collection: EdgeRDD

// VD: the type of the vertex attribute

// ED: the type of the edge attribute

class Graph[VD, ED] {

val vertices: VertexRDD[VD]

val edges: EdgeRDD[ED, VD]

}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 161 / 171

Page 249: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Primitive Data Types

// Vertex collection

class VertexRDD[VD] extends RDD[(VertexId, VD)]

// Edge collection

class EdgeRDD[ED] extends RDD[Edge[ED]]

case class Edge[ED, VD](srcId: VertexId = 0, dstId: VertexId = 0,

attr: ED = null.asInstanceOf[ED])

// Edge Triple

class EdgeTriplet[VD, ED] extends Edge[ED]

I EdgeTriplet represents an edge along with the vertex attributes ofits neighboring vertices.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 162 / 171

Page 250: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example (1/3)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 163 / 171

Page 251: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example (2/3)

val sc: SparkContext

// Create an RDD for the vertices

val users: RDD[(Long, (String, String))] = sc.parallelize(

Array((3L, ("rxin", "student")), (7L, ("jgonzal", "postdoc")),

(5L, ("franklin", "prof")), (2L, ("istoica", "prof"))))

// Create an RDD for edges

val relationships: RDD[Edge[String]] = sc.parallelize(

Array(Edge(3L, 7L, "collab"), Edge(5L, 3L, "advisor"),

Edge(2L, 5L, "colleague"), Edge(5L, 7L, "pi")))

// Define a default user in case there are relationship with missing user

val defaultUser = ("John Doe", "Missing")

// Build the initial Graph

val userGraph: Graph[(String, String), String] =

Graph(users, relationships, defaultUser)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 164 / 171

Page 252: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Example (3/3)

// Constructed from above

val userGraph: Graph[(String, String), String]

// Count all users which are postdocs

userGraph.vertices.filter { case (id, (name, pos)) => pos == "postdoc" }.count

// Count all the edges where src > dst

userGraph.edges.filter(e => e.srcId > e.dstId).count

// Use the triplets view to create an RDD of facts

val facts: RDD[String] = graph.triplets.map(triplet =>

triplet.srcAttr._1 + " is the " +

triplet.attr + " of " + triplet.dstAttr._1)

// Remove missing vertices as well as the edges to connected to them

val validGraph = graph.subgraph(vpred = (id, attr) => attr._2 != "Missing")

facts.collect.foreach(println)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 165 / 171

Page 253: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Property Operators (1/2)

class Graph[VD, ED] {

def mapVertices[VD2](map: (VertexId, VD) => VD2): Graph[VD2, ED]

def mapEdges[ED2](map: Edge[ED] => ED2): Graph[VD, ED2]

def mapTriplets[ED2](map: EdgeTriplet[VD, ED] => ED2): Graph[VD, ED2]

}

I They yield new graphs with the vertex or edge properties modifiedby the map function.

I The graph structure is unaffected.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 166 / 171

Page 254: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Property Operators (2/2)

val newGraph = graph.mapVertices((id, attr) => mapUdf(id, attr))

val newVertices = graph.vertices.map((id, attr) => (id, mapUdf(id, attr)))

val newGraph = Graph(newVertices, graph.edges)

I Both are logically equivalent, but the second one does not preservethe structural indices and would not benefit from the GraphX systemoptimizations.

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 167 / 171

Page 255: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Map Reduce Triplets

I Map-Reduce for each vertex

// what is the age of the oldest follower for each user?

val oldestFollowerAge = graph.mapReduceTriplets(

e => Iterator((e.dstAttr, e.srcAttr)), // Map

(a, b) => max(a, b) // Reduce

).vertices

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 168 / 171

Page 256: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Map Reduce Triplets

I Map-Reduce for each vertex

// what is the age of the oldest follower for each user?

val oldestFollowerAge = graph.mapReduceTriplets(

e => Iterator((e.dstAttr, e.srcAttr)), // Map

(a, b) => max(a, b) // Reduce

).vertices

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 168 / 171

Page 257: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Structural Operators

class Graph[VD, ED] {

// returns a new graph with all the edge directions reversed

def reverse: Graph[VD, ED]

// returns the graph containing only the vertices and edges that satisfy

// the vertex predicate

def subgraph(epred: EdgeTriplet[VD,ED] => Boolean,

vpred: (VertexId, VD) => Boolean): Graph[VD, ED]

// a subgraph by returning a graph that contains the vertices and edges

// that are also found in the input graph

def mask[VD2, ED2](other: Graph[VD2, ED2]): Graph[VD, ED]

}

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 169 / 171

Page 258: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Structural Operators Example

// Build the initial Graph

val graph = Graph(users, relationships, defaultUser)

// Run Connected Components

val ccGraph = graph.connectedComponents()

// Remove missing vertices as well as the edges to connected to them

val validGraph = graph.subgraph(vpred = (id, attr) => attr._2 != "Missing")

// Restrict the answer to the valid subgraph

val validCCGraph = ccGraph.mask(validGraph)

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 170 / 171

Page 259: The Spark Big Data Analytics Platform - payberah.github.io · Big Data - File systems I Traditional le-systems are not well-designed for large-scale data processing systems. I E ciencyhas

Questions?

Amir H. Payberah (Tehran Polytechnic) Spark 1393/10/10 171 / 171