Meetup Spark 2.0

download Meetup Spark 2.0

of 43

  • date post

    16-Apr-2017
  • Category

    Engineering

  • view

    254
  • download

    2

Embed Size (px)

Transcript of Meetup Spark 2.0

2 Junio 2016

SPARK 2.0

Quin soySPARK 2.0

Jos Carlos Garca Serrano

Arquitecto Big Data en Stratio.

Granadino e ingeniero por la ETSII, master de Big Data en la UTad, certificado en Spark y AWS

Amante de las nuevas tecnologas y de las arquitecturas basadas en Big Data

FanBoy de cosas como:

ScalaSparkAkkaMongoDBCassandra

Pero todos tenemos un pasado:

DelphiC++BBDD SQLHadoop

Jos Carlos Garca SerranoArquitecto Big Datajcgarcia@stratio.comCONTACTONDICEINTRODUCCIN

1

2

3OPTIMIZACIN

MemoriaFunciones

SPARK CORE

AcumuladoresBlock Manager

SPARK SQL

Spark SessionDataSet API

4

5

6SPARK STREAMING

Streaming Sql APISPARK MLlib

Persistencia

1INTRODUCCIN

SPARK 2.0

El Software siempre es mejorable y Spark no es menos .

Buscar reloj para reemplazar la O.

#

SPARK 2.0DE VERDAD ??ESTA GENTE SABE ....

1. INTRODUCCIN

Spark 2.0

Disponible en Databricks PlatformDisponible descarga de SnapshotLanzamiento inminentePresentado en Spark SummitMs rpido, ms fcil y ms inteligenteMejoradas todas las APIs de Spark:Streaming, Sql, Mllib, Graphx

2OPTIMIZACIN

SPARK 2.0

2. OPTIMIZACIN > MEMORIAProblema

La mayora de los ciclos de CPU se gastan en cosas intiles como esperas al leer y escribir datos de cach de CPU o de memoria

SPARK 2.0

2. OPTIMIZACIN > MEMORIAObjetivos

Gestionar la memoria de ejecucin (shuffle, joins) y memoria de almacenamiento (memoria usada para cachear datos que son reusados)Gestionar la memoria entre tareas que corren en paraleloGestionar la memoria entre operadores de una misma tarea

SPARK 2.0SPARK 1.4 PROJECT TUNGSTENTUNGSTEN 2.0

2. OPTIMIZACIN > MEMORIA

Memory ManagementCache - AwareWhole-stage code generationVectorization

SPARK 2.0

2. OPTIMIZACIN > MEMORIA2.1.1 Memory Management

Los objetos de Java consumen ms memoria de la que deberanabcd 4 bytes en Nativo UTF-8 y 48 bytes en JavaEl GC de Java tiende a sobre trabajar y no tiene suficiente info.

Spark ha implementado un gestor de memoria Explcito para objetos java, C-style

SPARK 2.0

2. OPTIMIZACIN > MEMORIA

Librera de bajo nivel provista por Java sun.misc.Unsafe

SPARK 2.0

2. OPTIMIZACIN > MEMORIA2.1.2 Cache - Aware

Reduce el tiempo de espera de datos de memoria de CPU y aumenta el tiempo tilGuarda en el Array de punteros la clave (64 bit -> 128 bit)PtrValueKeyNativoPtrValueKeyCache-AwareOrdenacin con menos accesos random a memoriaaggregations-sorting-joins

SPARK 2.0

2. OPTIMIZACIN > MEMORIA2.1.3 Whole-stage code generation

Generacin de bytecode en tiempo de ejecucinSe empez en Spark 1.4 con ciertas funciones sql (Catalyst)Genera cdigo simple para funciones complejas y genera menos registros en cach de CPULas CPU actuales estn optimizadas para bucles simplesIncrementa el rendimiento en la serializacin por lo que optimiza la fase de shuffle

SPARK 2.0

Pasado(Vulcano)Presente(college freshman)

