integración de datastax de spark con cassandra
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/1.jpg)
Spark & CassandraUn vistazo al conector de DataStax
@javituiter
www.franciscojavierpulido.com
![Page 2: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/2.jpg)
Anteriormente…
![Page 3: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/3.jpg)
Apache Cassandra
N
N N
N
![Page 4: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/4.jpg)
Apache Spark
M
W WW W
RDD
![Page 5: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/5.jpg)
Alianza
Jhonathan EllisPresidente Apache Cassandra
Matei ZahariaCreador de Apache Spark
![Page 6: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/6.jpg)
¿Cuándo?
![Page 7: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/7.jpg)
¿Cuándo?
LANZAMIENTOjulio
2014
![Page 8: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/8.jpg)
El Conector
![Page 9: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/9.jpg)
Características
RDD TablaN
N N
N
MW WW W
![Page 10: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/10.jpg)
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/11.jpg)
Arquitectura
N
N N
N
M
W WW W
![Page 12: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/12.jpg)
Arquitectura
N
M
N N N
W WW W
N
![Page 13: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/13.jpg)
Ejecución
>Spark-Shell
Scala Java
Recomendado:· intelliJ· SBT· Scala
![Page 14: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/14.jpg)
Comunidad
![Page 15: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/15.jpg)
Impacto
![Page 16: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/16.jpg)
Impacto
![Page 17: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/17.jpg)
¿Por qué?
![Page 18: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/18.jpg)
Clientes
C DA B E F
![Page 19: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/19.jpg)
Demanda
Custodia Total :: Analítica del Histórico
![Page 20: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/20.jpg)
¿Cómo?
![Page 21: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/21.jpg)
Interrelacionados
BI Big DataAnalítica NoSQL
Visualización
![Page 22: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/22.jpg)
Interrelacionados
BI Big DataAnalítica NoSQL
Visualización
Conector de DatastaxSpark + Cassandra
![Page 23: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/23.jpg)
En Práctica
![Page 24: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/24.jpg)
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/25.jpg)
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/26.jpg)
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/27.jpg)
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/28.jpg)
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/29.jpg)
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/30.jpg)
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/31.jpg)
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/32.jpg)
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](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/33.jpg)
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 34: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/34.jpg)
Y mucho más…
Working with user-defined case classes and tuples
Customizing the object mapping
Using Connector in Java
…
Visita: https://github.com/datastax/spark-cassandra-connector/
![Page 35: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/35.jpg)
¡Spark Streaming + Cassandra!
![Page 36: Integración de DataStax de Spark con Cassandra](https://reader033.vdocumento.com/reader033/viewer/2022061202/547c3a2c5906b563798b46ae/html5/thumbnails/36.jpg)
Gracias
@javituiter
www.franciscojavierpulido.comFuentes: hkhamm (GitHub)PkolaczkRussel Spitzer (Datastax)Martin Van Ryswyk (DataStax)