Integración de DataStax de Spark con Cassandra

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

description

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

Transcript of Integración de DataStax de Spark con Cassandra

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!