Spark Programming Essentials

Similar documents
Distributed Systems. 22. Spark. Paul Krzyzanowski. Rutgers University. Fall 2016

Intro to Apache Spark

Introduction to Apache Spark

MapReduce Algorithm Design

Hadoop Distributed File System(HDFS)

COSC 6339 Big Data Analytics. Introduction to Spark. Edgar Gabriel Fall What is SPARK?

An Introduction to Apache Spark

Big Data Analytics with Apache Spark. Nastaran Fatemi

Spark Overview. Professor Sasu Tarkoma.

Spark DAO

Beyond MapReduce: Apache Spark Antonino Virgillito

Data processing in Apache Spark

Data processing in Apache Spark

Data processing in Apache Spark

Analytics in Spark. Yanlei Diao Tim Hunter. Slides Courtesy of Ion Stoica, Matei Zaharia and Brooke Wenig

EPL660: Information Retrieval and Search Engines Lab 11

Spark supports several storage levels

15/04/2018. Spark supports several storage levels. The storage level is used to specify if the content of the RDD is stored

Data-intensive computing systems

Distributed Systems. 20. Other parallel frameworks. Paul Krzyzanowski. Rutgers University. Fall 2017

CS November 2017

CS435 Introduction to Big Data FALL 2018 Colorado State University. 10/24/2018 Week 10-B Sangmi Lee Pallickara

Distributed Systems. 21. Other parallel frameworks. Paul Krzyzanowski. Rutgers University. Fall 2018

TUTORIAL: BIG DATA ANALYTICS USING APACHE SPARK

CS November 2018

Processing of big data with Apache Spark

MapReduce, Hadoop and Spark. Bompotas Agorakis

2/4/2019 Week 3- A Sangmi Lee Pallickara

Introduction to Apache Spark. Patrick Wendell - Databricks

The detailed Spark programming guide is available at:

Big Data Frameworks: Spark Practicals

Apache Spark Internals

Spark and Spark SQL. Amir H. Payberah. SICS Swedish ICT. Amir H. Payberah (SICS) Spark and Spark SQL June 29, / 71

An Introduction to Big Data Analysis using Spark

CSE 444: Database Internals. Lecture 23 Spark

Spark supports several storage levels

Applied Spark. From Concepts to Bitcoin Analytics. Andrew F.

Apache Spark. CS240A T Yang. Some of them are based on P. Wendell s Spark slides

DATA SCIENCE USING SPARK: AN INTRODUCTION

A very short introduction

Dell In-Memory Appliance for Cloudera Enterprise

Big data systems 12/8/17

Big Data Infrastructures & Technologies

Spark, Shark and Spark Streaming Introduction

Introduction to Apache Spark

THE CONTRACTOR IS ACTING UNDER A FRAMEWORK CONTRACT CONCLUDED WITH THE COMMISSION

빅데이터기술개요 2016/8/20 ~ 9/3. 윤형기

CS455: Introduction to Distributed Systems [Spring 2018] Dept. Of Computer Science, Colorado State University

Apurva Nandan Tommi Jalkanen

Overview. Prerequisites. Course Outline. Course Outline :: Apache Spark Development::

An Introduction to Apache Spark Big Data Madison: 29 July William Red Hat, Inc.

L6: Introduction to Spark Spark

Intro To Spark. John Urbanic Parallel Computing Scientist Pittsburgh Supercomputing Center. Copyright 2017

Intro To Spark. John Urbanic Parallel Computing Scientist Pittsburgh Supercomputing Center. Copyright 2017

Big Data & Hadoop Environment

Introduction to Spark

Reactive App using Actor model & Apache Spark. Rahul Kumar Software

Cloud Computing & Visualization

Data Intensive Computing Handout 9 Spark

Hadoop Development Introduction

Shuffling, Partitioning, and Closures. Parallel Programming and Data Analysis Heather Miller

Chapter 4: Apache Spark

08/04/2018. RDDs. RDDs are the primary abstraction in Spark RDDs are distributed collections of objects spread across the nodes of a clusters

L3: Spark & RDD. CDS Department of Computational and Data Sciences. Department of Computational and Data Sciences

RDDs are the primary abstraction in Spark RDDs are distributed collections of objects spread across the nodes of a clusters

2/26/2017. RDDs. RDDs are the primary abstraction in Spark RDDs are distributed collections of objects spread across the nodes of a clusters

An Overview of Apache Spark

Lambda Architecture with Apache Spark

