{"id":1422,"date":"2025-08-06T10:00:00","date_gmt":"2025-08-06T10:00:00","guid":{"rendered":"https:\/\/cloudlab.urv.cat\/catedracloud\/?p=1422"},"modified":"2026-02-04T23:09:57","modified_gmt":"2026-02-04T23:09:57","slug":"el-papel-de-los-catalogos-de-datos-en-entornos-data-lake","status":"publish","type":"post","link":"https:\/\/cloudlab.urv.cat\/catedracloud\/2025\/08\/06\/el-papel-de-los-catalogos-de-datos-en-entornos-data-lake\/","title":{"rendered":"El papel de los cat\u00e1logos de datos en entornos Data Lake"},"content":{"rendered":"\n<p>En el mundo actual impulsado por los datos, las organizaciones procesan y gestionan enormes vol\u00famenes de datos en sistemas distribuidos, plataformas en la nube y entornos locales. Con tantos datos fluyendo a trav\u00e9s de complejos flujos, surge un desaf\u00edo clave: \u00bfc\u00f3mo rastrear qu\u00e9 datos existen, d\u00f3nde se encuentran y qu\u00e9 describen?<\/p>\n\n\n\n<p>Aqu\u00ed es donde entran en juego los cat\u00e1logos de datos (o <em>data catalogs<\/em>). Al igual que un cat\u00e1logo de biblioteca ayuda a los lectores a encontrar libros, un cat\u00e1logo de datos ayuda a los equipos de datos a descubrir, comprender y gobernar los activos de datos en toda la organizaci\u00f3n. Ya seas un ingeniero de datos ejecutando canalizaciones o un analista buscando un conjunto de datos confiable, el cat\u00e1logo de datos es tu mapa del paisaje de datos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es un cat\u00e1logo de datos?<\/h2>\n\n\n\n<p>Un cat\u00e1logo 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\u2014no almacena los datos en s\u00ed, sino metadatos: informaci\u00f3n sobre d\u00f3nde viven los datos, c\u00f3mo se ven, qui\u00e9n los posee, c\u00f3mo se usan y c\u00f3mo fluyen por el sistema.<\/p>\n\n\n\n<p>Un cat\u00e1logo t\u00edpico ofrece herramientas para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Descubrir conjuntos de datos mediante b\u00fasqueda y filtrado<\/li>\n\n\n\n<li>Ver definiciones de esquemas<\/li>\n\n\n\n<li>Rastrear el linaje de los datos desde la fuente hasta el panel de control<\/li>\n\n\n\n<li>Gestionar controles de acceso<\/li>\n<\/ul>\n\n\n\n<p>Con el tiempo, tambi\u00e9n puede convertirse en un espacio de colaboraci\u00f3n, donde los usuarios agregan documentaci\u00f3n, etiquetas o notas a los conjuntos de datos seg\u00fan su experiencia y uso.<\/p>\n\n\n\n<p>A medida que las organizaciones escalan su infraestructura de datos, la importancia de un cat\u00e1logo crece. Sin uno, los equipos duplican esfuerzos, dependen de fuentes obsoletas o no documentadas, o pierden tiempo buscando los datos que necesitan. Un cat\u00e1logo bien mantenido se convierte en una parte cr\u00edtica para habilitar an\u00e1lisis de autoservicio, aplicar gobernanza y generar confianza en los datos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfPor qu\u00e9 se necesitan los cat\u00e1logos de datos?<\/h2>\n\n\n\n<p>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\u00e9n el esquema\u2014nombres de columnas, tipos, restricciones, \u00edndices, etc. Este metadato est\u00e1 estrechamente integrado con el motor de almacenamiento y consulta.<\/p>\n\n\n\n<p>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\u00e1n optimizadas para durabilidad y escalabilidad\u2014no 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\u00f3n de archivos y directorios. No hay conocimiento inherente de tablas, esquemas o relaciones entre conjuntos de datos.<\/p>\n\n\n\n<p>Esta separaci\u00f3n crea un desaf\u00edo para motores de consulta externos como Apache Spark, Presto o Trino. Estos motores operan independientemente del sistema de almacenamiento, leyendo datos desde donde est\u00e9n. Pero para consultar un conjunto de datos, los usuarios de Spark necesitan entender su estructura: qu\u00e9 columnas existen, qu\u00e9 tipos de datos tienen y c\u00f3mo deben interpretarse los archivos.<\/p>\n\n\n\n<p>Aqu\u00ed es donde entra el cat\u00e1logo de datos. Act\u00faa como la capa de abstracci\u00f3n faltante, reintroduciendo la noci\u00f3n de tablas, columnas y esquemas sobre archivos sin procesar. Un cat\u00e1logo 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\u00e1logo, motores como Spark, Hive o Presto pueden ejecutar consultas SQL sobre archivos distribuidos, porque pueden buscar los metadatos necesarios: qu\u00e9 tablas existen, qu\u00e9 columnas tienen y d\u00f3nde reside f\u00edsicamente la informaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfPor qu\u00e9 motores de consultas como Apache Spark necesitan cat\u00e1logos de datos?<\/h2>\n\n\n\n<p>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\u00f3n, depender de Spark para inferir esquemas din\u00e1micamente es poco confiable e ineficiente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La inferencia de esquemas es costosa porque Spark debe leer parte de los datos para deducir la estructura.<\/li>\n\n\n\n<li>Los esquemas pueden cambiar, y sin un registro centralizado, los cambios pueden causar consultas inconsistentes o rotas.<\/li>\n\n\n\n<li>No hay contexto compartido. Si varios equipos usan el mismo conjunto de datos, no hay un lugar \u00fanico para documentarlo o interpretarlo.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Hive Metastore: Un cat\u00e1logo de datos para Big Data<\/h2>\n\n\n\n<p>Para resolver estos problemas, Spark necesita un sistema centralizado de metadatos\u2014un lugar para almacenar y recuperar informaci\u00f3n sobre conjuntos de datos. Ah\u00ed entra Hive Metastore.<\/p>\n\n\n\n<p>Hive Metastore es un servicio centralizado de metadatos que almacena informaci\u00f3n sobre conjuntos de datos: qu\u00e9 tablas existen, sus esquemas, d\u00f3nde est\u00e1n los archivos de datos y c\u00f3mo est\u00e1n 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.<\/p>\n\n\n\n<p>En otras palabras, Hive Metastore es un cat\u00e1logo de datos: rastrea y organiza conjuntos de datos que viven f\u00edsicamente 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\u00e9rminos de tablas y columnas l\u00f3gicas, como en una base de datos SQL.<\/p>\n\n\n\n<p>Cuando Spark est\u00e1 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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfC\u00f3mo funciona la interacci\u00f3n entre Hive metastore y Spark t\u00e9cnicamente?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Spark usa APIs del cat\u00e1logo Hive internamente<\/h3>\n\n\n\n<p>Cuando se habilita el soporte Hive (por ejemplo, con <code>spark.sql.catalogImplementation=hive<\/code>), Spark incluye una implementaci\u00f3n interna del cat\u00e1logo Hive. Este cat\u00e1logo envuelve las APIs del Hive Metastore para acceder a los metadatos.<\/p>\n\n\n\n<p>Spark usa bibliotecas cliente de Hive (como <code>hive-exec<\/code> y <code>hive-metastore<\/code>) para comunicarse con el metastore, usando el protocolo Thrift RPC.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hive Metastore es un servicio Thrift<\/h3>\n\n\n\n<p>Hive Metastore se ejecuta como un servicio Thrift independiente. Escucha solicitudes de clientes (Hive, Spark, Presto, etc.) sobre el protocolo Thrift RPC.<\/p>\n\n\n\n<p>Cuando Spark necesita acceder a metadatos, env\u00eda una llamada RPC a Hive Metastore solicitando informaci\u00f3n como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lista de tablas en una base de datos<\/li>\n\n\n\n<li>Esquema de la tabla (columnas, tipos, comentarios)<\/li>\n\n\n\n<li>Ubicaci\u00f3n de la tabla (por ejemplo, una ruta S3 o HDFS)<\/li>\n\n\n\n<li>Informaci\u00f3n de particiones<\/li>\n<\/ul>\n\n\n\n<p>Estas llamadas se traducen en consultas SQL que el servicio ejecuta sobre su base de datos interna (Derby, MySQL, PostgreSQL).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Los metadatos se almacenan en una base de datos relacional<\/h3>\n\n\n\n<p>Hive Metastore almacena todos los metadatos en un RDBMS tradicional como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apache Derby (modo embebido para pruebas)<\/li>\n\n\n\n<li>MySQL o PostgreSQL (recomendado para producci\u00f3n)<\/li>\n<\/ul>\n\n\n\n<p>Spark no consulta directamente esta base de datos. Siempre lo hace a trav\u00e9s de la interfaz Thrift del Hive Metastore.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ejecutar Hive como embebido<\/h3>\n\n\n\n<p>Cuando Spark se inicia con soporte Hive, puede inicializar su propio cliente embebido de Hive Metastore. Este cliente usa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Archivos de configuraci\u00f3n de Hive (como <code>hive-site.xml<\/code>)<\/li>\n\n\n\n<li>Informaci\u00f3n de conexi\u00f3n a la base de datos del metastore (JDBC URL, usuario, contrase\u00f1a)<\/li>\n\n\n\n<li>El esquema del metastore ya instalado (mediante <code>schematool<\/code>)<\/li>\n<\/ul>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>T\u00e9cnicamente, Spark se comporta como un &#8220;mini servicio Hive Thrift&#8221; dentro de su propia JVM\u2014pero sin exponer un endpoint Thrift ni requerir uno externo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>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\u2014formatos que carecen de estructura o conciencia de esquemas.<\/p>\n\n\n\n<p>Aqu\u00ed es donde los cat\u00e1logos 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\u00e1logo m\u00e1s utilizados en el ecosistema de Big Data. Aunque se origin\u00f3 como parte de Apache Hive, ahora se usa como capa de metadatos general para motores como Apache Spark.<\/p>\n\n\n\n<p>Esta conexi\u00f3n permite a Spark descubrir, consultar y gestionar conjuntos de datos distribuidos como si fueran tablas SQL, habilitando consultas eficientes y metadatos consistentes entre herramientas.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el mundo actual impulsado por los datos, las organizaciones procesan y gestionan enormes vol\u00famenes de datos en sistemas distribuidos, plataformas en la nube y entornos locales. Con tantos datos fluyendo a trav\u00e9s de complejos flujos, surge un desaf\u00edo clave: \u00bfc\u00f3mo rastrear qu\u00e9 datos existen, d\u00f3nde se encuentran y qu\u00e9 describen? Aqu\u00ed es donde entran [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":1425,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","_swt_meta_header_display":false,"_swt_meta_footer_display":false,"_swt_meta_site_title_display":false,"_swt_meta_sticky_header":false,"_swt_meta_transparent_header":false,"footnotes":""},"categories":[34,41],"tags":[],"class_list":["post-1422","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-almacenamiento","category-big-data"],"jetpack_featured_media_url":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/08\/Sin-nombre.png","uagb_featured_image_src":{"full":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/08\/Sin-nombre.png",1050,600,false],"thumbnail":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/08\/Sin-nombre-150x150.png",150,150,true],"medium":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/08\/Sin-nombre-300x171.png",300,171,true],"medium_large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/08\/Sin-nombre-768x439.png",768,439,true],"large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/08\/Sin-nombre-1024x585.png",1024,585,true],"1536x1536":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/08\/Sin-nombre.png",1050,600,false],"2048x2048":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/08\/Sin-nombre.png",1050,600,false]},"uagb_author_info":{"display_name":"Aitor Arjona","author_link":"https:\/\/cloudlab.urv.cat\/catedracloud\/author\/aitor\/"},"uagb_comment_info":2,"uagb_excerpt":"En el mundo actual impulsado por los datos, las organizaciones procesan y gestionan enormes vol\u00famenes de datos en sistemas distribuidos, plataformas en la nube y entornos locales. Con tantos datos fluyendo a trav\u00e9s de complejos flujos, surge un desaf\u00edo clave: \u00bfc\u00f3mo rastrear qu\u00e9 datos existen, d\u00f3nde se encuentran y qu\u00e9 describen? Aqu\u00ed es donde entran&hellip;","_links":{"self":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/comments?post=1422"}],"version-history":[{"count":3,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1422\/revisions"}],"predecessor-version":[{"id":1427,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1422\/revisions\/1427"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media\/1425"}],"wp:attachment":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media?parent=1422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/categories?post=1422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/tags?post=1422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}