Usando Hadoop con Apache Cassandra

Usando Hadoop con Apache Cassandra

  • Orquestación
6 min de lectura Actualizado Apr 25, 2017

Puntos clave: Usando Hadoop con Apache, Cassandra explora la integración de estas tecnologías para un procesamiento eficiente de big data, destacando la arquitectura de Cassandra que permite escalabilidad y recuperación rápida de datos sin normalización tradicional.

  • Cassandra están una base de datos NoSQL diseñada para alta disponibilidad y velocidad.
  • Los datos están almacenados en una estructura aplanada, centrándose en el rendimiento en lugar de la normalización.

Resumen de Cassandra

Cassandra están una base de datos noSQL de código abierto. Fue desarrollada por Facebook para atender sus necesidades únicas de procesar enormes cantidades de datos.

Decir que están noSQL no significa que están no estructurado. Los datos en Cassandra están almacenados en los conocidos conjuntos de datos de fila y columna como una base de datos SQL normal. Pero no son relaciones entre las tablas. Y te puede consultar y escribir datos en Cassandra usando CQL (Cassandra Query Language), que están muy similar al SQL normal.

Pero que soporte SQL no significa que te pueda hacer todas las operaciones SQL en él. En particular, no son operaciones JOIN ni GROUP ni nada que requiera búsqueda y cálculo de discos de extensión. En cambio, te son se supone que almacena datos en Cassandra de la misma manera que te gustaría que se presentaran. Ese cambio de pensamiento están un cambio total de 180 grados respecto a lo que la gente ha aprendido sobre RDBMS (sistemas de gestión de bases de datos relacionales).

play

 

No normal

Para ilustrar lo que queremos decir, necesitamos hablar de lo que significa normalizar datos. Los datos en Cassandra se están suponidos que no son normales y aplanados. Vamos a ilustrar eso. Supongamos que tenemos estos datos de estudiantes:

Número de estudiante Nombre Ciudad Estado Código postal

Alguien que diseñe una base de datos Oracle Haz dos tablas a partir de eso:

Número de estudiante Nombre Código postal
Código postal Estado Ciudad

El elemento común entre las dos tablas están código postal. Porque cuando te sabes el código postal donde vive alguien, te conoces la ciudad y el estado. ¿Por qué te repetir esos datos en cada fila? te no lo hacen. te Haz los datos normales. Pero no con Cassandra. Cassandra no están preocupada por usar mucho espacio en disco, que están una de las razones por las que no te normalizar. (Sin embargo, su algoritmo de compresión reduce el almacenamiento en un 80%.) En cambio, Cassandra está todo sobre la velocidad y la escala.

Arquitectura

No está un hub central ni una topología maestro-esclavo con Cassandra. En cambio, está diseñado como un anillo de nodos, con cada nodo cumpliendo el mismo papel. Los nodos se comunican entre sí en lo que se está llamado cotilleo. Los nodos pueden añadirse y eliminarse según sea necesario. El usuario establece el nivel de replicación para indicar cuántas copias extra de los datos debe conservar y mantener la redundancia. Lo que diferencia a Cassandra de un SGBDR normal también están que hay que tener en cuenta cómo almacena y ordena físicamente los datos para poder utilizarlos y comprenderlos correctamente. Eso significa entender el CommitLog, Memtable, SSTable, Particiones y Nodos. Para utiliza una analogía, piensa en cómo las olas llegan a la orilla en la playa. Una ola grande llega seguida de varias más pequeñas. Luego una ola gigante llega a la orilla y lo mueve todo. te puede pensar en las olas como la memoria de Cassandra y en la arena de la playa como el almacenamiento permanente en disco de Cassandra. Cassandra, al igual que Hadoop, están diseñada para utiliza almacenamiento de mercancías de bajo coste y ofrecer una arquitectura distribuida. Eso significa usar los discos duros que son conectados a las máquinas virtuales y físicas del centro de datos en lugar de algún tipo de arreglo de almacenamiento. Los datos de Cassandra están almacenados en almacenamiento como un SSTable. Escribe son primero en un CommitLog, para que pueda llevar un registro de los cambios que necesita aplicar. Las escrituras son almacenadas en caché en estructuras llamadas Memtables. Esta caché se acumula en tamaño hasta que llega a la costa como una ola cuando Cassandra confirma sus cambios en disco. Así que las escrituras reales son relativamente lentas, pero leen extremadamente rápido. son Hay varios de estos Memtables en el aire en cualquier momento. Así que la estructura del SSTable físico subyacente será diferente a la de los Memtables en un momento dado. El SSTable se está escrito en oleadas, igual que un Linux escribe páginas de memoria en disco cuando el archivo de intercambio está lleno. Eso es diferente a un SGBDR normal que actualiza una tabla cada vez que están una operación INSERT u otra operación.