Lambda Architecture for Batch and Real- Time Processing on AWS with Spark Streaming and Spark SQL. May 2015

Data Engineering. How MapReduce Works. Shivnath Babu

CS Spark. Slides from Matei Zaharia and Databricks

Running Kmeans Spark on EC2 Documentation

Research challenges in data-intensive computing The Stratosphere Project Apache Flink

15.1 Data flow vs. traditional network programming

25/05/2018. Spark Streaming is a framework for large scale stream processing

Resilient Distributed Datasets

Guidelines For Hadoop and Spark Cluster Usage

Spark 2. Alexey Zinovyev, Java/BigData Trainer in EPAM

Lijuan Zhuge & Kailai Xu May 3, 2017 In this short article, we describe how to set up spark on clusters and the basic usage of pyspark.

Big Data Analytics. C. Distributed Computing Environments / C.2. Resilient Distributed Datasets: Apache Spark. Lars Schmidt-Thieme

RESILIENT DISTRIBUTED DATASETS: A FAULT-TOLERANT ABSTRACTION FOR IN-MEMORY CLUSTER COMPUTING

Spark Streaming: Hands-on Session A.A. 2017/18

Agenda. Spark Platform Spark Core Spark Extensions Using Apache Spark

Analytic Cloud with. Shelly Garion. IBM Research -- Haifa IBM Corporation

Spark Streaming. Guido Salvaneschi

Big Streaming Data Processing. How to Process Big Streaming Data 2016/10/11. Fraud detection in bank transactions. Anomalies in sensor data

Big Data Analytics with Hadoop and Spark at OSC

Cloud, Big Data & Linear Algebra

Today s content. Resilient Distributed Datasets(RDDs) Spark and its data model

Certification Study Guide. MapR Certified Spark Developer v1 Study Guide

Homework 3: Wikipedia Clustering Cliff Engle & Antonio Lupher CS 294-1

Certified Big Data Hadoop and Spark Scala Course Curriculum

Lecture 4, 04/08/2015. Scribed by Eric Lax, Andreas Santucci, Charles Zheng.

本文转载自 :

CME 323: Distributed Algorithms and Optimization Instructor: Reza Zadeh HW#3 - Due at the beginning of class May 18th.

CS246: Mining Massive Datasets Crash Course in Spark

Scala and the JVM for Big Data: Lessons from Spark

We consider the general additive objective function that we saw in previous lectures: n F (w; x i, y i ) i=1

Big Data Hadoop Course Content

Blended Learning Outline: Developer Training for Apache Spark and Hadoop (180404a)

Transcription:

Spark Programming Essentials Bu eğitim sunumları İstanbul Kalkınma Ajansı nın 2016 yılı Yenilikçi ve Yaratıcı İstanbul Mali Destek Programı kapsamında yürütülmekte olan TR10/16/YNY/0036 no lu İstanbul Big Data Eğitim ve Araştırma Merkezi Projesi dahilinde gerçekleştirilmiştir. İçerik ile ilgili tek sorumluluk Bahçeşehir Üniversitesi ne ait olup İSTKA veya Kalkınma Bakanlığı nın görüşlerini yansıtmamaktadır.

Spark Essentials: using, Spak Shell:./bin/spark-shell./bin/pyspark alternatively, with IPython Notebook: IPYTHON_OPTS="notebook --pylab inline"./bin/pyspark 2

Spark Essentials: SparkContext First thing that a Spark program does is create a SparkContext object, which tells Spark how to access a cluster In the shell for either Scala or Python, this is the sc variable, which is created automatically Other programs must use a constructor to instantiate a new SparkContext Then in turn SparkContext gets used to create other variables 3

Spark Essentials: SparkContext Scala: scala> sc res: spark.sparkcontext = spark.sparkcontext@470d1f30 Python: >>> sc <pyspark.context.sparkcontext object at 0x7f7570783350> 4

Spark Essentials: Master The master parameter for a SparkContext determines which cluster to use master local local[k] spark://host:port mesos://host:port description run Spark locally with one worker thread (no parallelism) run Spark locally with K worker threads (ideally set to # cores) connect to a Spark standalone cluster; PORT depends on config (7077 by default) connect to a Mesos cluster; PORT depends on config (5050 by default) 5

Spark Essentials: Clusters 1. master connects to a cluster manager to allocate resources across applications 2. acquires executors on cluster nodes processes run compute tasks, cache data 3. sends app code to the executors 4. sends tasks for the executors to run Worker Node Executor task cache task Driver Program SparkContext Cluster Manager Worker Node Executor task cache task 6

