bigdata - nosql

82
Octubre 2014

Upload: jose-alvarez-muguerza

Post on 14-Jul-2015

172 views

Category:

Software


4 download

TRANSCRIPT

Page 1: BigData -  NoSQL

Octubre 2014

Page 2: BigData -  NoSQL

José Alvarez MuguerzaBig Data Architect

[email protected]

@jamuguerza josealvarezmuguerza josealvarezmuguerza

Page 3: BigData -  NoSQL

Q&A

GoogleWorkshop (Teórico / Práctico)

muchos Bookmarks !!

? ??

???

??

?

Modalidad

irc

Page 4: BigData -  NoSQL

NoSql

Page 5: BigData -  NoSQL

➢ NoSql- Conceptos- Alternativas

➢ Cassandra- Historia- Arquitectura- Escritura / Lectura- Conceptos- Herramientas- CQL- Modelado de Datos- Administración y Rendimiento- Drivers- Buenas Prácticas

Agenda

Objetivo???

Page 6: BigData -  NoSQL

NoSQL: qué es?

DatabaseNo Relacional

Distribuída

Open Source

Escala horizontalmente

Page 7: BigData -  NoSQL

NoSQL: Escalando en RDBMS

decremento de performance

al escalar

consistencia y performance deseada

Database Query Performance

Escalabilidad

Mayor atención en Sharding, Cache, SPoF….

Page 8: BigData -  NoSQL

NoSQL: Data Model en RDBMS

Modelo de Datos

<k, V>

Page 9: BigData -  NoSQL

NoSQL: Modelo Agregado en RDBMS

Modelo Agregado

< i,< <ki,Vi>,<ki,Vi>,<ki,Vi> >>

Page 10: BigData -  NoSQL

NoSQL: ACID en RDBMS

Atomicity

Consistency

Isolation

Durability

Basic Availability

Soft-state

Eventual consistency

Page 11: BigData -  NoSQL

NoSql: CAP Theorem

R+W>N.

R+W=N+1

Page 12: BigData -  NoSQL

NoSql: CAP Theorem

Page 13: BigData -  NoSQL

NoSql: Ventajas sobre RDMS

Polyglot Persistence

➢ Diseñados para escalar (linear)

➢ Performance escalable

➢ Simplicidad de uso

➢ Esquema dinámico

Impedance Mismatch

Page 14: BigData -  NoSQL

NoSql: Database landscape

Page 15: BigData -  NoSQL

NoSql: Tipos - Clave valor

RiakRedisMemcachedDBAmz DynamoDBVoldemortBerkeley

RDBMS K,V Ej: RIAK

DB Instance Riak Cluster

table bucket

row key,value

row id keyDynamoDB open source

Page 16: BigData -  NoSQL

MongoDBCouchDBTerrastoreRavenDB

NoSql: Tipos - Documentos

RDBMS Documentos Ej: Mongo

DB Instance Mongo Instance

Schema Database

Table Collection

Row Document

Row id _id

Page 17: BigData -  NoSQL

CassandraHBaseHypertableAmz SimpleDB

NoSql: Tipos - Columnar

RDBMS ColumnarEj: Cassandra

DB Instance Ring / Cluster

Database Keyspace

Table Column Family

Row Row