Particiones y nodos

Ahora, piensa en una clave primaria en una tabla de base de datos. La clave primaria están algún valor único que proviene de uno o más campos. En Cassandra, el primero de estos campos denota la clave de partición. Los otros campos de la clave primaria indican cómo están ordenan los datos dentro de esa partición. Las particiones indican dónde están almacenados físicamente los datos (es decir, el nodo). Por ejemplo, te podría tener estos datos:

Clave primaria

Identificación del vehículo Haz
1 Ford
2 Ford
3 Chevrolet
4 Chevrolet
5 Chevrolet

ID del vehículo están la clave de partición. Haz están una columna de agrupamiento. Esto hace que la recuperación de datos sea muy eficiente si todos los vehículos Ford son almacenados uno junto al otro, ya que están ordenado así. En este ejemplo, el ID del vehículo están único, así que no están claro cómo ese mecanismo de almacenamiento ayuda a la eficiencia. Pero considera ese te puede tener una clave de partición compuesta. Supongamos que el ID del vehículo están realmente la planta donde se fabricó el vehículo más algún número. Así que tendríamos todos estos vehículos fabricados en la misma planta y pintados del mismo color almacenados juntos para acelerar la recuperación:

Planta Identificación del vehículo Color
México 1 rojo
México 1 rojo
EE. UU. 1 Azul

Ahora, hagamos un trabajo práctico con Cassandra para ilustrar mejor estos conceptos. Primero instalamos el software.

Instalación

Aquí está la instalación en CentOS. Un punto a destacar aquí están que en la web de Cassandra, Cassandra pone su software a disposición como descarga y lo distribuye a repositorios de Ubuntu, pero no para Yum. Así que Datastax hace eso. Nota: La empresa privada Datastax ha escrito la mayor parte de la documentación de Cassandra en internet. Antes Haz su propia distribución de Cassandra, pero ya no lo hacen. Ahora alguien tiene que ocupar el vacío y terminar la documentación, ya que la documentación oficial de Cassandra está llena de muchos comentarios de tareas indicando qué páginas deben completar. De hecho, incluso son buscan personas que quieran ayudar a terminar la documentación. Así que utiliza la documentación de Datastax por ahora. Primero Crea un archivo de repositorio con este contenido:

    cat /etc/yum.repos.d/datastax.repo

name = DataStax Repo for Apache Cassandra
baseurl = http://rpm.datastax.com/community
enabled = 1
gpgcheck = 0

Luego instala estos dos elementos:

    yum install dsc30
yum install cassandra30-tools

Ahora abre la cáscara de Cassandra:

    cqlsh
 
Connected to Test Cluster at 127.0.0.1:9042.

Use HELP for help.
cqlsh>

Ahora vamos a Crear una tabla y a poner algunos datos en ella.

KeySpace

El primer objeto en Crea están un KeySpace. Este están un contenedor para replicación. Aquí Haz un KeySpace llamado Library, ya que son vamos a Haz una tabla para llevar el control de qué libros una persona ha sacado de la biblioteca en nuestro pequeño ejemplo. La clase y replication_factor determinan cómo están replican los datos. Son muchas opciones para eso, como son para la dispersión de particiones. Aquí decimos que Haz 3 copias de cada dato.

    CREATE KEYSPACE Library
      WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };

