Integración de DataStax de Spark con Cassandra
-
Upload
francisco-javier-pulido-pinero -
Category
Engineering
-
view
305 -
download
7
description
Transcript of Integración de DataStax de Spark con Cassandra
Spark & CassandraUn vistazo al conector de DataStax
@javituiter
www.franciscojavierpulido.com
Anteriormente…
Apache Cassandra
N
N N
N
Apache Spark
M
W WW W
RDD
Alianza
Jhonathan EllisPresidente Apache Cassandra
Matei ZahariaCreador de Apache Spark
¿Cuándo?
¿Cuándo?
LANZAMIENTOjulio
2014
El Conector
Características
RDD TablaN
N N
N
MW WW W
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.
Arquitectura
N
N N
N
M
W WW W
Arquitectura
N
M
N N N
W WW W
N
Ejecución
>Spark-Shell
Scala Java
Recomendado:· intelliJ· SBT· Scala
Comunidad
Impacto
Impacto
¿Por qué?
Clientes
C DA B E F
Demanda
Custodia Total :: Analítica del Histórico
¿Cómo?
Interrelacionados
BI Big DataAnalítica NoSQL
Visualización
Interrelacionados
BI Big DataAnalítica NoSQL
Visualización
Conector de DatastaxSpark + Cassandra
En Práctica
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');
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.
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")
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
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
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…
Copiado de Tablas
tableCMU.map( row => (row.get[Int]("id"),row.get[String]("nombre"),"cassandraRebelsMadrid”
)).saveToCassandra("democmu","asistentescopia"
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})
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.
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))
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/
¡Spark Streaming + Cassandra!
Gracias
@javituiter
www.franciscojavierpulido.comFuentes: hkhamm (GitHub)PkolaczkRussel Spitzer (Datastax)Martin Van Ryswyk (DataStax)