Aprendiendo Apache Ozone: Parte 1

Última actualización: 25/08/2022

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.

Los metadatos de Ozone se persisten en RockDB por defecto y se replican en todas las instancias utilizando el protocolo Apache Ratis para mantener la consistencia cuando se configura la alta disponibilidad. Apache Ratis es una librería de replicación basada en RAFT.

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. De esta forma, existe un plano de control o gestión separado del plano del almacenamiento de datos.

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. Ozone SCM también se puede desplegar en alta disponibilidad, de esta forma, cada instancia usa Ratis para evitar un único punto de fallo.

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 se ha mencionado, Apache Ozone proporciona otras muchas ventajas a nuestra arquitectura de datos. Combina lo mejor de HDFS con el almacenamiento de objetos:

Los datos almacenados en HDFS se pueden migrar a Ozone con herramientas populares como distcp y recon como consola de monitorización y de gestión. Además, Ozone proporciona semántica de un espacio de nombres jerárquico como sistema de archivos. Garantiza operaciones atómicas a nivel de directorio y en el caso de las operaciones de borrado o renombrado de directorio, se realiza solamente sobre los metadatos.

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, Apache Spark o Apache Impala 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 en una escala de exabytes. También puede soportar archivos de un gran tamaño con un rendimiento lineal al descomponerlos en partes más pequeñas.

Apache Ozone está incluido en la distribución de Big Data Cloudera CDP, que lo usa para separar el almacenamiento del cómputo y de esta forma almacenar millones de objetos en las instalaciones onprem (CDP Private Cloud).

Rendimiento

Para evaluar el rendimiento de Apache Ozone, disponemos de varios análisis hechos por Cloudera. Para estos análisis se ha usado la herramienta de benchmarking open source Teragen. Esta herramienta genera datos aleatorios con tamaños variables.

En este análisis se compara el rendimiento de Apache Ozone con el rendimiento de S3 usando el conector Apache Hadoop S3A. Se ejecuta Teragen con unos tamaños de 1GB, 10GB y 100GB, donde se concluye que Ozone da mejor rendimiento en este caso:

Comparativa de rendimiento de Ozone con S3
Comparativa de rendimiento de Ozone con S3 [Cloudera]

También, analizan la operación de movimiento de datos en directorios con tamaños de 1GB, 10GB y 100GB:

Comparativa de rendimiento en movimiento de datos
Comparativa de rendimiento de Ozone con S3 en movimiento de datos [Cloudera]

En la gráfica se puede apreciar que el rendimiento es similar a HDFS

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