Column (# fijo) Column (# variable)

Page 18: BigData -  NoSQL

Neo4jInfinite GraphOrientDB

NoSql: Tipos - Grafos

fmi: http://en.wikipedia.org/wiki/Graph_database

“A Graph —records data in→ Nodes —which have→ Properties”

Page 19: BigData -  NoSQL

Apache Cassandra

Page 20: BigData -  NoSQL

C*: Origen

Page 21: BigData -  NoSQL

C*: Proyecto Cassandra

EscalabilidadPerformance

Disponibilidad

Simplicidad

Page 22: BigData -  NoSQL

Cassandra: Arquitectura - Ring

A

B

C

DE

F

G

Cassandra ring

Page 23: BigData -  NoSQL

Cassandra: Arquitectura - RingMultiDatacenter

Page 24: BigData -  NoSQL

Cassandra: Arquitectura - Schema

Page 25: BigData -  NoSQL

C*: Escritura

Page 26: BigData -  NoSQL

C*: Compaction

➢ Fusiona varias SSTables en 1

➢ Elimina los “descartados”

➢ Optimiza disco

➢ Proceso pesado

➢ automático o manualnodetool compact

Page 27: BigData -  NoSQL

C*: Lectura

Page 28: BigData -  NoSQL

C*: Lectura - cache

Page 29: BigData -  NoSQL

C*: repair

➢ Repara discrepancias

➢ CL QUORUM & ALL

➢ DELETES, nulls y restaurado de nodos

➢ Proceso pesado

➢ automático o manualnodetool repair

Page 30: BigData -  NoSQL

C*: R/W en cluster

CONSISTENCY LEVEL

ALL= ACK de todos los nodos

QUORUM = > 51% de los nodos

LOCAL_QUORUM = > 51% en mi DC

ONE = ACK de 1 nodoEventual / Strong consistency for dummies: Aquí!!!

Page 32: BigData -  NoSQL

C*: Partitiones

➢ ByteOrderedPartitioner

➢ RandomPartitioner

➢ Murmur3Partitioner

Page 33: BigData -  NoSQL

C*: Virtual Nodes

Page 35: BigData -  NoSQL

C*: Snitches para AWS

Page 36: BigData -  NoSQL

Cassandra: Snitches para AWS

Page 37: BigData -  NoSQL

C*: Snitches para AWS

EC2Snitch

EC2MultiRegionSnitch

Page 39: BigData -  NoSQL

Ejercicios

Instalación

Page 40: BigData -  NoSQL

Ejercicios

Conociendo los Keyspaces

Page 41: BigData -  NoSQL

C*: Tools - cassadra-cli//Adding data to the Column familiesset Accounts['1234']['balance'] = long(1000);

//Reading the columns[default@Bank] get Accounts [utf8('1234')]; => (column=62616c616e6365, value=1000, timestamp=1389652586026000)=> (column=6e616d65, value=John, timestamp=1389652425044000)Returned 2 results.

//Drop CFdrop column family Accounts;

//connect to a clusterconnect 127.0.0.1/9160;

//Creating the databasecreate keyspace Bank;

//Using the Databaseuse Bank;

//Creating a CF create column family Accounts;

//Making Cassandra aware of the data typeassume Accounts keys as utf8;

//Adding data to the Column familiesset Accounts['1234']['name'] = 'Jose';

Deprecado !!!

Page 42: BigData -  NoSQL

Ejercicios

Múltiples nodos en local

Page 43: BigData -  NoSQL

C*: Tools - nodetool[cassandra-home]/bin/nodetool

~/tools/apache-cassandra-2.0.8/tools/bin$ ./nodetool -h 192.168.1.104 status

Datacenter: datacenter1=======================Status=Up/Down|/ State=Normal/Leaving/Joining/Moving-- Address Load Tokens Owns (effective) Host ID RackUJ 192.168.2.104 29.19 KB 256 ? d82a7a31-591f-4ffd-998f-1557b6b95510 rack1UN 192.168.2.101 84.66 KB 256 70.7% e3677182-3860-49c8-992e-6cc9019eab2f rack1UN 192.168.2.103 71.46 KB 256 61.2% 82b84eb1-0830-45b5-8968-c1a263c3e66a rack1UN 192.168.2.102 55.26 KB 256 68.2% 0f9a1f05-085d-4591-9edd-85174aa55458 rack1

argumentos CLICKHERE !!!

Page 45: BigData -  NoSQL

ClusterSSH

clusters = node1 node2 node3 node4 ringnode1 = [email protected] = [email protected] = [email protected] = [email protected] = node1 node2 node3 node4

$ vi .csshrc

$ cssh ring

Page 46: BigData -  NoSQL

Cassandra: CQL

CREATE TABLE usuarios ( usuario varchar, clave varchar, nombre varchar, token varchar, sexo varchar, nacimiento bigint, PRIMARY KEY (usuario));

Page 47: BigData -  NoSQL

CREATE TABLE eventos ( tipo text, fecha timestamp, evento blob, PRIMARY KEY (tipo, fecha))

WITH CLUSTERING ORDER BY (fecha DESC);

C*: CQL

partition keyDDL

Page 48: BigData -  NoSQL

SELECT * FROM system.schema_keyspaces;

C*: CQL

DML

Page 50: BigData -  NoSQL

➢ List

➢ Set

➢ Map

C*: Colecciones

CREATE TABLE colecciones ( id int PRIMARY KEY, ejemplo_list list<text>, ejemplo_set set<text>, ejemplo_map map<int,text>)

Page 51: BigData -  NoSQL

C*: Colecciones - List

ejemplo_list list<text>

Respeta orden de inserción!!!

Nombre de Colección Tipo de Colección Tipo CQL de los elementos

Page 52: BigData -  NoSQL

C*: Colecciones - Set

ejemplo_set set<text>

orden en base a Comparator !!

Nombre de Colección Tipo de Colección Tipo CQL de los elementos

Page 53: BigData -  NoSQL

C*: Colecciones - Map

ejemplo_map map<int,text>

Nombre de Colección Tipo de Colección Tipo CQL de los elementos

orden en base a Comparator !!

Page 54: BigData -  NoSQL

C*: Colecciones - List - EjemplosINSERT INTO colecciones (id, ejemplo_list) VALUES (1, ['juan', 'pedro']);

UPDATE colecciones SET ejemplo_list = ejemplo_list + ['luis'] WHERE id = 1);