SPARK 2.0AntesAhora== Physical Plan ==*Aggregate(functions=[sum(id#201L)])+- Exchange SinglePartition, None+- *Aggregate(functions=[sum(id#201L)])+- *Filter (id#201L > 100)+- *Range 0, 1, 3, 1000, [id#201L]== Physical Plan ==*TungstenAggregate(key=[],functions=[(sum(id#201L),mode=Final,isDistinct=false)], output=[sum(id)#212L])+- Exchange SinglePartition, None+- *TungstenAggregate(key=[], functions=[(sum(id#201L),mode=Partial,isDistinct=false)], output=[sum#214L])+- *Filter (id#201L > 100)+- *Range 0, 1, 3, 1000, [id#201L]

SPARK 2.0

SQL ??

SPARK 2.0

SPARK 2.0

SPARK 2.0

2. OPTIMIZACIN > MEMORIA2.1.4 Vectorization

Operaciones complejas no pueden ser abstradas a una funcinHay que integrar libreras externas (csv, parquet)

Opera sobre varias rows, pasa a un formato columnar!!recordemos > CPUs optimizadas para bucles simples!!

SPARK 2.0

SPARK 2.0

2. OPTIMIZACIN > FUNCIONES2.2 Funciones

Integracin de algoritmos aproximados en DataFrames y Datasets.HyperLogLog - CountMinSketch - BloomFiltersApproxCountDistinctEstimacin del nmero de elementos distintos que hay en una coleccinApproxQuantileDevuelve una aproximacin a los percentilesEjm. approx_count = users.agg(approxCountDistinct(users['user'], rsd = rsd))

Jugamos con el margen de error, ms margen => ms rpido

SPARK 2.0

ApproxCountDistinct en funcin del margen elegido

3SPARK CORE

SPARK 2.0

3. SPARK CORE > ACUMULADORES3.1 Acumuladores

Nueva API de acumuladores con un performance mejoradoAccumulatorContext para acceder y crearAPI para implementar nuestros acumuladores propiosImplementado el Long - Double con cosas como sum, count, and averages

val acc = new LongAccumulatoracc.setValue(100L)acc.metadata = AccumulatorMetadata(1L, Some("longAccumulator"), false)AccumulatorContext.register(acc)val accAvg = acc.avgval accSum = acc.sumval accCount = acc.countval longAccumulator = AccumulatorContext.get(acc.id)

SPARK 2.0

3. SPARK CORE > Block Manager3.2 External Block Manager Genrico

Se han eliminado las clases que hacan uso de TachyonSe han eliminado en ciertos casos movimiento de datos por Http

4SPARK SQL

SPARK 2.0

4. SPARK SQLPrincipales funcionalidades

Olvidar SqlContext y pensar en SparkSessionUnificar API DataFrames/Datasets en Scala/Java en DataSetsLenguaje SQL extendido para un soporte del 99% TPC-DS queriesEjecutar SQL directamente sobre ficheroshadoop - text - csv - parquet

SPARK 2.0

4. SPARK SQL > SPARK SESSION4.1 SparkSession

Deprecamos SQLContextVarias sesiones simultneas independientes con sus propios catlogosCrea un SparkContext si no ha sido creado previamenteAsignacion de parametros en calientesparkSession.conf.set("spark.some.config", "abcd")Funciones para listar, buscar y modificar el catlogo de tablasOpciones de configuracin como variables de sustitucin en SQLsparkSession.sql("select '${spark.some.config}'")

Vemos un poco de cdigo en Intellij ...

SPARK 2.0

4. SPARK SQL > API DataSet4.2 API Dataset

Unificada la API de DataFrames y Datasettype DataFrame = DataSet[Row]No disponible en R ni PythonDataSet tipados y no tipados:Operaciones sobre tipados y no tipados (map, select, etc...)Agregaciones

5SPARK Streaming

SPARK 2.0

5. SPARK STREAMINGPrincipales funcionalidades

Sql sobre streaming estructurado:TriggersAgregaciones continuasEliminados los mdulos:TwitterZeroMQMQTTAkka

SPARK 2.0

5. SPARK STREAMING > SQL STREAMING API5.1 SQL Streaming API

Implementado dentro del mdulo de SQLAPI batch y streaming unificadaStatic DataFrame -> Infinite DataFrameIndependiente de DStreams API

Cambiar queries en tiempo real, aplicar a ML y sink por JDBC

SPARK 2.0

SPARK 2.0

5. SPARK STREAMING > SQL STREAMING APIContinuous aggregations

val peopleAgg = sparkSession.read.json("/home/jcgarcia/meetupSql.json")peopleAgg.groupBy("id").agg(sum("age")) .write .mode(SaveMode.Overwrite) .parquet("/home/jcgarcia/parquetAgg1.parquet")

val peopleAgg2 = sparkSession.read.format("json").stream("/home/jcgarcia/streamingexample")peopleAgg2.groupBy("id").agg(sum("age")) .write .option("queryName", "queryStreaming") .mode(SaveMode.Overwrite) .parquet("/home/jcgarcia/parquetAgg2.parquet")Batch aggregationContinuous aggregation

SPARK 2.0

5. SPARK STREAMING > SQL STREAMING APITriggers

val peopleAgg2 = sparkSession.read.format("json").stream("/home/jcgarcia/streamingexample")peopleAgg2.groupBy("id").agg(sum("age")) .write.option("queryName", "queryStreaming").trigger(ProcessingTime("10 seconds"))

SPARK 2.0

5. SPARK STREAMING > SQL STREAMING APIEjecucin

val peopleAgg2 = sparkSession.read.format("json").stream("/home/jcgarcia/streamingexample")peopleAgg2.groupBy("id").agg(sum("age")) .write.option("queryName", "queryStreaming") .trigger(ProcessingTime("10 seconds")) .startStream() .awaitTermination()

6SPARK MLlib

SPARK 2.0

6. SPARK MLlib > PERSISTENCIA PIPELINES6.1 Persistencia Pipelines

Salvar y cargar Pipelines completosSalvar y cargar modelos individuales

Veamos dos ejemplos ....

SPARK 2.0

6. SPARK MLlib > PERSISTENCIA PIPELINESK-Means clustering model

val kmeans = new KMeans().setK(10).setSeed(12345)val model = kmeans.fit(training)

model.save(basePath + "/model")val sameModel = KMeansModel.load(basePath + "/model")

from pyspark.ml.clustering import KMeansModelpyModel = KMeansModel.load(basePath + "/model")

SPARK 2.0

6. SPARK MLlib > PERSISTENCIA PIPELINESPipeline

val scaler = new StandardScaler().setInputCol("features").setOutputCol("scaledFeatures")kmeans.setFeaturesCol("scaledFeatures")val pipeline = new Pipeline().setStages(Array(scaler, kmeans))

pipeline.save(basePath + "/pipeline")val samePipeline = Pipeline.load(basePath + "/pipeline")

SPARK 2.0Y para otro meetup ..

Re Architecting Spark for Mobile Platforms??? ;)

https://databricks.com/blog/2015/04/01/spark-2-rearchitecting-spark-for-mobile.html

BIG DATACHILD`S PLAYGracias!!

Stratio busca Talento

Contacto:jcgarcia@stratio.comes.linkedin.com/in/gserranojc