Aprendiendo Apache Ozone: Parte 1

Última actualización: 18/08/2021

Apache Ozone es un subproyecto de Apache Hadoop que surgió con la intención de proporcionar un almacenamiento de objetos escalable y potente compatible con las APIs de Hadoop y S3. No te pierdas esta entrada en la que aprenderás en qué consiste Ozone y todas sus ventajas.

Apache Ozone

¿Qué es Apache Ozone?

Apache Ozone o Apache Hadoop Ozone es una tecnología de almacenamiento de objetos open source, distribuida y escalable. Está optimizada para trabajos big data, de forma que puede escalar para almacenar billones de objetos.

Para conseguir esta escalabilidad, Ozone separa la gestión del almacenamiento, de la que se encarga el gestor de contenedores de almacenamiento (SCM) de los namespaces, del que se encarga el gestor de Ozone (OM).

Gestión de los Datos

Apache Ozone clasifica los datos en volúmenes, buckets y claves.

Los volúmenes sirven para separar las cuentas de usuario. Los administradores son los encargados de crear y eliminar volúmenes.

Los buckets de Ozone implementan el concepto de directorios, al igual que en Amazon S3.

Por último, las claves identifican a los ficheros. Son una cadena de texto única por cada fichero en un bucket.

Replicación de los Datos

En Ozone, la replicación de datos se basa en contenedores de 5 GB. Esta es la unidad básica de replicación, y tiene dos estados posibles. Cuando un contenedor está abierto, aún puede aceptar escrituras de clientes. Cuando un contenedor está cerrado, significa que ha alcanzado su capacidad máxima (5 GB) o bien que ha tenido un fallo.

La capa de replicación se basa en el protocolo Apache Ratis basado en Raft para mantener la consistencia.

Como vemos, este comportamiento es diferente a lo que ocurre en HDFS, donde cada bloque reporta de forma individual su estado de replicación. Cuando tenemos muchos ficheros en HDFS, debemos gestionar bien los reportes para escalar el sistema adecuadamente.

Componentes y Arquitectura

Ozone tiene tres componentes principales: Ozone Manager (OM), Storage Container Manager (SCM) y los Datanodes.

En HDFS tenemos un namenode encargado de gestionar tanto el espacio de nombres como los bloques. Ozone lo divide en dos componentes con nodos diferentes, lo que aumenta la escalabilidad del sistema.

Componentes en Apache Ozone
Componentes en Apache Ozone

Ozone Manager (OM): Gestiona el espacio de nombres, las operaciones de creación, eliminación y actualización de volúmenes, buckets y claves. No se comunica directamente con los datanodes, sino con el cliente de Ozone y con el SCM.

Storage Container Manager (SCM): Gestiona los contenedores y los datanodes. Proporciona a Ozone Manager información de las operaciones de bloques y contenedores. También monitoriza el estado de los datanodes y la replicación de los datos. Este componente no se comunica directamente con el cliente de Ozone.

Datanodes: Son los componentes encargados de almacenar los datos. Es la capa de almacenamiento.

Ozone también se integra con Kerberos para proporcionar control de acceso y soporta TDE y cifrado de datos.

Ventajas de Apache Ozone

Además de la escalabilidad que he mencionado, Apache Ozone proporciona otras muchas ventajas a nuestra arquitectura de datos:

Consistencia: Ozone es un almacenamiento de objetos consistente, apoyado en protocolos como RAFT.

Cloud: Ozone puede desplegarse en entornos de contenedores como Yarn o Kubernetes.

Soporte para múltiples protocolos: Es posible acceder a través de las APIs de Hadoop y el protocolo de S3. Al poder usar la API de Hadoop, se pueden conectar muchas aplicaciones del ecosistema, como Apache Hive o Apache Spark soportando Data Locality.

Ficheros Pequeños: Ozone aporta una gran ventaja cuando almacenamos ficheros pequeños frente a HDFS al escalar sin problemas y comportarse como almacenamiento de objetos.

Instalación de Apache Ozone

Puedes descargar la última versión de Apache Ozone de su sitio web oficial.

Ahora, podemos crear un clúster local fácilmente con Docker:

docker run apache/ozone cat docker-compose.yaml > docker-compose.yaml
docker run apache/ozone cat docker-config > docker-config
docker-compose up -d
docker-compose up -d --scale datanode=3

Aquí tienes algunos comandos para crear volúmenes y buckets:

docker-compose exec datanode bash
ozone sh volume create --quota=1TB --user=<user> /volumen
ozone sh bucket create /volumen/bucket
echo 'Esto es una prueba' > /tmp/prueba.txt
ozone sh key put /volumen/bucket/prueba.txt /tmp/prueba.txt
ozone sh key get /volumen/bucket/prueba.txt /tmp/pruebaozone.txt
cat /tmp/pruebaozone.txt

Deja una respuesta