UPDATE colecciones SET ejemplo_list = ['mario'] + ejemplo_list WHERE id = 1);

UPDATE colecciones SET ejemplo_list = ejemplo_list - ['pedro'] WHERE id = 1);

id ejemplo_list

1 [ 'mario', 'juan', 'pedro', 'luis']

Page 55: BigData -  NoSQL

C*: Colecciones - Set - EjemplosINSERT INTO colecciones (id, ejemplo_set) VALUES (1, {'juan', 'pedro'});

UPDATE colecciones SET ejemplo_set = ejemplo_set + {'luis'} WHERE id = 1);

UPDATE colecciones SET ejemplo_set = ['mario'] + ejemplo_set WHERE id = 1);

UPDATE colecciones SET ejemplo_set = ejemplo_set - {'pedro'} WHERE id = 1);

id ejemplo_map

1 [ 'juan', 'luis', 'mario', 'pedro',]

llaves!!

Page 56: BigData -  NoSQL

C*: Colecciones - Map - EjemplosINSERT INTO colecciones (id, ejemplo_map) VALUES (1, {1:'juan', 2:'pedro'});

UPDATE colecciones SET ejemplo_map[7] = 'luis' WHERE id = 1);

DELETE ejemplo_map[7] FROM colecciones WHERE id = 1);

id ejemplo_map

