integración de datastax de spark con cassandra

36
Spark & Cassandra Un vistazo al conector de DataStax @javituiter www.franciscojavierpulido.com

Upload: francisco-javier-pulido-pinero

Post on 30-Nov-2014

307 views

Category:

Engineering


7 download

DESCRIPTION

En el Cassandra Meet Up de Madrid estuve hablando de la Integración de DataStax de Spark con Cassandra.

TRANSCRIPT

Page 1: Integración de DataStax de Spark con Cassandra

Spark & CassandraUn vistazo al conector de DataStax

@javituiter

www.franciscojavierpulido.com

Page 2: Integración de DataStax de Spark con Cassandra

Anteriormente…

Page 3: Integración de DataStax de Spark con Cassandra

Apache Cassandra

N

N N

N

Page 4: Integración de DataStax de Spark con Cassandra

Apache Spark

M

W WW W

RDD

Page 5: Integración de DataStax de Spark con Cassandra

Alianza

Jhonathan EllisPresidente Apache Cassandra

Matei ZahariaCreador de Apache Spark

Page 6: Integración de DataStax de Spark con Cassandra

¿Cuándo?

Page 7: Integración de DataStax de Spark con Cassandra

¿Cuándo?

LANZAMIENTOjulio

2014

Page 8: Integración de DataStax de Spark con Cassandra

El Conector

Page 9: Integración de DataStax de Spark con Cassandra

Características

RDD TablaN

N N

N

MW WW W

Page 10: Integración de DataStax de Spark con Cassandra

Características

RDD TablaN

N N

N

MW WW W

RDD TablaN

N N

N

MW WW W

Mapping de Filas de C* como Tuplas

Guarda RDDs en C*(saveToCassandra)

Soporta todos los tipos de datos de C*

Filtrado de filas (en C*) mediante Where

Más en la web oficial.

Page 11: Integración de DataStax de Spark con Cassandra

Arquitectura

N

N N

N

M

W WW W

Page 12: Integración de DataStax de Spark con Cassandra

Arquitectura

N

M

N N N

W WW W

N

Page 13: Integración de DataStax de Spark con Cassandra

Ejecución

>Spark-Shell

Scala Java

Recomendado:· intelliJ· SBT· Scala

Page 14: Integración de DataStax de Spark con Cassandra

Comunidad

Page 15: Integración de DataStax de Spark con Cassandra

Impacto

Page 16: Integración de DataStax de Spark con Cassandra

Impacto

Page 17: Integración de DataStax de Spark con Cassandra

¿Por qué?

Page 18: Integración de DataStax de Spark con Cassandra

Clientes

C DA B E F

Page 19: Integración de DataStax de Spark con Cassandra

Demanda

Custodia Total :: Analítica del Histórico

Page 20: Integración de DataStax de Spark con Cassandra

¿Cómo?

Page 21: Integración de DataStax de Spark con Cassandra

Interrelacionados

BI Big DataAnalítica NoSQL

Visualización

Page 22: Integración de DataStax de Spark con Cassandra

Interrelacionados

BI Big DataAnalítica NoSQL

Visualización

Conector de DatastaxSpark + Cassandra

Page 23: Integración de DataStax de Spark con Cassandra

En Práctica

Page 24: Integración de DataStax de Spark con Cassandra

Modelo de Datos C*//KeySpaceCREATE KEYSPACE demoCMU WITH replication = {'class': 'SimpleStrategy', 'replication_factor':1};use demoCMU;

//TablaCREATE TABLE demoCMU.asistentesCMU (id int PRIMARY KEY, nombre text, genero text);

CREATE TABLE demoCMU.asistentesCopia (id int PRIMARY KEY, nombre text , tipo text);

//RegistrosINSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (1, 'Ale Murray', 'femenino');INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (2, 'Iñigo Aldama', 'masculino');INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (3, 'Antonio', 'masculino');…INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (32, 'Jesus Arrabal', 'masculino');

Page 25: Integración de DataStax de Spark con Cassandra

Conexión al Conector (Spark-Shell)

scala> sc.stopscala>:paste// Entering paste mode (ctrl-D to finish)

import com.datastax.spark.connector._ //conector datastax spark+cassandraimport org.apache.spark._ //conector Spark