Spark Essentials: RDD Resilient Distributed Datasets (RDD) are the primary abstraction in Spark a fault-tolerant collection of elements that can be operated on in parallel two types of operations on RDDs: transformations and actions transformations are lazy (not computed immediately) the transformed RDD gets recomputed when an action is run on it (default) however, an RDD can be persisted into storage in memory or disk

Spark Essentials: RDD Scala: scala> val data = Array(1, 2, 3, 4, 5) data: Array[Int] = Array(1, 2, 3, 4, 5) scala> val distdata = sc.parallelize(data) distdata: spark.rdd[int] = spark.parallelcollection@10d13e3e 8

Spark Essentials: RDD Spark can create RDDs from any file stored in HDFS or other storage systems supported by Hadoop, e.g., local file system,amazon S3, Hypertable, HBase, etc. Spark supports text files, SequenceFiles, and any other Hadoop InputFormat, and can also take a directory or a glob (e.g. /data/201404*) transformations RDD RDD RDD RDD action value 9

Spark Essentials: RDD Scala: scala> val distfile = sc.textfile("readme.md") distfile: spark.rdd[string] = spark.hadooprdd@1d4cee08 10

Spark Essentials: Transformations Transformations create a new dataset from an existing one All transformations in Spark are lazy: they do not compute their results right away instead they remember the transformations applied to some base dataset optimize the required calculations recover from lost data partitions 11

Spark Transformations map() intersection() cartesion() flatmap() distinct() pipe() filter() groupbykey() coalesce() mappartitions() reducebykey() repartition() mappartitionswithindex() sortbykey() partitionby() sample() join()... union() cogroup()

Spark Essentials: Transformations map(func) transformation description return a new distributed dataset formed by passing each element of the source through a function func filter(func) return a new dataset formed by selecting those elements of the source on which func returns true flatmap(func) similar to map, but each input item can be mapped to 0 or more output items (so func should return a Seq rather than a single item) sample(withreplacement, fraction, seed) union(otherdataset) distinct([numtasks])) sample a fraction fraction of the data, with or without replacement, using a given random number generator seed return a new dataset that contains the union of the elements in the source dataset and the argument return a new dataset that contains the distinct elements of the source dataset 13

Spark Essentials: Transformations transformation groupbykey([numtasks]) reducebykey(func, [numtasks]) sortbykey([ascending], [numtasks]) join(otherdataset, [numtasks]) cogroup(otherdataset, [numtasks]) cartesian(otherdataset) description when called on a dataset of (K, V) pairs, returns a dataset of (K, Seq[V]) pairs when called on a dataset of (K, V) pairs, returns a dataset of (K, V) pairs where the values for each key are aggregated using the given reduce function when called on a dataset of (K, V) pairs where K implements Ordered, returns a dataset of (K, V) pairs sorted by keys in ascending or descending order, as specified in the boolean ascending argument when called on datasets of type (K, V) and (K, W), returns a dataset of (K, (V, W)) pairs with all pairs of elements for each key when called on datasets of type (K, V) and (K, W), returns a dataset of (K, Seq[V], Seq[W]) tuples also called groupwith when called on datasets of types T and U, returns a dataset of (T, U) pairs (all pairs of elements) 14

Spark Essentials: Transformations Scala: val distfile = sc.textfile("readme.md") distfile.map(l => l.split(" ")).collect() distfile.flatmap(l => l.split(" ")).collect() distfile is a collection of lines looking at the output, how would you compare results for map() vs. flatmap()? 15

Spark Actions reduce() takeordered() collect() saveastextfile() count() saveassequencefile() first() saveasobjectfile() take() countbykey() takesample() foreach() savetocassandra()...

Spark Essentials: Actions reduce(func) collect() count() first() take(n) action takesample(withreplacement, fraction, seed) description aggregate the elements of the dataset using a function func (which takes two arguments and returns one), and should also be commutative and associative so that it can be computed correctly in parallel return all the elements of the dataset as an array at the driver program usually useful after a filter or other operation that returns a sufficiently small subset of the data return the number of elements in the dataset return the first element of the dataset similar to take(1) return an array with the first n elements of the dataset currently not executed in parallel, instead the driver program computes all the elements return an array with a random sample of num elements of the dataset, with or without replacement, using the given random number generator seed 17