1 [ 1 :'juan' , 2 :pedro' , 7 :'luis' ]

Page 57: BigData -  NoSQL

C*: TTL

INSERT INTO usuarios (usuario, clave) VALUES ('juan001', '123abc') USING TTL 86400

UPDATE usuarios USING TTL 432000 SET clave = '678xzy'

WHERE usuario = 'juan001';

SELECT clave, TTL(clave) from usuarios WHERE usuario = 'juan001';

1 día5 días

segundos!!

Page 58: BigData -  NoSQL

CREATE TABLE websites.visitas

(visitas counter,

url varchar,

pagina varchar,

PRIMARY KEY (url, pagina)

);

UPDATE websites.visitas

SET visitas = visitas + 2

WHERE url='www.planetcassandra.org' AND pagina='home';

C*: Counters

+1 0-3

➢ tabla dedicada a contadores➢ No soporta Index ni delete➢ Tampoco TTL ni TIMESTAMPS➢ No puede ser KEY➢ Sólo por in/de-crementos, no

se puede setear ➢ No reutilizables

Page 59: BigData -  NoSQL

C*: Timestamps

Cell

NAME‘Edad'

VALUE65

TIMESTAMP1357866010549000

public interface Cell extends OnDiskAtom {

…public CellName More name();

public ByteBuffer More value();

public long More timestamp()…

} microsegundos!!!

INSERT INTO usuarios (usuario, clave) VALUES ('juan001', '123abc') USING TIMESTAMP 1357866010549000

Page 60: BigData -  NoSQL

Ejercicios

Prácticas CQL

Page 61: BigData -  NoSQL

C*: Tools - DevCenter

http://www.datastax.com/download#dl-devcenter

Page 62: BigData -  NoSQL

Data Model

Page 63: BigData -  NoSQL

C*: Principios en Modelado

➢ Pensar en Entidades y en Consultas

➢ “write many, read one”

➢ Des-normalizar, datos duplicados, JOIN

➢ Wide-rows: múltiples columnas

➢ Timeseries

➢ Iterativo

➢ Partition-keys compuestas

Page 64: BigData -  NoSQL

Administración&

Rendimiento

Page 65: BigData -  NoSQL

cassandra.yaml authenticator: AllowAllAuthenticator|PasswordAuthenticator

CREATE USER 'jose' WITH PASSWORD '123456' SUPERMANAGER;

ALTER USER 'cassandra' WITH PASSWORD 'nueva_pass';

ó

DROP USER 'cassandra';

C*: Autenticación

Page 68: BigData -  NoSQL

C*: Tools - JMX

org.apache.cassandra.db: cache, table metric, commitlog, compaction, cluster info,

org.apache.cassandra.internal:operaciones internas del server: cache, gossip, flush, hinted off

org.apache.cassandra.metricsmétricas internas de las operaciones arriba mencionadas, latencias

org.apache.cassandra.netEn relación a transmisión de datos en la red, fallas, origen->destino, etc

org.apache.cassandra.requestreads, blocked tasks, pools, etc

Page 69: BigData -  NoSQL

C*: manipulando nodos

- Retirar un nodo

- Re-insertar un nodo (seeds)

- Agregar un nuevo nodo<< auto_bootstrap >>

A

B

C

DE

F

G

Cassandra ring

nodetool decommission

nodetool repair

Page 71: BigData -  NoSQL

Ejercicios

Rendimiento

Page 72: BigData -  NoSQL

C*: Tools - tracing en CQL

TRACING ON;

INSERT INTO empleados

(ID, departamento, nombre, apellido)

VALUES (104, 15, 'juan', 'perez');

Page 73: BigData -  NoSQL

C*: Tools - cassandra-stress[cassandra-home]/tools/bin/cassandra-stress

~/tools/apache-cassandra-2.0.8/tools/bin$ ./cassandra-stressCreated keyspaces. Sleeping 1s for propagation.total,interval_op_rate,interval_key_rate,latency,95th,99.9th,elapsed_time

22623,2262,2262,7.4,32.5,793.8,1087791,6516,6516,2.3,15.8,528.3,20183523,9573,9573,1.6,11.7,212.0,30

argumentos CLICKHERE !!!

# de operaciones desde que inició el test

# de operaciones en este intervalo (10 seg por defecto)

# de keys manipuladas en este intervalo

latencia promedio x operación en este intervalo

95% por debajo de esta latencia

99% por debajo de esta latencia

tiempo desde que se inició el test

Page 74: BigData -  NoSQL

C*: Tools - OpsCenter

http://www.datastax.com/documentation/opscenter/5.0/opsc/about_c.html

Page 75: BigData -  NoSQL

C*: Tools - cstar_perf

Stress tests en múltiples clustersDiferentes versiones / branches de C*Diferentes yaml por cluster

https://github.com/datastax/cstar_perfhttp://datastax.github.io/cstar_perf/

Page 76: BigData -  NoSQL

Drivers

Page 77: BigData -  NoSQL

C*: Clientes

JavaPHP

Perl

C++Node.js .NetClojure

Python

ScalaErlang

Ruby

https://wiki.apache.org/cassandra/ClientOptions

CQL

Page 78: BigData -  NoSQL

Ejercicios

C* + Java

Page 79: BigData -  NoSQL

➢ CPU con Múltiples cores ➢ Mínimo 2 HD (SSTables y commitLog separados)➢ Net: Gossip y Data por dif interfases

Buenas Prácticas

➢ Usarlo bajo ‘nix -➢ Updates no “Leer antes de Escribir” -➢ Evitar SuperColumns -➢ usar Murmur3Partitioner -➢ Oracle JVM (no otra) -➢ Usar secuencia de baja, no Ctrl+C -➢ Backups ➢ Monitorear

Hardware

Software

Page 80: BigData -  NoSQL

C*: Conceptos

Anillo (Ring o Cluster)KeyspaceColumn Family (Table)

Primary KeyPartition KeyMemtableSSTableCommitLog

CounterTTLSnappy

ESTRUCTURA

Page 81: BigData -  NoSQL

C*: Conceptos (cont.)

CompactionCoordinatorFlushingReplication FactorConsistency LevelQuorumRead Repair

CAPACIDADES

TokenCQLSeq I/O vs Random I/OSnitchBootstrapHinted handoffGossip