val conf = new SparkConf() //creamos una configuraciónconf.set("spark.cassandra.connection.host", "10.211.55.8") //añadimos nuestro host de C*conf.set("spark.home", "/opt/spark-1.0.2") //establecemos el Home de Sparkval sc = new SparkContext("local[2]", "Cassandra Connector Test", conf) // Creamos el Contexto

// Exiting paste mode, now interpreting.

Page 26: Integración de DataStax de Spark con Cassandra

Conexión al Conectorsc.addJar("/opt/spark-1.0.2/lib_unmanaged/libthrift-0.9.1.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-all-2.0.9.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-clientutil-2.0.9.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-thrift-2.0.9.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-driver-core-2.0.4.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/spark-cassandra-connector_2.10-1.0.0-rc5.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/joda-time-2.3.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/joda-convert-1.2.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/httpcore-4.2.4.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/commons-codec-1.4.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/commons-lang-2.4.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/commons-logging-1.1.1.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/guava-16.0.1.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/httpclient-4.2.5.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/metrics-core-3.0.2.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/netty-3.9.0.Final.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/slf4j-api-1.7.5.jar")sc.addJar("/opt/spark-1.0.2/lib_unmanaged/snappy-java-1.0.5.jar")

Page 27: Integración de DataStax de Spark con Cassandra

Acceso a Tabla C*

scala> val tableCMU = sc.cassandraTable("democmu", "asistentescmu")tableCMU: com.datastax.spark.connector.rdd.CassandraRDD[com.datastax.spark.connector.CassandraRow] = CassandraRDD[0] at RDD at CassandraRDD.scala:47

Page 28: Integración de DataStax de Spark con Cassandra

Lectura (I)

scala> tableCMU.firstres2: com.datastax.spark.connector.CassandraRow = CassandraRow{id: 20, genero: masculino, nombre: Marcos VR}

scala> tableCMU.take(2)res3: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{id: 20, genero: masculino, nombre: Marcos VR}, CassandraRow{id: 25, genero: masculino, nombre: Sergio Canal Rodrigo})

scala> tableCMU.take(1)(0).get[Int]("idasistente")res4: Int = 20

Page 29: Integración de DataStax de Spark con Cassandra

Lectura (II)

scala> tableCMU.toArrayres5: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{id: 20, genero: masculino, nombre: Marcos VR}, CassandraRow{id: 25, genero: masculino, nombre: Sergio Canal Rodrigo}, CassandraRow{id: 31, genero: masculino, nombre: jose}, CassandraRow{id: 24, genero: masculino, no…

scala> tableCMU.countres6: Long = 32

scala> tableCMU.select("nombre").toArrayres8: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{nombre: Marcos VR}, CassandraRow{nombre: Sergio Canal Rodrigo}, CassandraRow{nombre: jose}, CassandraRow{n…

Page 30: Integración de DataStax de Spark con Cassandra

Copiado de Tablas

tableCMU.map( row => (row.get[Int]("id"),row.get[String]("nombre"),"cassandraRebelsMadrid”

)).saveToCassandra("democmu","asistentescopia"

Page 31: Integración de DataStax de Spark con Cassandra

Filtros

scala> tableCMU.filter(_.get[Int]("id")>30).toArrayres15: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{id: 31, genero: masculino, nombre: jose}, CassandraRow{id: 32, genero: masculino, nombre: Jesus Arrabal})

Page 32: Integración de DataStax de Spark con Cassandra

Importar un CSV

scala>:paste// Entering paste mode (ctrl-D to finish)

sc.textFile("file:///root/democmu.csv").map(_.split(";")).map( line =>

(line(0),line(1),line(2))).saveToCassandra("democmu","asistentescopia")

// Exiting paste mode, now interpreting.

Page 33: Integración de DataStax de Spark con Cassandra

MapReduce

scala> :paste// Entering paste mode (ctrl-D to finish)

tableCMU.map(_.get[String]("genero")).flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).toArray

// Exiting paste mode, now interpreting.

res20: Array[(String, Int)] = Array((femenino,3), (masculino,29))

Page 35: Integración de DataStax de Spark con Cassandra

¡Spark Streaming + Cassandra!