Spark Essentials: Actions action saveastextfile(path) saveassequencefile(path) countbykey() foreach(func) description write the elements of the dataset as a text file (or set of text files) in a given directory in the local filesystem, HDFS or any other Hadoop-supported file system. Spark will call tostring on each element to convert it to a line of text in the file write the elements of the dataset as a Hadoop SequenceFile in a given path in the local filesystem, HDFS or any other Hadoop-supported file system. Only available on RDDs of key-value pairs that either implement Hadoop's Writable interface or are implicitly convertible to Writable (Spark includes conversions for basic types like Int, Double, String, etc). only available on RDDs of type (K, V). Returns a `Map` of (K, Int) pairs with the count of each key run a function func on each element of the dataset usually done for side effects such as updating an accumulator variable or interacting with external storage systems 18

Spark Essentials: Actions Scala: val f = sc.textfile("readme.md") val words = f.flatmap(l => l.split(" ")).map(word words.reducebykey(_ + _).collect.foreach(println) => (word, 1)) 19

Spark Essentials: Persistence Spark can persist (or cache) a dataset in memory across operations Each node stores in memory any slices of it that it computes and reuses them in other actions on that dataset often making future actions more than 10x faster The cache is fault-tolerant: if any partition of an RDD is lost, it will automatically be recomputed using the transformations that originally created it 20

Spark Essentials: Persistence MEMORY_ONLY transformation MEMORY_AND_DISK MEMORY_ONLY_SER MEMORY_AND_DISK_SER DISK_ONLY MEMORY_ONLY_2, MEMORY_AND_DISK_2, etc description Store RDD as deserialized Java objects in the JVM. If the RDD does not fit in memory, some partitions will not be cached and will be recomputed on the fly each time they're needed.this is the default level. Store RDD as deserialized Java objects in the JVM. If the RDD does not fit in memory, store the partitions that don't fit on disk, and read them from there when they're needed. Store RDD as serialized Java objects (one byte array per partition).this is generally more space-efficient than deserialized objects, especially when using a fast serializer, but more CPU-intensive to read. Similar to MEMORY_ONLY_SER, but spill partitions that don't fit in memory to disk instead of recomputing them on the fly each time they're needed. Store the RDD partitions only on disk. Same as the levels above, but replicate each partition on two cluster nodes. See: http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence 21

Spark Essentials: Persistence Scala: val f = sc.textfile("readme.md") val w = f.flatmap(l => l.split(" ")).map(word w.reducebykey(_ + _).collect.foreach(println) => (word, 1)).cache() 22

Spark Essentials: Broadcast Variables Broadcast variables let programmer keep a read-only variable cached on each machine rather than shipping a copy of it with tasks For example, to give every node a copy of a large input dataset efficiently Spark also attempts to distribute broadcast variables using efficient broadcast algorithms to reduce communication cost 23

Spark Essentials: Broadcast Variables Scala: val broadcastvar = sc.broadcast(array(1, broadcastvar.value 2, 3)) 24

Spark Essentials: Accumulators Accumulators are variables that can only be added to through an associative operation Used to implement counters and sums, efficiently in parallel Spark natively supports accumulators of numeric value types and standard mutable collections, and programmers can extend for new types Only the driver program can read an accumulator s value, not the tasks 25

Spark Essentials: Accumulators Scala: val accum = sc.accumulator(0) sc.parallelize(array(1, 2, 3, 4)).foreach(x => accum += x) accum.value driver-side 26

Spark Essentials: (K,V) pairs Scala: val pair = (a, b) pair._1 // => a pair._2 // => b Python: pair = (a, b) pair[0] pair[1] # => a # => b Java: Tuple2 pair = new Tuple2(a, b); pair._1 // => a pair._2 // => b 27

Spark Programming - Deployment

Spark in Production: In the following, let s consider the progression through a full software development lifecycle, step by step: 1. build 2. deploy 3. monitor 29

Spark in Production: Build: SBT builds: SBT primer build/run a JAR using Scala + SBT 30

Spark in Production: Build: SBT SBT is the Simple Build Tool for Scala: www.scala-sbt.org/ This is included with the Spark download, and does not need to be installed separately. it provides for incremental compilation and an interactive shell, among other innovations. SBT project uses StackOverflow for Q&A, that s a good resource to study further: stackoverflow.com/tags/sbt 31

Spark in Production: Build: SBT command clean package run compile test console help description delete all generated files (in the target directory) create a JAR file run the JAR (or main class, if named) compile the main sources (in src/main/scala and src/main/java directories) compile and run all tests launch a Scala interpreter display detailed help for specified commands 32

Spark in Production: Build: Scala builds: SBT primer build/run a JAR using Scala + SBT 33

