En el mundo actual impulsado por los datos, las organizaciones procesan y gestionan enormes volúmenes de datos en sistemas distribuidos, plataformas en la nube y entornos locales. Con tantos datos fluyendo a través de complejos flujos, surge un desafío clave: ¿cómo rastrear qué datos existen, dónde se encuentran y qué describen?
Aquí es donde entran en juego los catálogos de datos (o data catalogs). Al igual que un catálogo de biblioteca ayuda a los lectores a encontrar libros, un catálogo de datos ayuda a los equipos de datos a descubrir, comprender y gobernar los activos de datos en toda la organización. Ya seas un ingeniero de datos ejecutando canalizaciones o un analista buscando un conjunto de datos confiable, el catálogo de datos es tu mapa del paisaje de datos.
¿Qué es un catálogo de datos?
Un catálogo de datos es un sistema que ayuda a organizar, rastrear y comprender los conjuntos de datos. En esencia, es un inventario buscable de conjuntos de datos—no almacena los datos en sí, sino metadatos: información sobre dónde viven los datos, cómo se ven, quién los posee, cómo se usan y cómo fluyen por el sistema.
Un catálogo típico ofrece herramientas para:
- Descubrir conjuntos de datos mediante búsqueda y filtrado
- Ver definiciones de esquemas
- Rastrear el linaje de los datos desde la fuente hasta el panel de control
- Gestionar controles de acceso
Con el tiempo, también puede convertirse en un espacio de colaboración, donde los usuarios agregan documentación, etiquetas o notas a los conjuntos de datos según su experiencia y uso.
A medida que las organizaciones escalan su infraestructura de datos, la importancia de un catálogo crece. Sin uno, los equipos duplican esfuerzos, dependen de fuentes obsoletas o no documentadas, o pierden tiempo buscando los datos que necesitan. Un catálogo bien mantenido se convierte en una parte crítica para habilitar análisis de autoservicio, aplicar gobernanza y generar confianza en los datos.
¿Por qué se necesitan los catálogos de datos?
En las bases de datos SQL tradicionales, los datos y los metadatos conviven en el mismo lugar. Cuando creas una tabla en una base de datos relacional, el sistema almacena no solo las filas de datos, sino también el esquema—nombres de columnas, tipos, restricciones, índices, etc. Este metadato está estrechamente integrado con el motor de almacenamiento y consulta.
Pero en una arquitectura de lago de datos, este acoplamiento desaparece. Los datos suelen vivir en sistemas de almacenamiento distribuidos como HDFS o Amazon S3, en formatos como Parquet, ORC o JSON. Estas capas de almacenamiento están optimizadas para durabilidad y escalabilidad—no para conciencia de metadatos. Una carpeta en S3 llena de archivos Parquet puede representar un conjunto de datos, pero para el sistema de almacenamiento, es solo una colección de archivos y directorios. No hay conocimiento inherente de tablas, esquemas o relaciones entre conjuntos de datos.
Esta separación crea un desafío para motores de consulta externos como Apache Spark, Presto o Trino. Estos motores operan independientemente del sistema de almacenamiento, leyendo datos desde donde estén. Pero para consultar un conjunto de datos, los usuarios de Spark necesitan entender su estructura: qué columnas existen, qué tipos de datos tienen y cómo deben interpretarse los archivos.
Aquí es donde entra el catálogo de datos. Actúa como la capa de abstracción faltante, reintroduciendo la noción de tablas, columnas y esquemas sobre archivos sin procesar. Un catálogo describe la estructura y el significado de los datos almacenados en el lago, permitiendo tratar el almacenamiento basado en archivos como si fuera una base de datos. Con un catálogo, motores como Spark, Hive o Presto pueden ejecutar consultas SQL sobre archivos distribuidos, porque pueden buscar los metadatos necesarios: qué tablas existen, qué columnas tienen y dónde reside físicamente la información.
¿Por qué motores de consultas como Apache Spark necesitan catálogos de datos?
Apache Spark es un motor de consulta ampliamente adoptado para ejecutar cargas de trabajo SQL sobre conjuntos de datos en almacenamiento tipo lago como Hadoop. Sin embargo, Spark no gestiona sus propios metadatos por defecto. Cuando usas Spark SQL para consultar un conjunto de datos, Spark infiere el esquema desde los archivos. Pero en un entorno de producción, depender de Spark para inferir esquemas dinámicamente es poco confiable e ineficiente:
- La inferencia de esquemas es costosa porque Spark debe leer parte de los datos para deducir la estructura.
- Los esquemas pueden cambiar, y sin un registro centralizado, los cambios pueden causar consultas inconsistentes o rotas.
- No hay contexto compartido. Si varios equipos usan el mismo conjunto de datos, no hay un lugar único para documentarlo o interpretarlo.
Hive Metastore: Un catálogo de datos para Big Data
Para resolver estos problemas, Spark necesita un sistema centralizado de metadatos—un lugar para almacenar y recuperar información sobre conjuntos de datos. Ahí entra Hive Metastore.
Hive Metastore es un servicio centralizado de metadatos que almacena información sobre conjuntos de datos: qué tablas existen, sus esquemas, dónde están los archivos de datos y cómo están particionados. Originalmente fue parte de Apache Hive, pero con el tiempo se ha convertido en una capa de metadatos independiente usada por muchas herramientas del ecosistema de Big Data.
En otras palabras, Hive Metastore es un catálogo de datos: rastrea y organiza conjuntos de datos que viven físicamente en sistemas de almacenamiento externos como HDFS o almacenamiento en la nube (por ejemplo, S3). Permite describir conjuntos de datos almacenados como archivos sin procesar (como Parquet u ORC) en términos de tablas y columnas lógicas, como en una base de datos SQL.
Cuando Spark está configurado para usar Hive, se comunica directamente con el Hive Metastore Service (HMS) para recuperar metadatos sobre bases de datos, tablas, esquemas, particiones y ubicaciones de archivos.
¿Cómo funciona la interacción entre Hive metastore y Spark técnicamente?
Spark usa APIs del catálogo Hive internamente
Cuando se habilita el soporte Hive (por ejemplo, con spark.sql.catalogImplementation=hive
), Spark incluye una implementación interna del catálogo Hive. Este catálogo envuelve las APIs del Hive Metastore para acceder a los metadatos.
Spark usa bibliotecas cliente de Hive (como hive-exec
y hive-metastore
) para comunicarse con el metastore, usando el protocolo Thrift RPC.
Hive Metastore es un servicio Thrift
Hive Metastore se ejecuta como un servicio Thrift independiente. Escucha solicitudes de clientes (Hive, Spark, Presto, etc.) sobre el protocolo Thrift RPC.
Cuando Spark necesita acceder a metadatos, envía una llamada RPC a Hive Metastore solicitando información como:
- Lista de tablas en una base de datos
- Esquema de la tabla (columnas, tipos, comentarios)
- Ubicación de la tabla (por ejemplo, una ruta S3 o HDFS)
- Información de particiones
Estas llamadas se traducen en consultas SQL que el servicio ejecuta sobre su base de datos interna (Derby, MySQL, PostgreSQL).
Los metadatos se almacenan en una base de datos relacional
Hive Metastore almacena todos los metadatos en un RDBMS tradicional como:
- Apache Derby (modo embebido para pruebas)
- MySQL o PostgreSQL (recomendado para producción)
Spark no consulta directamente esta base de datos. Siempre lo hace a través de la interfaz Thrift del Hive Metastore.
Ejecutar Hive como embebido
Cuando Spark se inicia con soporte Hive, puede inicializar su propio cliente embebido de Hive Metastore. Este cliente usa:
- Archivos de configuración de Hive (como
hive-site.xml
) - Información de conexión a la base de datos del metastore (JDBC URL, usuario, contraseña)
- El esquema del metastore ya instalado (mediante
schematool
)
En lugar de hacer llamadas Thrift, el cliente embebido de Hive en Spark hace llamadas JDBC directas a la base de datos del metastore para obtener metadatos.
Técnicamente, Spark se comporta como un “mini servicio Hive Thrift” dentro de su propia JVM—pero sin exponer un endpoint Thrift ni requerir uno externo.
Conclusión
En las plataformas modernas de datos, especialmente las basadas en lagos de datos, los datos y los metadatos ya no se almacenan juntos por defecto. A diferencia de las bases de datos SQL tradicionales, sistemas como Spark operan sobre archivos sin procesar en HDFS o almacenamiento en la nube—formatos que carecen de estructura o conciencia de esquemas.
Aquí es donde los catálogos de datos son esenciales. Reintroducen estructura al mantener metadatos sobre los conjuntos de datos: sus esquemas, ubicaciones, particiones y relaciones. Hive Metastore es uno de los servicios de catálogo más utilizados en el ecosistema de Big Data. Aunque se originó como parte de Apache Hive, ahora se usa como capa de metadatos general para motores como Apache Spark.
Esta conexión permite a Spark descubrir, consultar y gestionar conjuntos de datos distribuidos como si fueran tablas SQL, habilitando consultas eficientes y metadatos consistentes entre herramientas.
Leave a Reply