Tablas

Ahora Crea dos mesas: libro y mecenas.

    CREATE TABLE Library.book (       
ISBN text, 
copy int, 
title text,  
PRIMARY KEY (ISBN, copy)
 );

CREATE TABLE  Library.patron (      
ssn int PRIMARY KEY,  
checkedOut set  
);

Aquí son algunos puntos a destacar:

  • Nosotros utilizamos los tipos de campo text e int. Cassandra tiene los tipos de columnas habituales y permite los definidos por el usuario.
  • La primera tabla tiene 2 campos en la clave primaria. La segunda tabla tiene 1.
  • La segunda tabla tiene una columna de colección de conjuntos. Un conjunto están una colección de elementos únicos, como {1,2,3}. Cassandra también soporta una lista, cuyos elementos no necesitan ser únicos, como {1,2,2,3}, y un mapa, donde la clave debe ser única, como {key->value}.
  • Aparte de eso, la sintaxis es exactamente igual a Oracle SQL normal.

Añadir datos

Vamos a añadir algunos datos. Los comandos se parecen exactamente a SQL normal. El nombre de la tabla está precedido por el espacio de llaves, igual que en una base de datos SQL normal la tabla está denotada como database.table.

    INSERT INTO  Library.book (ISBN, copy, title) VALUES('1234',1, 'Bible');
INSERT INTO  Library.book (ISBN, copy, title) VALUES('1234',2, 'Bible');
INSERT INTO  Library.book (ISBN, copy, title) VALUES('1234',3, 'Bible');
INSERT INTO  Library.book (ISBN, copy, title) VALUES('5678',1, 'Koran');
INSERT INTO  Library.book (ISBN, copy, title) VALUES('5678',2, 'Koran');

Ahora enumera los valores:

    select * from Library.book;
 

 isbn | copy | title
------+------+-------
 5678 |    1 | Koran
 5678 |    2 | Koran
 1234 |    1 | Bible
 1234 |    2 | Bible
 1234 |    3 | Bible

A continuación añadimos datos a la tabla de usuarios. Los libros que el usuario de la biblioteca ha prestado están un conjunto: {'1234','5678'}. En una base de datos normalizada, los libros y el usuario de la biblioteca se mantendrían en tablas separadas. Pero aquí aplanamos todo en una sola estructura para evitar tener que hacer SQL JOIN y otras operaciones que llevarían tiempo. Así que, aunque pusimos detalles sobre los libros en la tabla de libros, podríamos haber añadido el título, el número de páginas, etc., como en la tabla de usuarios, quizás en una tupla u otra estructura de datos. De nuevo, eso es completamente opuesto a lo que tradicionalmente se ha aprendido a los programadores cuando diseñan tablas de bases de datos. Así que añade algunos datos e imprímelos:

    INSERT INTO Library.patron (ssn, checkedOut) values (123,{'1234','5678'});
cqlsh> select * from Library.patron;
 

 ssn | checkedout
-----+------------------
 123 | {'1234', '5678'}

 INSERT INTO Library.patron (ssn, checkedOut) values (123,{‘1234’,’5678’});

Ahora, Cassandra está totalmente en el rendimiento. Así que no te puedes consultar campos en la columna de colecciones sin antes hacer un índice:

    create index on Library.patron (checkedOut);

Ahora podemos mostrar qué usuarios tienen el libro de préstamo número 1234 con una consulta. Ten en cuenta que utilizamos el operador de contenidos.

    select ssn from Library.patron where checkedOut contains '1234';
 
 ssn
-----
 123

Esto están una visión general de Cassandra para Obtén te empezar. Ahora te quizá quieras investigar algunas de las APIs, ya que son APIs de Cassandra para muchos lenguajes de programación. Además te podría leer utiliza casos porque, dado que ahora son tantas bases de datos de big data, sería útil Ve qué tipo de datos ha usado la gente en qué situación.

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.