Spark in Production: Build: Scala The following sequence shows how to build a JAR file from a Scala app, using SBT First, this requires the source download, not the binary Connect into the SPARK_HOME directory Then run the following commands 34

Spark in Production: Build: Scala # Scala source + SBT build script on following slides cd simple-app../spark/bin/spark-submit \ --class "SimpleApp" \ --master local[*] \ target/scala-2.10/simple-project_2.10-1.0.jar 35

Spark in Production: Build: Scala /*** SimpleApp.scala ***/ import org.apache.spark.sparkcontext import org.apache.spark.sparkcontext._ object SimpleApp { def main(args: Array[String]) { val logfile = "README.md" // Should be some file on your system val sc = new SparkContext("local", "Simple App", "SPARK_HOME", List("target/scala-2.10/simple-project_2.10-1.0.jar")) val logdata = sc.textfile(logfile, 2).cache() val numas = logdata.filter(line => line.contains("a")).count() val numbs = logdata.filter(line => line.contains("b")).count() } } println("lines with a: %s, Lines with b: %s".format(numas, numbs)) 36

Spark in Production: Build: Scala name := "Simple Project" version := "1.0" scalaversion := "2.10.4" librarydependencies += "org.apache.spark" % "spark-core_2.10" % "1.2.0" resolvers += "Akka Repository" at "http://repo.akka.io/releases/" 37

Spark in Production: Deploy deploy JAR to Hadoop cluster, using these alternatives: run on Apache Mesos run on EC2 or, simply run the JAR on YARN 38

Spark in Production: Deploy: Mesos Running Spark on Apache Mesos spark.apache.org/docs/latest/running-on-mesos.html For example:./bin/spark-submit \ --class org.apache.spark.examples.sparkpi \ --master mesos://***.***.***.***:7077 \ --deploy-mode cluster \ --supervise \ --executor-memory 20G \ --total-executor-cores 100 \ http://path/to/examples.jar \ 1000 39

Spark in Production: Deploy: EC2 Running Spark on Amazon AWS EC2: blogs.aws.amazon.com/bigdata/post/tx15ay5c50k70rv/ Installing-Apache-Spark-on-an-Amazon-EMR-Cluster 40

Spark in Production: Deploy:YARN spark.apache.org/docs/latest/running-on-yarn.html Simplest way to deploy Spark apps in production Does not require admin, just deploy apps to your Hadoop cluster 41

Spark in Production: Deploy: HDFS examples Exploring data sets loaded from HDFS 1. launch a Spark cluster using EC2 script 2. load data files into HDFS 3. run Spark shell to perform WordCount 42

Spark in Production: Deploy: HDFS examples # http://spark.apache.org/docs/latest/ec2-scripts.html cd $SPARK_HOME/ec2 export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_KEY./spark-ec2 -k spark -i ~/spark.pem -s 2 -z us-east-1b launch foo # can review EC2 instances and their security groups to identify master # ssh into master./spark-ec2 -k spark -i ~/spark.pem -s 2 -z us-east-1b login foo # use./ephemeral-hdfs/bin/hadoop to access HDFS /root/hdfs/bin/hadoop fs -mkdir /tmp /root/hdfs/bin/hadoop fs -put CHANGES.txt /tmp # now is the time when we Spark cd /root/spark export SPARK_HOME=$(pwd) SPARK_HADOOP_VERSION=1.0.4 sbt/sbt assembly /root/hdfs/bin/hadoop fs./bin/spark-shell -put CHANGES.txt /tmp 43

Spark in Production: Deploy: HDFS examples /** NB: replace host IP with EC2 internal IP address **/ val f = sc.textfile("hdfs://10.72.61.192:9000/foo/changes.txt") val counts = f.flatmap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _) counts.collect().foreach(println) counts.saveastextfile("hdfs://10.72.61.192:9000/foo/wc") 44

Spark in Production: Deploy: HDFS examples Let s check the results in HDFS root/hdfs/bin/hadoop fs -cat /tmp/wc/part-* (Adds,1) (alpha,2) (ssh,1) (graphite,1) (canonical,2) (ASF,3) (display,4) (synchronization,2) (instead,7) (javadoc,1) (hsaputra/update-pom-asf,1) 45

Spark in Production: Monitor review UI features spark.apache.org/docs/latest/monitoring.html http://<master>:8080/ http:/ /<master>:50070/ verify: is my job still running? drill-down into workers and stages diagnose / troubleshoot 46