{"id":15634,"date":"2023-10-04T14:12:51","date_gmt":"2023-10-04T14:12:51","guid":{"rendered":"https:\/\/beta.bluetab.net\/?p=15634"},"modified":"2024-03-05T17:34:33","modified_gmt":"2024-03-05T17:34:33","slug":"lakehouse-streaming-en-aws-con-apache-flink-y-hudi-parte-2","status":"publish","type":"post","link":"https:\/\/bluetab.es\/es\/lakehouse-streaming-en-aws-con-apache-flink-y-hudi-parte-2\/","title":{"rendered":"LakeHouse Streaming en AWS con Apache Flink y Hudi (Parte 2)"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"15634\" class=\"elementor elementor-15634\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b2ad9fe elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b2ad9fe\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-7eac278\" data-id=\"7eac278\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-45481b1 elementor-widget elementor-widget-heading\" data-id=\"45481b1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">LakeHouse Streaming en AWS con Apache Flink y Hudi (Parte 2)<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7843b8f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7843b8f\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-1a4ee60\" data-id=\"1a4ee60\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d5531c7 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"d5531c7\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/albertojaenrevuelta\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/albertojaenrevuelta\/\" target=\"_blank\">Alberto Jaen<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-a5a94df\" data-id=\"a5a94df\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f643dea elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"f643dea\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/alfonsojerezizquierdo\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/alfonsojerezizquierdo\/\" target=\"_blank\">Alfonso Jerez<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-2fa6cdb\" data-id=\"2fa6cdb\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bae7214 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"bae7214\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/adrianjimenezhernandez\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/adrianjimenezhernandez\/\" target=\"_blank\">Adri\u00e1n Jim\u00e9nez<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-6562b00 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6562b00\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-7c6d220\" data-id=\"7c6d220\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-dac8e8c elementor-share-buttons--view-icon elementor-share-buttons--skin-minimal elementor-share-buttons--shape-circle elementor-grid-0 elementor-share-buttons--color-official elementor-widget elementor-widget-share-buttons\" data-id=\"dac8e8c\" data-element_type=\"widget\" data-widget_type=\"share-buttons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_twitter\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-twitter\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_linkedin\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-linkedin\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-2b67acd\" data-id=\"2b67acd\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c738cdf elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c738cdf\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-55b901d\" data-id=\"55b901d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7668b05 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7668b05\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-592ef24\" data-id=\"592ef24\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6010029 elementor-widget elementor-widget-theme-post-featured-image elementor-widget-image\" data-id=\"6010029\" data-element_type=\"widget\" data-widget_type=\"theme-post-featured-image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5-1024x512.png\" class=\"attachment-large size-large wp-image-17825\" alt=\"\" srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5-1024x512.png 1024w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5-300x150.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5-768x384.png 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f28ddaa elementor-widget elementor-widget-heading\" data-id=\"f28ddaa\" data-element_type=\"widget\" id=\"intro\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Introducci\u00f3n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4abbf0e elementor-widget elementor-widget-text-editor\" data-id=\"4abbf0e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Este art\u00edculo es el segundo en una serie de publicaciones que se centran en la <\/span><b>creaci\u00f3n de un LakeHouse con Hudi<\/b><span style=\"font-weight: 400;\"> a partir de una ingesta en streaming procesada por una aplicaci\u00f3n Flink. <\/span><a href=\"https:\/\/bluetab.net\/lakehouse-streaming-en-aws-con-apache-flink-y-hudi\/\"><span style=\"font-weight: 400;\">El primer art\u00edculo<\/span><\/a><span style=\"font-weight: 400;\"> se centra en sentar una buena base para esta plataforma, donde se desplegaron unas aplicaciones Flink con KDA (Kinesis Data Analytics) para cada tipo de formato (MoR, CoW para Hudi y JSON) que escriben el resultado de este procesamiento en unos <\/span><i><span style=\"font-weight: 400;\">buckets<\/span><\/i><span style=\"font-weight: 400;\">.<\/span><\/p><p><span style=\"font-weight: 400;\">El env\u00edo de datos que se utiliza como <\/span><i><span style=\"font-weight: 400;\">input<\/span><\/i><span style=\"font-weight: 400;\"> se mandaba en el anterior art\u00edculo desde una m\u00e1quina en local ejecutando una aplicaci\u00f3n de Locust, lo que puede presentar problemas a la hora de escalar y querer procesar un volumen alto de eventos. Adem\u00e1s, las aplicaciones de Kinesis Data Analytics con Flink presentan problemas de agilidad en su modo de autoescalado. Todos estos nuevos retos ser\u00e1n resueltos en este art\u00edculo.<\/span><\/p><p><span style=\"font-weight: 400;\">Tambi\u00e9n se catalogar\u00e1n estas tablas en Glue, servicio que disponibiliza un cat\u00e1logo de datos en AWS, para poder acceder a estos y as\u00ed realizar <\/span><i><span style=\"font-weight: 400;\">queries<\/span><\/i><span style=\"font-weight: 400;\"> de todo tipo. Como motor de <\/span><i><span style=\"font-weight: 400;\">queries <\/span><\/i><span style=\"font-weight: 400;\">que consumir\u00e1 estos metadatos se utilizar\u00e1 Athena, que proporciona una experiencia escalable, \u00e1gil y <\/span><i><span style=\"font-weight: 400;\">serverless<\/span><\/i><span style=\"font-weight: 400;\"> para poder ejecutar <\/span><i><span style=\"font-weight: 400;\">queries<\/span><\/i><span style=\"font-weight: 400;\"> con SQL o Spark para nuestras tablas alojadas en S3.<\/span><\/p><p><span style=\"font-weight: 400;\">Por otro lado, <\/span><b>en este art\u00edculo tambi\u00e9n se han desplegado los componentes necesarios para poder monitorizar nuestras aplicaciones<\/b><span style=\"font-weight: 400;\"> y extraer as\u00ed conclusiones sobre la velocidad a la que se ingestan los datos y los posibles problemas a resolver para que el procesamiento tenga la latencia requerida seg\u00fan los requisitos que se impongan.<\/span><\/p><p><span style=\"font-weight: 400;\">Finalmente se realizar\u00e1 una <\/span><b>comparativa en cuanto a rendimiento y latencia de las diferentes aplicaciones de Flink<\/b><span style=\"font-weight: 400;\"> que escriben datos en los formatos de Hudi y JSON para as\u00ed poder ver las diferentes ventajas e inconvenientes de estos formatos.\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7aaf8a9 elementor-widget elementor-widget-heading\" data-id=\"7aaf8a9\" data-element_type=\"widget\" id=\"objetivo\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Arquitectura\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cffc795 elementor-widget elementor-widget-text-editor\" data-id=\"cffc795\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">A continuaci\u00f3n se puede ver la arquitectura a alto nivel que se desplegar\u00e1:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c33a6cf elementor-widget elementor-widget-image\" data-id=\"c33a6cf\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"296\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image17-1024x296.png\" class=\"attachment-large size-large wp-image-15640 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image17-1024x296.png 1024w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image17-300x87.png 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image17-768x222.png 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image17-1536x444.png 1536w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image17.png 1999w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/296;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ddf563e elementor-widget elementor-widget-text-editor\" data-id=\"ddf563e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Para un mayor entendimiento vamos a explicarla de izquierda a derecha. Como se puede observar, el cambio m\u00e1s rese\u00f1able con respecto al primer art\u00edculo es la <\/span><b>inclusi\u00f3n de un cluster de Kubernetes<\/b><span style=\"font-weight: 400;\"> para poder escalar los eventos que ser\u00e1n mandados como <\/span><i><span style=\"font-weight: 400;\">input <\/span><\/i><span style=\"font-weight: 400;\">de nuestra aplicaci\u00f3n de <\/span><i><span style=\"font-weight: 400;\">streaming<\/span><\/i><span style=\"font-weight: 400;\">. De esta manera se podr\u00e1 testear de manera exhaustiva el rendimiento de las aplicaciones de Flink dependiendo de su aprovisionamiento y sobre todo del tipo de formato y tabla en el que escriben al LakeHouse. Adem\u00e1s, se ha disponibilizado un ALB (Application Load Balancer) que permite acceder a la interfaz de Locust para poder definir el n\u00famero de usuarios a simular y c\u00f3mo deben escalar estos con el tiempo. La URL para acceder a esta aparecer\u00e1 como <\/span><i><span style=\"font-weight: 400;\">output <\/span><\/i><span style=\"font-weight: 400;\">al desplegar la infraestructura con Terraform.<\/span><\/p><p><span style=\"font-weight: 400;\">Por otro lado se han realizado <\/span><b>cambios rese\u00f1ables en las aplicaciones KDA de Flink y el <\/b><b><i>stream <\/i><\/b><span style=\"font-weight: 400;\">del que leen estas. Cada aplicaci\u00f3n lee ahora como consumidores EFO (Enhanced Fan Out), de tal manera que cada una de ellas tiene un ancho de banda dedicado. La raz\u00f3n de este cambio y sus detalles ser\u00e1n explicados m\u00e1s en detalle en el apartado dedicado para Kinesis.<\/span><\/p><p><span style=\"font-weight: 400;\">En cuanto a la monitorizaci\u00f3n y la extracci\u00f3n de m\u00e9tricas en NRT (Near Real Time) se han desplegado unas funciones lambdas que acceden a las tablas apoy\u00e1ndose en Athena gracias a haber registrado los metadatos de estas en el cat\u00e1logo de Glue. Es importante resaltar que los metadatos de las tablas de Hudi son registrados en Glue por Flink pero en el caso de JSON se despliega un <\/span><i><span style=\"font-weight: 400;\">crawler <\/span><\/i><span style=\"font-weight: 400;\">que registra estas tablas en el cat\u00e1logo. Este crawler se debe ejecutar manualmente para que esta tabla quede registrada en Glue.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f116da elementor-widget elementor-widget-heading\" data-id=\"7f116da\" data-element_type=\"widget\" id=\"coste\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Escalado<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3fd4aa7 elementor-widget elementor-widget-text-editor\" data-id=\"3fd4aa7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><span style=\"font-weight: 400;\">Kinesis Stream<\/span><\/h3><p><span style=\"font-weight: 400;\">Dado que el objetivo es someter la aplicaci\u00f3n a una carga considerable de eventos por segundo, es necesario explicar c\u00f3mo cada una de las piezas de la arquitectura pueden escalar de acuerdo al volumen de datos.<\/span><\/p><p><span style=\"font-weight: 400;\">Como hemos comentado previamente, se ha optado por un Kinesis Stream <\/span><i><span style=\"font-weight: 400;\">On-Demand<\/span><\/i><span style=\"font-weight: 400;\"> para automatizar el escalado de los <\/span><i><span style=\"font-weight: 400;\">shards<\/span><\/i><span style=\"font-weight: 400;\"> durante las pruebas de carga. Es necesario tener en cuenta que estos <\/span><i><span style=\"font-weight: 400;\">streams<\/span><\/i><span style=\"font-weight: 400;\"> pueden acomodar una tasa de escritura de hasta el 200% de lo especificado por el n\u00famero de <\/span><i><span style=\"font-weight: 400;\">shards<\/span><\/i><span style=\"font-weight: 400;\"> en un momento dado.<\/span><\/p><p><span style=\"font-weight: 400;\">Una vez que el <\/span><i><span style=\"font-weight: 400;\">stream<\/span><\/i><span style=\"font-weight: 400;\"> se encuentra por encima del 100%, aumentar\u00e1 autom\u00e1ticamente el n\u00famero de <\/span><i><span style=\"font-weight: 400;\">shards<\/span><\/i><span style=\"font-weight: 400;\"> en un plazo de 15 minutos. La \u00fanica limitaci\u00f3n por tanto es no superar el doble del volumen de escritura admitido en menos de dicho periodo.<\/span><\/p><p><span style=\"font-weight: 400;\">Por otro lado, dado que se tendr\u00e1n tres aplicaciones de Flink leyendo del mismo <\/span><i><span style=\"font-weight: 400;\">stream<\/span><\/i><span style=\"font-weight: 400;\">, las limitaciones a nivel de lectura ser\u00e1n el mayor problema. Un Kinesis Stream solo admite 5 llamadas <\/span><i><span style=\"font-weight: 400;\">GetRecord<\/span><\/i><span style=\"font-weight: 400;\"> por <\/span><i><span style=\"font-weight: 400;\">shard <\/span><\/i><span style=\"font-weight: 400;\">por segundo. Dado que cada aplicaci\u00f3n tiene que leer todo el <\/span><i><span style=\"font-weight: 400;\">stream<\/span><\/i><span style=\"font-weight: 400;\"> (y por lo tanto, todos los <\/span><i><span style=\"font-weight: 400;\">shards<\/span><\/i><span style=\"font-weight: 400;\">), aumentar el n\u00famero de <\/span><i><span style=\"font-weight: 400;\">shards<\/span><\/i><span style=\"font-weight: 400;\"> no ayuda a solventar este problema.<\/span><\/p><p><span style=\"font-weight: 400;\">La soluci\u00f3n pasa por registrar cada una de las aplicaciones como un consumidor Enhanced Fan-Out. Esta funcionalidad de los Kinesis Stream provee a cada uno de estos consumidores con un l\u00edmite individual de 5 llamadas <\/span><i><span style=\"font-weight: 400;\">GetRecord<\/span><\/i><span style=\"font-weight: 400;\"> y 2MB por <\/span><i><span style=\"font-weight: 400;\">shard<\/span><\/i><span style=\"font-weight: 400;\"> por segundo de lectura.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-57b15db elementor-widget elementor-widget-image\" data-id=\"57b15db\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"851\" height=\"501\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image7.png\" class=\"attachment-large size-large wp-image-15642 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image7.png 851w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image7-300x177.png 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image7-768x452.png 768w\" data-sizes=\"(max-width: 851px) 100vw, 851px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 851px; --smush-placeholder-aspect-ratio: 851\/501;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fb46eef elementor-widget elementor-widget-text-editor\" data-id=\"fb46eef\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Esta configuraci\u00f3n se realiza en el lado del consumidor, en nuestro caso mediante el conector de Kinesis para Flink:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b80cd1 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"7b80cd1\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>&#039;scan.stream.recordpublisher&#039; = &#039;EFO&#039;,\r\n&#039;scan.stream.efo.registration&#039; = &#039;EAGER\/LAZY&#039;,\r\n&#039;scan.stream.efo.consumername&#039; = &#039;{consumer_name}&#039; <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c65ea8 elementor-widget elementor-widget-text-editor\" data-id=\"6c65ea8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Conviene mencionar que alternativamente, es posible aumentar la latencia de lectura de nuestras aplicaciones de Flink. Por defecto Flink realiza una lectura cada 200 ms por <\/span><i><span style=\"font-weight: 400;\">shard<\/span><\/i><span style=\"font-weight: 400;\">, de modo que una aplicaci\u00f3n consume completamente la cuota de lectura de un <\/span><i><span style=\"font-weight: 400;\">stream<\/span><\/i><span style=\"font-weight: 400;\">. Incrementando este valor a 600ms podr\u00edamos acomodar las tres aplicaciones, a costa de una mayor latencia:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7910602 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"7910602\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>scan.shard.getrecords.intervalmillis = &#039;600&#039; <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3611269 elementor-widget elementor-widget-text-editor\" data-id=\"3611269\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Tambi\u00e9n se har\u00e1 uso de la opci\u00f3n <\/span><i><span style=\"font-weight: 400;\">Adaptive Reads<\/span><\/i><span style=\"font-weight: 400;\">, que modifica din\u00e1micamente el n\u00famero de eventos recogidos por llamada en funci\u00f3n del tama\u00f1o de cada record. Esto permite aprovechar los 2 MB\/s por <\/span><i><span style=\"font-weight: 400;\">shard <\/span><\/i><span style=\"font-weight: 400;\">disponibles para cada consumidor:\u00a0 <\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-72fd9ab elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"72fd9ab\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>&#039;scan.shard.adaptivereads&#039; = &#039;true&#039; <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6057b15 elementor-widget elementor-widget-text-editor\" data-id=\"6057b15\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">En lo que respecta al escalado en KPUs (<\/span><i><span style=\"font-weight: 400;\">Kinesis Processing Unit<\/span><\/i><span style=\"font-weight: 400;\">) de Flink, se ha optado por no hacer uso del autoescalado, ya que cada proceso de escalado incurren en <\/span><i><span style=\"font-weight: 400;\">downtime<\/span><\/i><span style=\"font-weight: 400;\"> para la aplicaci\u00f3n. Debido a los diferentes requerimientos de cada una de las aplicaciones, las acciones de escalado en momentos inesperados podr\u00edan interrumpir las pruebas de carga. Adem\u00e1s es interesante medir el rendimiento de escritura de cada una de las aplicaciones en igualdad de capacidad de computaci\u00f3n.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd8f0fe elementor-widget elementor-widget-heading\" data-id=\"bd8f0fe\" data-element_type=\"widget\" id=\"time\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Hudi<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-94c83b5 elementor-widget elementor-widget-text-editor\" data-id=\"94c83b5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><span style=\"font-weight: 400;\">Timeline<\/span><\/h3><p><span style=\"font-weight: 400;\">Uno de los sistemas base sobre la que se sustenta el funcionamiento y caracter\u00edsticas de Hudi es la <\/span><i><span style=\"font-weight: 400;\">timeline<\/span><\/i><span style=\"font-weight: 400;\">. Hudi guarda un registro temporal de todas las acciones que se han realizado sobre la tabla, as\u00ed como el estado de esta acci\u00f3n.<\/span><\/p><p><span style=\"font-weight: 400;\">Las principales acciones que componen la <\/span><i><span style=\"font-weight: 400;\">timeline <\/span><\/i><span style=\"font-weight: 400;\">son<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Commits<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; escritura at\u00f3mica de un conjunto de registros en la tabla en formato columnar<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Delta Commit<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; similar al <\/span><i><span style=\"font-weight: 400;\">commit<\/span><\/i><span style=\"font-weight: 400;\">, representa una escritura de registros en forma de <\/span><i><span style=\"font-weight: 400;\">logs <\/span><\/i><span style=\"font-weight: 400;\">en una tabla <\/span><i><span style=\"font-weight: 400;\">Merge on Read<\/span><\/i><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Compaction<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; compactaci\u00f3n de las escrituras en <\/span><i><span style=\"font-weight: 400;\">logs <\/span><\/i><span style=\"font-weight: 400;\">(<\/span><i><span style=\"font-weight: 400;\">delta commits<\/span><\/i><span style=\"font-weight: 400;\">) de una tabla MoR a formato columnar<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Cleans<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; borrado de versiones antiguas de archivos<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Rollback<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; eliminado de los registros escritos por un <\/span><i><span style=\"font-weight: 400;\">commit <\/span><\/i><span style=\"font-weight: 400;\">o <\/span><i><span style=\"font-weight: 400;\">delta commit <\/span><\/i><span style=\"font-weight: 400;\">fallido<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Savepoint<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; marca un conjunto de archivos como \u201cguardados\u201d para que no sean eliminados por el proceso de limpieza. Permite restaurar la tabla a un punto anterior en la timeline<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Cualquiera de estas acciones pueden encontrarse en uno de estos tres estados<\/span><\/p><ol><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Requested<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; una acci\u00f3n ha sido planeada sin iniciar<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Inflight<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; la acci\u00f3n est\u00e1 en proceso<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Completed<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; denota que la acci\u00f3n ha sido completada<\/span><\/li><\/ol><h3><span style=\"font-weight: 400;\"><br \/>Tipos de tabla<\/span><\/h3><p><span style=\"font-weight: 400;\">Como se ha dejado entrever en el funcionamiento de la <\/span><i><span style=\"font-weight: 400;\">timeline <\/span><\/i><span style=\"font-weight: 400;\">de Hudi, existen dos tipos de escritura soportados: columnar y <\/span><i><span style=\"font-weight: 400;\">logs<\/span><\/i><span style=\"font-weight: 400;\">. El formato columnar (parquet) constituye la forma final de una tabla de Hudi, junto con los metadatos de la <\/span><i><span style=\"font-weight: 400;\">timeline<\/span><\/i><span style=\"font-weight: 400;\">. Sin embargo, es posible hacer uso de las escrituras en <\/span><i><span style=\"font-weight: 400;\">logs <\/span><\/i><span style=\"font-weight: 400;\">(avro) para disminuir la latencia de escritura y eventualmente compactarse a formato columnar sin entorpecer la escritura.<\/span><\/p><p><span style=\"font-weight: 400;\">El uso de estos m\u00e9todos de escritura dan lugar a los dos tipos de tabla que Hudi pone a nuestra disposici\u00f3n<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Copy on Write<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; las escrituras se realizan exclusivamente en formato columnar, creando un nuevo fichero con los nuevos registros de la tabla. Los datos est\u00e1n disponibles inmediatamente pero incurre en mayor latencia de escritura<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Merge on Read<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; hace uso de la escritura en <\/span><i><span style=\"font-weight: 400;\">logs<\/span><\/i><span style=\"font-weight: 400;\">. Los nuevos registros son inicialmente escritos como <\/span><i><span style=\"font-weight: 400;\">logs<\/span><\/i><span style=\"font-weight: 400;\">, y posteriormente ser\u00e1n transformados a formato columnar por el proceso de compactaci\u00f3n. Obtenemos menor latencia de escritura a costa de latencia de lectura; los nuevos registros no estar\u00e1n disponibles hasta que se realice la compactaci\u00f3n.<br \/><br \/><\/span><\/li><\/ul><h3><span style=\"font-weight: 400;\">Tipos de Query<\/span><\/h3><p><span style=\"font-weight: 400;\">Para poder aprovechar las caracter\u00edsticas de cada tipo de tabla, existen tres tipos de <\/span><i><span style=\"font-weight: 400;\">queries <\/span><\/i><span style=\"font-weight: 400;\">que se pueden realizar sobre una tabla de Hudi<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Snapshot<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; obtiene la \u00faltima versi\u00f3n de la tabla. Para las tablas MoR esto implica incurrir en un proceso de compactaci\u00f3n para obtener los \u00faltimos registros en formato <\/span><i><span style=\"font-weight: 400;\">log<\/span><\/i><span style=\"font-weight: 400;\">.\u00a0<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Read Optimized<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; para tablas MoR, lee s\u00f3lamente los registros ya expuestos en formato columnar sin incurrir en latencia de lectura adicional.<\/span><\/li><li><b><i>Incremental<\/i><\/b> <span style=\"font-weight: 400;\">&#8211; recoge \u00fanicamente los nuevos registros desde un cierto <\/span><i><span style=\"font-weight: 400;\">commit <\/span><\/i><span style=\"font-weight: 400;\">o compactaci\u00f3n, facilitando la creaci\u00f3n de <\/span><i><span style=\"font-weight: 400;\">pipelines <\/span><\/i><span style=\"font-weight: 400;\">incrementales. No est\u00e1 soportada por Athena<\/span><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-631aaaa elementor-widget elementor-widget-image\" data-id=\"631aaaa\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"821\" height=\"361\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image1.png\" class=\"attachment-large size-large wp-image-15647 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image1.png 821w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image1-300x132.png 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image1-768x338.png 768w\" data-sizes=\"(max-width: 821px) 100vw, 821px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 821px; --smush-placeholder-aspect-ratio: 821\/361;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce8c917 elementor-widget elementor-widget-text-editor\" data-id=\"ce8c917\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default elementor-inline-editing pen\" contenteditable=\"true\" data-elementor-setting-key=\"title\" data-pen-placeholder=\"Teclea aqu\u00ed...\">Integraci\u00f3n con Glue Catalog<\/h2><p><span style=\"font-weight: 400;\"><br \/>El conector de Hudi permite una integraci\u00f3n nativa con el cat\u00e1logo de Glue en AWS. Basta con a\u00f1adir las dependencias de Hive en nuestra aplicaci\u00f3n de Flink:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d7bfae8 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"d7bfae8\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>com.amazonaws.aws-java-sdk-glue\r\norg.apache.hive.hive-common\r\norg.apache.hive.hive-exec <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0aebff7 elementor-widget elementor-widget-text-editor\" data-id=\"0aebff7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Y especificar la configuraci\u00f3n del cat\u00e1logo en el conector de Hudi:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-110116e elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"110116e\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>&#039;hive_sync.enable&#039; = &#039;true&#039;,\r\n&#039;hive_sync.db&#039; = &#039;{glue_database}&#039;,\r\n&#039;hive_sync.table&#039; = &#039;{table_name}&#039;,\r\n&#039;hive_sync.partition_fields&#039; = &#039;{partition_fields}&#039;,\r\n&#039;hive_sync.mode&#039; = &#039;glue&#039;,\r\n&#039;hive_sync.use_jdbc&#039; = &#039;false&#039; <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-61c32f2 elementor-widget elementor-widget-text-editor\" data-id=\"61c32f2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Con esta integraci\u00f3n, la aplicaci\u00f3n crear\u00e1 autom\u00e1ticamente las tablas en el cat\u00e1logo. Como hemos mencionado anteriormente, existen distintos tipos de <\/span><i><span style=\"font-weight: 400;\">query <\/span><\/i><span style=\"font-weight: 400;\">para consultar una tabla de Hudi. Se crear\u00e1n por tanto en el cat\u00e1logo distintas tablas para soportar las diferentes consultas.<\/span><\/p><p><span style=\"font-weight: 400;\">Para una tabla CoW, la tabla se consultar\u00e1 mediante una query <\/span><i><span style=\"font-weight: 400;\">Snapshot<\/span><\/i><span style=\"font-weight: 400;\">. Para MoR en cambio se pondr\u00e1n a disposici\u00f3n dos tablas, para soportar consultas <\/span><i><span style=\"font-weight: 400;\">Read Optimized<\/span><\/i><span style=\"font-weight: 400;\"> o <\/span><i><span style=\"font-weight: 400;\">Snapshot<\/span><\/i><span style=\"font-weight: 400;\">.<\/span><\/p><p><span style=\"font-weight: 400;\">La principal aplicaci\u00f3n de Glue es de soporte a las lambdas para que al ejecutar las queries mediante Athena su ejecuci\u00f3n pueda realizarse de una forma m\u00e1s eficiente, r\u00e1pida y segura:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Glue Catalog:<\/b><span style=\"font-weight: 400;\"> almacenamiento centralizado de la informaci\u00f3n acerca de la organizaci\u00f3n, dise\u00f1o y formato de los datos, utilizado por Athena para realizar directamente las consultas a S3 sin necesidad de tener que apoyarse en terceros para conseguir esta informaci\u00f3n<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Automatizaci\u00f3n del Esquema:<\/b><span style=\"font-weight: 400;\"> Glue rastrea y cataloga autom\u00e1ticamente los datos en S3, detectando y adaptando los cambios en el esquema. Esto evita posibles errores y permite la lectura de los nuevos campos en caso de que se produzcan alteraciones en los esquemas de los eventos<\/span><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec17b62 elementor-widget elementor-widget-heading\" data-id=\"ec17b62\" data-element_type=\"widget\" id=\"clonacion\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Configuraci\u00f3n de Hudi<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f77738 elementor-widget elementor-widget-text-editor\" data-id=\"3f77738\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Es importante entender las configuraciones que nos ofrece Hudi para optimizar nuestra aplicaci\u00f3n, en particular para una aplicaci\u00f3n en <\/span><i><span style=\"font-weight: 400;\">Near Real Time <\/span><\/i><span style=\"font-weight: 400;\">conviene estar al tanto de las opciones disponibles. Aunque la capacidad de configuraci\u00f3n es inmensa <a href=\"#referencias\">[<\/a><\/span><span style=\"font-weight: 400;\">1<\/span><span style=\"font-weight: 400;\">], se intentar\u00e1 sintetizar las que pueden ser m\u00e1s relevantes para una primera toma de contacto con esta tecnolog\u00eda.<\/span><\/p><h3><span style=\"font-weight: 400;\">Particionado<\/span><\/h3><p><span style=\"font-weight: 400;\">Apache Hudi ofrece los tipos de particionado que pueden encontrarse en otras soluciones, se detallar\u00e1n las principales y se justificara la implementada:<\/span><span style=\"font-weight: 400;\"><br \/><\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Simple<\/b><span style=\"font-weight: 400;\">: particionado basado en un \u00fanico campo, en este caso el campo escogido es \u2018ticker\u2019 ya que se ha identificado que es el que tiene una cardinalidad menor.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Particionado Compuesto<\/b><span style=\"font-weight: 400;\">: particionamiento basado en m\u00faltiples campos, podr\u00eda resultar interesante escoger un campo de baja cardinalidad (ticker) y otro de cardinalidad media (fecha)<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Particionado Din\u00e1mico<\/b><span style=\"font-weight: 400;\">: elecci\u00f3n de la variable en base de los valores, puede resultar interesante cuando la cardinalidad de las variables puede sufrir variaciones y se quiera una actualizaci\u00f3n del particionamiento de una forma autom\u00e1tica y flexible.<\/span><\/li><\/ul><h3><span style=\"font-weight: 400;\">\u00cdndices<\/span><\/h3><p><span style=\"font-weight: 400;\">Apache Hudi cuenta con una m\u00faltiples\u00a0 tipos de indexaci\u00f3n<a href=\"#referencias\">[<\/a><\/span><span style=\"font-weight: 400;\">2<\/span><span style=\"font-weight: 400;\">], comentaremos brevemente los m\u00e1s comunes:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Bloom Index<\/i><\/b><span style=\"font-weight: 400;\"> &#8211; Hace uso de un bloom filter sobre la <\/span><i><span style=\"font-weight: 400;\">key<\/span><\/i><span style=\"font-weight: 400;\"> de los eventos, adicionalmente se puede complementar con un filtrado por rango de de <\/span><i><span style=\"font-weight: 400;\">key<\/span><\/i><span style=\"font-weight: 400;\">. Funciona bien cuando tratamos con una tabla donde la mayor\u00eda de cambios ocurren en las particiones m\u00e1s recientes o para deduplicado de eventos.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Simple<\/i><\/b><span style=\"font-weight: 400;\">: indexaci\u00f3n realizada mediante la combinaci\u00f3n de <\/span><i><span style=\"font-weight: 400;\">FileID<\/span><\/i><span style=\"font-weight: 400;\"> y <\/span><i><span style=\"font-weight: 400;\">RecordKey<\/span><\/i><span style=\"font-weight: 400;\">. Recomendado cuando las operaciones <\/span><i><span style=\"font-weight: 400;\">Upsert <\/span><\/i><span style=\"font-weight: 400;\">no son tan frecuentes debido a la simplicidad que este ofrece.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Ambos tipos de \u00edndices pueden ser usados en su forma global<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>\u00cdndice global<\/b><span style=\"font-weight: 400;\"> &#8211; Imponen la unicidad de las <\/span><i><span style=\"font-weight: 400;\">keys<\/span><\/i><span style=\"font-weight: 400;\"> en todas las particiones de la tabla, es decir, garantizan que existir\u00e1 s\u00f3lamente un registro con una cierta <\/span><i><span style=\"font-weight: 400;\">key<\/span><\/i><span style=\"font-weight: 400;\">.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>\u00cdndice no global<\/b><span style=\"font-weight: 400;\"> &#8211; La unicidad de la <\/span><i><span style=\"font-weight: 400;\">key<\/span><\/i><span style=\"font-weight: 400;\"> s\u00f3lo es exigida a nivel de partici\u00f3n. Si los datos son consistentes y una key s\u00f3lo va a existir en una partici\u00f3n, este tipo de \u00edndices ofrecen un rendimiento mucho mayor y mejor escalado.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">En este caso, se ha optado por un <\/span><i><span style=\"font-weight: 400;\">Bloom Index<\/span><\/i><span style=\"font-weight: 400;\">, el cual es el que se toma por defecto en caso de que no se declare expresamente:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-86d3821 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"86d3821\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>&quot;hoodie.index.type&quot; = &quot;BLOOM&quot; <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7629201 elementor-widget elementor-widget-text-editor\" data-id=\"7629201\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">La elecci\u00f3n de este tipo de indexaci\u00f3n se debe a que los casos de uso que se han planteado requieren de un procesamiento de datos considerablemente alto y eficiente.<\/span><\/p><h3><span style=\"font-weight: 400;\">Tipos de operaci\u00f3n<\/span><\/h3><p><span style=\"font-weight: 400;\">Apache Hudi ofrece varios tipos de operaciones<a href=\"#referencias\">[<\/a><\/span><span style=\"font-weight: 400;\">3<\/span><span style=\"font-weight: 400;\">] que permiten a los usuarios administrar y modificar conjuntos de datos de gran tama\u00f1o. A continuaci\u00f3n se detallan tanto las principales operaciones realizadas en los Stress Tests como en otros escenarios:<\/span><span style=\"font-weight: 400;\"><br \/><\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Upsert &#8211; <\/i><\/b><span style=\"font-weight: 400;\">Es la operaci\u00f3n por defecto, y ejecutar\u00e1 un insert o un update dependiendo de si el registro ya existe tras una b\u00fasqueda en el \u00edndice. Con esta operaci\u00f3n la tabla no tendr\u00e1 duplicados para su clave primaria.<\/span><\/li><li aria-level=\"1\"><b>Insert &#8211; <\/b><span style=\"font-weight: 400;\">Esta operaci\u00f3n ignora la b\u00fasqueda en el \u00edndice a la hora de insertar eventos. Es la m\u00e1s r\u00e1pida pero la tabla puede contener duplicados. A\u00fan as\u00ed es \u00fatil si se utilizan m\u00e9todos auxiliares\u00a0 de deduplicado, o simplemente la existencia de estos es tolerable en el caso de uso.<\/span><\/li><li aria-level=\"1\"><b><i>Delete<\/i><\/b><span style=\"font-weight: 400;\">: Hudi ofrece dos m\u00e9todos de borrado. <\/span><i><span style=\"font-weight: 400;\">Soft Delete<\/span><\/i><span style=\"font-weight: 400;\"> convierte a nulos los valores del evento a excepci\u00f3n de la <\/span><i><span style=\"font-weight: 400;\">key<\/span><\/i><span style=\"font-weight: 400;\">. <\/span><i><span style=\"font-weight: 400;\">Hard Delete<\/span><\/i><span style=\"font-weight: 400;\"> ejecuta un borrado f\u00edsico del evento en la tabla.<\/span><\/li><li aria-level=\"1\"><b><i>Bulk Insert<\/i><\/b><span style=\"font-weight: 400;\"> Operaci\u00f3n similar al Insert pero optimizada para la inserci\u00f3n de un gran volumen de datos, a costa de sacrificar ciertas garant\u00edas en el control del tama\u00f1o de ficheros. Escala bien para cientos de TBs en caso de <\/span><i><span style=\"font-weight: 400;\">bootstrap<\/span><\/i><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"> inicial de una tabla de gran tama\u00f1o.<\/span><\/span><\/li><\/ul><h3><span style=\"font-weight: 400;\">Compactaci\u00f3n<\/span><\/h3><p><span style=\"font-weight: 400;\">En el caso de usar una tabla MoR es posible configurar el ritmo de compactaci\u00f3n de logs en parquet para buscar el equilibrio entre latencia de escritura y lectura que m\u00e1s convenga al caso de uso. Se pueden especificar una estrategia de tiempo o n\u00famero de delta commits (o ambos) que ejecutan un proceso de compactaci\u00f3n:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-544fc8c elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"544fc8c\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>compaction.delta_commits\r\ncompaction.delta_seconds\r\ncompaction.trigger.strategy <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-624c648 elementor-widget elementor-widget-text-editor\" data-id=\"624c648\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><span style=\"font-weight: 400;\">Acciones as\u00edncronas<\/span><\/h3><p><span style=\"font-weight: 400;\">Ciertas acciones de la <\/span><i><span style=\"font-weight: 400;\">timeline <\/span><\/i><span style=\"font-weight: 400;\">como la compactaci\u00f3n, limpieza, archivado y <\/span><i><span style=\"font-weight: 400;\">clustering <\/span><\/i><span style=\"font-weight: 400;\">pueden ser realizadas as\u00edncronamente por la aplicaci\u00f3n, o incluso ser relegadas a procesos auxiliares a la aplicaci\u00f3n de escritura. Para el caso de Flink, puede ayudar a mejorar la latencia de escritura y evitar problemas de <\/span><i><span style=\"font-weight: 400;\">BackPressure<\/span><\/i><span style=\"font-weight: 400;\"> en la aplicaci\u00f3n:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-48408c0 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"48408c0\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>compaction.async.enabled\r\nhoodie.clean.async\r\nhoodie.archive.async\r\nhoodie.clustering.async.enabled <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b2b8ef elementor-widget elementor-widget-heading\" data-id=\"7b2b8ef\" data-element_type=\"widget\" id=\"conclusiones\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Stress Tests &amp; Insights\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-885b490 elementor-widget elementor-widget-text-editor\" data-id=\"885b490\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Al desplegar las aplicaciones, se ha procedido a realizar distintos <\/span><i><span style=\"font-weight: 400;\">tests <\/span><\/i><span style=\"font-weight: 400;\">variando tanto la carga m\u00e1xima de eventos como la concurrencia y el grado exponencial de crecimiento de los mismos. Esto ha sido posible\u00a0 gracias a la flexibilidad ofrecida por Locust al estar levantado sobre un cluster de Kubernetes, pudiendo establecer un l\u00edmite m\u00e1ximo de concurrencia de eventos y un incremental de los mismos. En los <\/span><i><span style=\"font-weight: 400;\">tests <\/span><\/i><span style=\"font-weight: 400;\">se ha establecido un l\u00edmite m\u00e1ximo de 5 a 15K usuarios simult\u00e1neos (<\/span><i><span style=\"font-weight: 400;\">Peak Concurrency<\/span><\/i><span style=\"font-weight: 400;\">) escalando la frecuencia de los mismos de forma lineal, desde 5 a 20 usuarios m\u00e1s por segundo (<\/span><i><span style=\"font-weight: 400;\">Spawn Rate<\/span><\/i><span style=\"font-weight: 400;\">):<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b85548e elementor-widget elementor-widget-image\" data-id=\"b85548e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"383\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image12-1024x383.png\" class=\"attachment-large size-large wp-image-15658 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image12-1024x383.png 1024w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image12-300x112.png 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image12-768x288.png 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/image12.png 1167w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/383;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-10777c1 elementor-widget elementor-widget-text-editor\" data-id=\"10777c1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Se ha procedido a monitorizar los distintos test para as\u00ed sacar conclusiones del rendimiento teniendo en cuenta las caracter\u00edsticas espec\u00edficas de cada uno de los formatos. Las m\u00e9tricas en las que se han apoyado los an\u00e1lisis son tanto las nativas de CloudWatch Metrics (<\/span><i><span style=\"font-weight: 400;\">CPU &amp; Memory Utilization<\/span><\/i><span style=\"font-weight: 400;\">, <\/span><i><span style=\"font-weight: 400;\">KPUs<\/span><\/i><span style=\"font-weight: 400;\">, <\/span><i><span style=\"font-weight: 400;\">LastCheckpoint SIze &amp; Duration<\/span><\/i><span style=\"font-weight: 400;\">,..), como las m\u00e9tricas obtenidas a partir de las Lambdas que peri\u00f3dicamente consultan el n\u00famero de eventos disponibles en los buckets y realizan c\u00e1lculos del promedio de la latencia de los mismos.<\/span><\/p><h3><span style=\"font-weight: 400;\"><br \/>N\u00famero de Eventos<\/span><\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1691708 elementor-widget elementor-widget-image\" data-id=\"1691708\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"135\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/low5.jpg\" class=\"attachment-large size-large wp-image-15769 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/low5.jpg 1000w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/low5-300x41.jpg 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/low5-768x104.jpg 768w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/135;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ddb9efb elementor-widget elementor-widget-text-editor\" data-id=\"ddb9efb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">A la hora de analizar el n\u00famero total de eventos procesados, los cuales son enviados de forma gradual, es decir, a medida que pasa el tiempo cada vez son m\u00e1s los eventos que se env\u00edan por segundo, se identifica una tendencia bastante similar aunque destacan JSON y Hudi MoR sobre Hudi CoW en cuanto a la rendimiento. Cabe destacar que JSON muestra un crecimiento m\u00e1s estable y constante en comparaci\u00f3n con Hudi MoR y CoW y esto se debe a que estos \u00faltimos son capaces de manejar actualizaciones incrementales en los datos.<\/span><\/p><p><span style=\"font-weight: 400;\">La similitud entre JSON y Hudi MoR hace que la elecci\u00f3n se base completamente en las caracter\u00edsticas del proyecto. En caso de que los datos no sean actualizados JSON puede resultar una soluci\u00f3n m\u00e1s interesante debido principalmente a su simplicidad, mientras que si hay una alta frecuencia de actualizaci\u00f3n de datos hist\u00f3ricos, Hudi MoR puede ser una mejor soluci\u00f3n. Esto se debe tanto a la mayor eficiencia en las tareas de lectura como por la posibilidad de registrar las distintas versiones de los datos.<\/span><\/p><p>\u00a0<\/p><h3><span style=\"font-weight: 400;\">Latencia<\/span><\/h3><p><span style=\"font-weight: 400;\">Debido a la dificultad de estandarizar la l\u00f3gica del c\u00e1lculo de la latencia entre 3 tipos de almacenamiento distintos, se ha optado por simplificarla calculandolo como la diferencia entre la hora de creaci\u00f3n del evento y la del procesamiento en la respectiva aplicaci\u00f3n.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e8274c elementor-widget elementor-widget-image\" data-id=\"9e8274c\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"135\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new4.jpg\" class=\"attachment-large size-large wp-image-15784 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new4.jpg 1000w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new4-300x41.jpg 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new4-768x104.jpg 768w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/135;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-481b842 elementor-widget elementor-widget-text-editor\" data-id=\"481b842\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Se observa un comportamiento similar entre JSON y Hudi MoR, aunque este primero de una forma m\u00e1s cr\u00edtica, al tener una latencia inicial muy baja pero a medida que tanto el tiempo de procesamiento como el volumen de carga aumenta, esta latencia se ve negativamente afectada.<\/span><\/p><p><span style=\"font-weight: 400;\">La elecci\u00f3n entre JSON y Hudi MoR depender\u00e1 tanto de la tolerancia de fallo que tenga la aplicaci\u00f3n como las propias caracter\u00edsticas de cada uno de los formatos, en caso de que la estructura de los datos sea estable y no cambie con frecuencia,o bien, no dependa de actualizaciones incrementales y pueda lidiar con reescrituras completas, en ese caso JSON puede que sea una mejor opci\u00f3n.<\/span><\/p><p><span style=\"font-weight: 400;\">La elecci\u00f3n de Hudi CoW sobre MoR puede darse cuando se necesite una alta tolerancia a errores y una alta capacidad de recuperaci\u00f3n de eventos de escritura fallidos o corrompidos.`<\/span><\/p><h3><span style=\"font-weight: 400;\"><br \/>Uso de CPU<\/span><\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-363e3ae elementor-widget elementor-widget-image\" data-id=\"363e3ae\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"135\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new3.jpg\" class=\"attachment-large size-large wp-image-15786 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new3.jpg 1000w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new3-300x41.jpg 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new3-768x104.jpg 768w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/135;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b0d410b elementor-widget elementor-widget-text-editor\" data-id=\"b0d410b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Al analizar el uso de CPU, se ha identificado cierta homogeneidad entre los distintos <\/span><i><span style=\"font-weight: 400;\">tests <\/span><\/i><span style=\"font-weight: 400;\">aun trabajando con distintas cargas de trabajo. JSON Y Hudi MoR destacan por tener los niveles de uso de CPU m\u00e1s bajos, ambos por distintos motivos. JSON destaca por la simplicidad al incluir directamente los nuevos datos sin necesidad de tener que lidiar con versionado de datos, mientras que MoR no consume tanta CPU ya que por sus caracter\u00edsticas, el consumo mayor de CPU se hace al realizar consultas de lectura, en las tareas de escritura \u00fanicamente identifica los cambios que ser\u00e1n aplicados al consultarlos.<\/span><\/p><p><span style=\"font-weight: 400;\">Recordar que las m\u00e9tricas nativas de CloudWatch \u00fanicamente nos permiten monitorizar las aplicaciones, que corresponden a las tareas de escritura. La monitorizaci\u00f3n de las tareas de lectura corresponde a las Lambdas mencionadas anteriormente.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">En este caso MoR es m\u00e1s beneficioso respecto a CoW, dado que el mayor consumo de CPU en MoR se produce al consultar los datos almacenados mientras que en CoW tiene lugar al actualizar los datos.<\/span><\/p><p><span style=\"font-weight: 400;\">La elecci\u00f3n entre los formatos m\u00e1s eficientes se deben a las necesidades del proyecto, en caso de que se requiera una mayor tolerancia al fallo, versionado de los datos y una mayor eficiencia de lectura, se optara por MoR frente a JSON, entre los dos formatos de Hudi, de nuevo, la elecci\u00f3n depender\u00e1 de las caracter\u00edsticas del proyecto, en caso de que las consultas requieran transformaciones pesadas y\/o complejas se optar\u00eda por MoR, si en cambio, el proyecto requiera de una mayor integridad de datos y\/o la ingesta de datos sea en <\/span><i><span style=\"font-weight: 400;\">batch<\/span><\/i><span style=\"font-weight: 400;\">,\u00a0 resultar\u00eda m\u00e1s interesante CoW debido a que al trabajar con esos vol\u00famenes de datos, el contar con copias de seguridad, en caso de surgir errores, el impacto en t\u00e9rmino de costes y tiempo de recuperaci\u00f3n es menor.<\/span><\/p><p>\u00a0<\/p><h3><span style=\"font-weight: 400;\">Memory Utilization<\/span><\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c72e45f elementor-widget elementor-widget-image\" data-id=\"c72e45f\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"135\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new2.jpg\" class=\"attachment-large size-large wp-image-15788 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new2.jpg 1000w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new2-300x41.jpg 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new2-768x104.jpg 768w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/135;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42a72e3 elementor-widget elementor-widget-text-editor\" data-id=\"42a72e3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">JSON de nuevo destaca por tener los valores de uso de memoria m\u00e1s bajos aunque para la operativa de transformaciones que se realizan son relativamente altos y m\u00e1s teniendo en cuenta que no tiene que lidiar con la administraci\u00f3n de versiones o la combinaci\u00f3n de datos. Estos valores se deben a que no tiene capacidades de compresi\u00f3n optimizadas ni manejo eficiente de esquemas.<\/span><\/p><p><span style=\"font-weight: 400;\">Respecto a Hudi, se pueden obtener unas conclusiones similares a las del apartado de uso de CPU, MoR tiene una utilizaci\u00f3n de memoria mayor que JSON debido al procesamiento de <\/span><i><span style=\"font-weight: 400;\">logs<\/span><\/i><span style=\"font-weight: 400;\"> delta y la administraci\u00f3n de versiones y una menor a CoW ya que la consolidaci\u00f3n real de los datos no ocurre durante la escritura.<\/span><\/p><h3><span style=\"font-weight: 400;\"><br \/>Last Checkpoint Size<\/span><\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5db63db elementor-widget elementor-widget-image\" data-id=\"5db63db\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"135\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new1.jpg\" class=\"attachment-large size-large wp-image-15790 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new1.jpg 1000w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new1-300x41.jpg 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/new1-768x104.jpg 768w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/135;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-649700c elementor-widget elementor-widget-text-editor\" data-id=\"649700c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Destacar, nuevamente, la estabilidad de JSON frente a las aplicaciones Hudi, ya que no solo muestra en los <\/span><i><span style=\"font-weight: 400;\">test <\/span><\/i><span style=\"font-weight: 400;\">realizados un valor inferior a ambos, si no una estabilidad que no se consigue ni con MoR ni CoW, ya que como puede apreciarse, al monitorear el tama\u00f1o de los <\/span><i><span style=\"font-weight: 400;\">Checkpoints<\/span><\/i><span style=\"font-weight: 400;\">, se percibe una volatilidad considerable.<\/span><\/p><p><span style=\"font-weight: 400;\">La volatilidad percibida en las aplicaciones Hudi se debe principalmente a fallos surgidos en <\/span><i><span style=\"font-weight: 400;\">Checkpoints <\/span><\/i><span style=\"font-weight: 400;\">lo que conlleva que el <\/span><i><span style=\"font-weight: 400;\">Checkpoint <\/span><\/i><span style=\"font-weight: 400;\">posterior al fallido, tenga un volumen mayor. Adem\u00e1s de esto, la volatilidad en los tama\u00f1os de los <\/span><i><span style=\"font-weight: 400;\">Checkpoints <\/span><\/i><span style=\"font-weight: 400;\">puede estar relacionado con las operaciones de optimizaci\u00f3n y compactaci\u00f3n realizadas internamente que puede conllevar la compactaci\u00f3n del estado y que esto reduzca considerablemente el tama\u00f1o del mismo.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-45e03ee elementor-widget elementor-widget-heading\" data-id=\"45e03ee\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Desaf\u00edos en el desarrollo<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e06b516 elementor-widget elementor-widget-text-editor\" data-id=\"e06b516\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><span style=\"font-weight: 400;\">Read Throughput de Kinesis y EFO<\/span><\/h3><p><span style=\"font-weight: 400;\">Para no sobrepasar el l\u00edmite de lectura sobre el Kinesis Stream se ha optado por suscribir los consumidores como Enhanced Fan-Out. En algunas pruebas en conjunto con Autoscaling esto ha dado problemas con el conector de Kinesis de Flink siendo incapaces de cerrar conexiones a la hora de escalar el cluster.<\/span><\/p><h3><span style=\"font-weight: 400;\"><br \/>Configuraci\u00f3n de Hudi<\/span><\/h3><p><span style=\"font-weight: 400;\">La configuraci\u00f3n de Hudi ha sido otro de los puntos de fricci\u00f3n durante el desarrollo. Bajo cargas elevadas los procesos de compactaci\u00f3n y limpieza son m\u00e1s propensos a causar problemas de Backpressure y causar errores en la aplicaci\u00f3n. Aunque configurar estos procesos para que ocurran de forma as\u00edncrona puede aliviar este problema, pueden surgir conflictos y desalineaci\u00f3n entre procesos bajo cargas elevadas. Un equilibrio entre estas configuraciones y la capacidad del cluster de la aplicaci\u00f3n son claves para el buen funcionamiento de la aplicaci\u00f3n.<br \/><br \/><\/span><\/p><h3><span style=\"font-weight: 400;\">Heterogeneidad de formato<\/span><\/h3><p><span style=\"font-weight: 400;\">Al hacer un an\u00e1lisis del rendimiento de las 3 aplicaciones, se cuenta con una dificultad adicional debido a la naturaleza de los tipos de formato, teniendo esto tanto un impacto a la hora de plantear la arquitectura como en el planteamiento de las l\u00f3gicas.<\/span><span style=\"font-weight: 400;\"><br \/><\/span><span style=\"font-weight: 400;\">El distinto comportamiento de los formatos en la ingesta, complica el desarrollo de las l\u00f3gicas a la hora de calcular la latencia. MoR escribe en logs previa compactaci\u00f3n, por lo que los datos no est\u00e1n disponibles inmediatamente como ocurre con CoW o JSON.\u00a0 Esto implica que la m\u00e9trica com\u00fan medible para todos los formatos es la de disponibilidad de lectura, la cual no es el principal objetivo de una tabla MoR.\u00a0\u00a0<\/span><\/p><h3><span style=\"font-weight: 400;\"><br \/>Sincronizaci\u00f3n con el Glue Catalog<\/span><\/h3><p><span style=\"font-weight: 400;\">Una de las grandes ventajas que nos hemos encontrado con Hudi es su capacidad para sincronizarse con el cat\u00e1logo de Glue, creando las tablas y manteni\u00e9ndose actualizadas sin necesidad de un crawler. Esto permite una aplicaci\u00f3n y arquitectura m\u00e1s limpia que para el caso de JSON, para el cual debe ejecutarse manualmente al desplegar las aplicaciones.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7739c9b elementor-widget elementor-widget-heading\" data-id=\"7739c9b\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusiones<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c8a87a1 elementor-widget elementor-widget-text-editor\" data-id=\"c8a87a1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Los resultados de los <\/span><i><span style=\"font-weight: 400;\">tests <\/span><\/i><span style=\"font-weight: 400;\">muestran <\/span><b>diferencias considerables entre los formatos JSON, Hudi MoR y CoW<\/b><span style=\"font-weight: 400;\"> en t\u00e9rminos de eficiencia, capacidad de respuesta y utilizaci\u00f3n de recursos. Se procede a analizar cada uno de los aspectos m\u00e1s en detalle:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Eficiencia de Procesamiento:<\/b><span style=\"font-weight: 400;\"> JSON y Hudi MoR destacan en la mayor\u00eda de las m\u00e9tricas, mostrando un desempe\u00f1o \u00f3ptimo en t\u00e9rminos de Latencia, <\/span><i><span style=\"font-weight: 400;\">CPU &amp; Memory Utilization<\/span><\/i><span style=\"font-weight: 400;\">. Sin embargo, el comportamiento de JSON es m\u00e1s estable y predecible, aunque MoR cuente con ventajas sobre JSON, como por ejemplo, en la gesti\u00f3n de actualizaciones incrementales.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Resiliencia y Tolerancia a Fallos:<\/b><span style=\"font-weight: 400;\"> la tolerancia a fallos es un factor muy importante en la decisi\u00f3n sobre la elecci\u00f3n entre Hudi y JSON. En el caso de\u00a0 MoR y CoW, depender\u00e1 del grado de criticidad, ya que a nivel general el rendimiento en tareas de escritura para MoR es superior.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Uso de Recursos: <\/b><span style=\"font-weight: 400;\">JSON se muestra como el m\u00e1s ligero, con baja utilizaci\u00f3n de CPU y memoria, debido a su simplicidad inherente. Mientras que Hudi MoR y CoW, por la naturaleza de su dise\u00f1o y gesti\u00f3n de datos, requieren m\u00e1s recursos, especialmente en operaciones que involucran el manejo de versiones y la compactaci\u00f3n de datos.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Para finalizar, resulta interesante identificar en <\/span><span style=\"font-weight: 400;\">qu\u00e9que<\/span><b> casos de uso o proyectos puede resultar m\u00e1s recomendable cada uno de los formatos<\/b><span style=\"font-weight: 400;\"> en funci\u00f3n de las caracter\u00edsticas de los mismos y las <\/span><i><span style=\"font-weight: 400;\">red flags <\/span><\/i><span style=\"font-weight: 400;\">que puedan establecerse:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>JSON:<\/b><span style=\"font-weight: 400;\"> Recomendado para aplicaciones con estructuras de datos estables que no requieren actualizaciones incrementales y donde la simplicidad y la estabilidad son clave.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Hudi MoR:<\/b><span style=\"font-weight: 400;\"> Adecuado para proyectos que requieren una gesti\u00f3n eficiente de actualizaciones incrementales y donde la latencia y la eficiencia en la escritura son cruciales.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Hudi CoW:<\/b><span style=\"font-weight: 400;\"> Ideal para contextos donde la integridad de los datos es esencial, y se necesita una robusta recuperaci\u00f3n de errores, especialmente en escenarios de ingestas en batch.\u00a0<\/span><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-30687e6 elementor-widget elementor-widget-spacer\" data-id=\"30687e6\" data-element_type=\"widget\" id=\"ref\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-239ebd9 elementor-widget elementor-widget-heading\" data-id=\"239ebd9\" data-element_type=\"widget\" id=\"referencias\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Referencias<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e34c034 elementor-widget elementor-widget-text-editor\" data-id=\"e34c034\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">[1] Configuraciones Tablas Hudi. [<\/span><a href=\"https:\/\/hudi.apache.org\/docs\/next\/configurations\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[2] Tipos de Indexacion Hudi. [<\/span><a href=\"https:\/\/hudi.apache.org\/docs\/next\/indexing\/#index-types-in-hudi\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[3] Tipos de Operaciones Hudi. [<\/span><a href=\"https:\/\/hudi.apache.org\/docs\/write_operations\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec110af elementor-widget elementor-widget-heading\" data-id=\"ec110af\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Autores<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ede07de elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"ede07de\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/albertojaenrevuelta\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/albertojaenrevuelta\/\" target=\"_blank\">Alberto Jaen<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ac9bbd1 elementor-widget elementor-widget-text-editor\" data-id=\"ac9bbd1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Empec\u00e9 mi carrera laboral con el desarrollo, mantenimiento y administraci\u00f3n de bases de datos multidimensionales y <\/span><i><span style=\"font-weight: 400;\">Data Lakes<\/span><\/i><span style=\"font-weight: 400;\">. A partir de ah\u00ed comenc\u00e9 a estar interesado en plataformas de datos y arquitecturas cloud, estando certificado 3 veces en AWS y 2 con Hashicorp.<\/span><\/p><p><span style=\"font-weight: 400;\">Actualmente me encuentro trabajando como un <\/span><i><span style=\"font-weight: 400;\">Cloud Engineer <\/span><\/i><span style=\"font-weight: 400;\">desarrollando Data Lakes y DataWarehouses con AWS para un cliente relacionado con la organizaci\u00f3n de eventos deportivos a nivel mundial.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8441f44 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"8441f44\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/alfonsojerezizquierdo\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/alfonsojerezizquierdo\/\" target=\"_blank\">Alfonso Jerez<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-863802c elementor-widget elementor-widget-text-editor\" data-id=\"863802c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div>Apasionado de los datos y las nuevas tecnolog\u00edas, especializado como AWS Cloud Engineer en la optimizaci\u00f3n de DataWarehouses y procesos de ingesta y transformaci\u00f3n de Data Lakes. Motivado por la mejora continua y automatizaci\u00f3n de la integraci\u00f3n de servicios.<\/div><p>Colaborando activamente con el grupo de Pr\u00e1ctica Cloud en investigaciones y desarrollo de blogs de tecnolog\u00edas punteras e innovadoras tales como esta, fomentando as\u00ed el continuo aprendizaje.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2a26f7 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"c2a26f7\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/adrianjimenezhernandez\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/adrianjimenezhernandez\/\" target=\"_blank\">Adri\u00e1n Jim\u00e9nez<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e0baea elementor-widget elementor-widget-text-editor\" data-id=\"4e0baea\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Dedicado al aprendizaje constante de nuevas tecnolog\u00edas y su aplicaci\u00f3n, disfrutando de utilizarlas en la resoluci\u00f3n de desaf\u00edos tecnol\u00f3gicos. Desarrollo mi carrera como Cloud Engineer dise\u00f1ando, implementando y manteniendo infraestructura en AWS.<\/span><\/p><p><span style=\"font-weight: 400;\">Colaboro activamente en la Pr\u00e1ctica Cloud, donde investigamos y experimentamos con nuevas tecnolog\u00edas, buscando soluciones para los retos que enfrentan nuestros clientes.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65c3381 elementor-widget elementor-widget-spacer\" data-id=\"65c3381\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-f668113 nav-column elementor-hidden-phone\" data-id=\"f668113\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d289a2d elementor-widget elementor-widget-table-of-contents\" data-id=\"d289a2d\" data-element_type=\"widget\" data-settings=\"{&quot;headings_by_tags&quot;:[&quot;h2&quot;],&quot;exclude_headings_by_selector&quot;:[],&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_offset&quot;:150,&quot;sticky_parent&quot;:&quot;yes&quot;,&quot;marker_view&quot;:&quot;numbers&quot;,&quot;no_headings_message&quot;:&quot;No se ha encontrado ning\\u00fan encabezado en esta p\\u00e1gina.&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\tNavegaci\u00f3n\t\t\t<\/h4>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__d289a2d\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<i class=\"elementor-toc__spinner eicon-animation-spin eicon-loading\" aria-hidden=\"true\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-09395a3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"09395a3\" data-element_type=\"section\" id=\"autores\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2ba3c08\" data-id=\"2ba3c08\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7a7e9b1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7a7e9b1\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-0225831\" data-id=\"0225831\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-816937f\" data-id=\"816937f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-756365e elementor-share-buttons--view-icon elementor-share-buttons--skin-minimal elementor-share-buttons--shape-circle elementor-grid-0 elementor-share-buttons--color-official elementor-widget elementor-widget-share-buttons\" data-id=\"756365e\" data-element_type=\"widget\" data-widget_type=\"share-buttons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_twitter\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-twitter\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_linkedin\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-linkedin\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-f18d1b8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f18d1b8\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-b490454\" data-id=\"b490454\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a76f07c elementor-widget elementor-widget-heading\" data-id=\"a76f07c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">\u00bfQuieres saber m\u00e1s de lo que ofrecemos y ver otros casos de \u00e9xito?<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7365ecc elementor-align-center elementor-widget elementor-widget-button\" data-id=\"7365ecc\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/es\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">DESCUBRE BLUETAB<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ec3a45 elementor-widget elementor-widget-spacer\" data-id=\"1ec3a45\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e6097d2 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"e6097d2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-a66a650\" data-id=\"a66a650\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-38e61b8 elementor-widget elementor-widget-text-editor\" data-id=\"38e61b8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>SOLUCIONES, <\/b>SOMOS EXPERTOS<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-9975abb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9975abb\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-e5edefb\" data-id=\"e5edefb\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0628f91 elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"0628f91\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/data-strategy\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"strategy-opt\" data-bg-image=\"url(https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/10\/strategy-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tDATA STRATEGY\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-8724c63\" data-id=\"8724c63\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bc8b25d elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"bc8b25d\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/data-fabric\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"fabric-opt\" data-bg-image=\"url(https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/10\/fabric-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tDATA FABRIC\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-ddc996d\" data-id=\"ddc996d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1d384cf elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"1d384cf\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/augmented-analytics\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"AUGMENTED-ANALYTICS-opt\" data-bg-image=\"url(https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/10\/AUGMENTED-ANALYTICS-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tAUGMENTED ANALYTICS\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-f61bae8\" data-id=\"f61bae8\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f3fe106 elementor-widget elementor-widget-text-editor\" data-id=\"f3fe106\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Te puede interesar<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9a06bb9 elementor-posts--align-left elementor-grid-1 elementor-posts--thumbnail-left elementor-hidden-phone elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-widget elementor-widget-posts\" data-id=\"9a06bb9\" data-element_type=\"widget\" data-settings=\"{&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:32,&quot;sizes&quot;:[]},&quot;classic_columns&quot;:&quot;1&quot;,&quot;classic_columns_tablet&quot;:&quot;2&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"posts.classic\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-12456 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-practices category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.es\/es\/como-preparar-la-certificacion-aws-data-analytics-specialty\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"150\" data-src=\"https:\/\/bluetab.es\/wp-content\/uploads\/2021\/11\/11-300x150.png\" class=\"attachment-medium size-medium wp-image-17837 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2021\/11\/11-300x150.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/11\/11-1024x512.png 1024w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/11\/11-768x384.png 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/11\/11.png 1200w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/150;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.es\/es\/como-preparar-la-certificacion-aws-data-analytics-specialty\/\" >\n\t\t\t\tC\u00f3mo preparar la certificaci\u00f3n AWS Data Analytics &#8211; Specialty\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tnoviembre 17, 2021\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.es\/es\/como-preparar-la-certificacion-aws-data-analytics-specialty\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre C\u00f3mo preparar la certificaci\u00f3n AWS Data Analytics &#8211; Specialty\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-6778 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-blog category-practices category-tech category-tech-en entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.es\/es\/hashicorp-boundary\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"150\" data-src=\"https:\/\/bluetab.es\/wp-content\/uploads\/2020\/12\/14-300x150.png\" class=\"attachment-medium size-medium wp-image-17845 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2020\/12\/14-300x150.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2020\/12\/14-1024x512.png 1024w, https:\/\/bluetab.es\/wp-content\/uploads\/2020\/12\/14-768x384.png 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2020\/12\/14.png 1200w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/150;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.es\/es\/hashicorp-boundary\/\" >\n\t\t\t\tHashicorp Boundary\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tdiciembre 3, 2020\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.es\/es\/hashicorp-boundary\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre Hashicorp Boundary\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-19564 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.es\/es\/como-pueden-las-empresas-asegurarse-de-que-sus-datos-esten-estructurados-escalables-y-disponibles-cuando-se-necesiten\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"150\" data-src=\"https:\/\/bluetab.es\/wp-content\/uploads\/2024\/09\/Parte-de-arriba-linkidin-2-300x150.png\" class=\"attachment-medium size-medium wp-image-19598 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2024\/09\/Parte-de-arriba-linkidin-2-300x150.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2024\/09\/Parte-de-arriba-linkidin-2-1024x512.png 1024w, https:\/\/bluetab.es\/wp-content\/uploads\/2024\/09\/Parte-de-arriba-linkidin-2-768x384.png 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2024\/09\/Parte-de-arriba-linkidin-2.png 1200w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/150;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.es\/es\/como-pueden-las-empresas-asegurarse-de-que-sus-datos-esten-estructurados-escalables-y-disponibles-cuando-se-necesiten\/\" >\n\t\t\t\t\u00bfC\u00f3mo pueden las empresas asegurarse de que sus datos est\u00e9n estructurados, escalables y disponibles cuando se necesiten?\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tseptiembre 13, 2024\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.es\/es\/como-pueden-las-empresas-asegurarse-de-que-sus-datos-esten-estructurados-escalables-y-disponibles-cuando-se-necesiten\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre \u00bfC\u00f3mo pueden las empresas asegurarse de que sus datos est\u00e9n estructurados, escalables y disponibles cuando se necesiten?\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e82f0bf elementor-posts--align-left elementor-grid-1 elementor-hidden-desktop elementor-hidden-tablet elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-widget elementor-widget-posts\" data-id=\"e82f0bf\" data-element_type=\"widget\" data-settings=\"{&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:32,&quot;sizes&quot;:[]},&quot;classic_columns&quot;:&quot;1&quot;,&quot;classic_columns_tablet&quot;:&quot;2&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"posts.classic\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-14012 post type-post status-publish format-standard has-post-thumbnail category-blog category-blog-es category-outstanding category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.es\/es\/modelos-de-entrega-de-servicios-en-la-nube\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"200\" data-src=\"https:\/\/bluetab.es\/wp-content\/uploads\/2022\/06\/cloud-service-data-security-concept-2021-08-26-16-18-12-utc-300x200.jpg\" class=\"attachment-medium size-medium wp-image-14036 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2022\/06\/cloud-service-data-security-concept-2021-08-26-16-18-12-utc-300x200.jpg 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/06\/cloud-service-data-security-concept-2021-08-26-16-18-12-utc-1024x683.jpg 1024w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/06\/cloud-service-data-security-concept-2021-08-26-16-18-12-utc-768x512.jpg 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/06\/cloud-service-data-security-concept-2021-08-26-16-18-12-utc-1536x1024.jpg 1536w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/06\/cloud-service-data-security-concept-2021-08-26-16-18-12-utc-2048x1365.jpg 2048w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/200;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.es\/es\/modelos-de-entrega-de-servicios-en-la-nube\/\" >\n\t\t\t\tMODELOS DE ENTREGA DE SERVICIOS EN LA NUBE\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tjunio 27, 2022\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.es\/es\/modelos-de-entrega-de-servicios-en-la-nube\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre MODELOS DE ENTREGA DE SERVICIOS EN LA NUBE\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-6341 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-tendencias entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.es\/es\/data-drive-agriculture-big-data-cloud-ai-aplicados\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"180\" data-src=\"https:\/\/bluetab.es\/wp-content\/uploads\/2020\/11\/Blog-agri-300x180.jpg\" class=\"attachment-medium size-medium wp-image-6361 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2020\/11\/Blog-agri-300x180.jpg 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2020\/11\/Blog-agri-768x461.jpg 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2020\/11\/Blog-agri.jpg 800w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/180;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.es\/es\/data-drive-agriculture-big-data-cloud-ai-aplicados\/\" >\n\t\t\t\tData-Drive Agriculture; Big Data, Cloud &#038; AI aplicados\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tnoviembre 4, 2020\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.es\/es\/data-drive-agriculture-big-data-cloud-ai-aplicados\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre Data-Drive Agriculture; Big Data, Cloud &#038; AI aplicados\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-15207 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-practices category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.es\/es\/cdktf-otro-paso-en-el-viaje-del-devops-introduccion-y-beneficios\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"150\" data-src=\"https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/15-300x150.png\" class=\"attachment-medium size-medium wp-image-17829 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/15-300x150.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/15-1024x512.png 1024w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/15-768x384.png 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/15.png 1200w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/150;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.es\/es\/cdktf-otro-paso-en-el-viaje-del-devops-introduccion-y-beneficios\/\" >\n\t\t\t\tCDKTF: Otro paso en el viaje del DevOps, introducci\u00f3n y beneficios.\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tmayo 9, 2023\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.es\/es\/cdktf-otro-paso-en-el-viaje-del-devops-introduccion-y-beneficios\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre CDKTF: Otro paso en el viaje del DevOps, introducci\u00f3n y beneficios.\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Alberto Jaen AWS Cloud Engineer Alfonso Jerez AWS Cloud Engineer Adri\u00e1n Jim\u00e9nez AWS Cloud Engineer Introducci\u00f3n Este art\u00edculo es el segundo en una serie de<\/p>\n","protected":false},"author":1,"featured_media":17825,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"content-sidebar","footnotes":""},"categories":[667,631],"tags":[],"class_list":{"0":"post-15634","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-practices","8":"category-tech","9":"entry"},"uagb_featured_image_src":{"full":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5.png",1200,600,false],"thumbnail":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5-150x150.png",150,150,true],"medium":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5-300x150.png",300,150,true],"medium_large":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5-768x384.png",768,384,true],"large":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5-1024x512.png",1024,512,true],"1536x1536":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5.png",1200,600,false],"2048x2048":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5.png",1200,600,false],"sidebar-featured":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5-75x75.png",75,75,true],"genesis-singular-images":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/10\/5-702x526.png",702,526,true]},"uagb_author_info":{"display_name":"Bluetab","author_link":"https:\/\/bluetab.es\/es\/author\/user\/"},"uagb_comment_info":0,"uagb_excerpt":"Alberto Jaen AWS Cloud Engineer Alfonso Jerez AWS Cloud Engineer Adri\u00e1n Jim\u00e9nez AWS Cloud Engineer Introducci\u00f3n Este art\u00edculo es el segundo en una serie de","_links":{"self":[{"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/posts\/15634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/comments?post=15634"}],"version-history":[{"count":66,"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/posts\/15634\/revisions"}],"predecessor-version":[{"id":17423,"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/posts\/15634\/revisions\/17423"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/media\/17825"}],"wp:attachment":[{"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/media?parent=15634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/categories?post=15634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluetab.es\/es\/wp-json\/wp\/v2\/tags?post=15634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}