{"id":2489,"date":"2020-07-22T10:07:25","date_gmt":"2020-07-22T10:07:25","guid":{"rendered":"https:\/\/bluetab.net\/?p=2489"},"modified":"2020-07-22T10:07:25","modified_gmt":"2020-07-22T10:07:25","slug":"bluetab","status":"publish","type":"post","link":"https:\/\/bluetab.net\/en\/2020\/07\/bluetab\/","title":{"rendered":"Conceptos b\u00e1sicos de AWS Glue"},"content":{"rendered":"<h1>Conceptos b\u00e1sicos de AWS Glue<\/h1>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/alvsanand\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Alvaro-Santos-150x150.jpg\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Alvaro-Santos-150x150.jpg 150w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Alvaro-Santos-300x300.jpg 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Alvaro-Santos-75x75.jpg 75w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Alvaro-Santos.jpg 500w\" sizes=\"(max-width: 150px) 100vw, 150px\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/alvsanand\/\" target=\"_blank\" rel=\"noopener\">\u00c1lvaro Santos<\/a><\/h4>\n<p>Senior Cloud Solution Architect\u200b<\/p>\n<p>Share on twitter<br \/>\nShare on linkedin<\/p>\n<p>Desde la&nbsp;<strong>Pr\u00e1ctica Cloud<\/strong>&nbsp;queremos impulsar la adopci\u00f3n de la nube como forma de trabajo en el mundo de IT. Para ayudar en esta tarea, vamos a publicar multitud de art\u00edculos de buenas pr\u00e1cticas y casos de uso, otros hablar\u00e1n aquellos servicios clave dentro de la nube.<\/p>\n<p>A continuaci\u00f3n os vamos a presentar los conceptos b\u00e1sicos de&nbsp;<strong><a href=\"https:\/\/aws.amazon.com\/es\/glue\">AWS Glue<\/a><\/strong>.<\/p>\n<h2>\u00bfQu\u00e9 es AWS Glue?<\/h2>\n<p><strong>AWS Glue<\/strong>&nbsp;es uno de esos servicios de&nbsp;<em>AWS<\/em>&nbsp;que son relativamente nuevos pero que tienen un enorme potencial. En especial este servicio puede ser muy beneficioso para todas aquellas empresas que trabajan con datos y que a\u00fan no posean una infraestructura de Big Data potente.<\/p>\n<p>B\u00e1sicamente, Glue es un servicio de ETLs totalmente administrado por&nbsp;<em>AWS<\/em>&nbsp;y de pago por uso sin necesidad de aprovisionar instancias. Para conseguirlo, combina la velocidad y potencia de&nbsp;<em>Apache Spark<\/em>&nbsp;con la organizaci\u00f3n de datos que ofrece&nbsp;<em>Hive Metastore<\/em>.<\/p>\n<p><img decoding=\"async\" width=\"800\" height=\"454\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/harmonize_glue_1.gif\" alt=\"\" loading=\"lazy\"><\/p>\n<h2>AWS Glue Data Catalog<\/h2>\n<p>El Cat\u00e1logo de datos de Glue es donde se almacenan todos los or\u00edgenes y destinos de datos para los trabajos de Glue.<\/p>\n<ul>\n<li><strong>Table<\/strong>&nbsp;es la definici\u00f3n de una tabla de metadatos sobre las fuentes de datos y no los datos en s\u00ed. Las tablas de&nbsp;<em>AWS Glue<\/em>&nbsp;pueden referirse datos basados \u200b\u200ben archivos almacenados en S3 (como Parquet, CSV\u2026), tablas de RDBMS\u2026<\/li>\n<li><strong>Database<\/strong>&nbsp;se refiere a una agrupaci\u00f3n de fuentes de datos a las que pertenecen las tablas.<\/li>\n<li><strong>Connection<\/strong>&nbsp;es un enlace configurado entre&nbsp;<em>AWS Glue<\/em>&nbsp;y un cluster de&nbsp;<em>RDS<\/em>,&nbsp;<em>Redshift<\/em>&nbsp;u otra BBDD compatible con&nbsp;<em>JDBC<\/em>. Estas permiten que Glue acceda a sus datos.<\/li>\n<li><strong>Crawler<\/strong>&nbsp;es el servicio encargado de conectarse a un almac\u00e9n de datos, avanza a trav\u00e9s de una lista priorizada de clasificadores para determinar el esquema de los datos y de generar las tablas de metadatos. Son compatibles de determinar el esquema de datos complejos no estructurados o semi-estructurados. \u00c9sto es especialmente importante cuando se trabajan con fuentes de datos de tipo&nbsp;<em>Parquet<\/em>,&nbsp;<em>AVRO<\/em>, \u2026<\/li>\n<\/ul>\n<h2>ETL<\/h2>\n<p>Una&nbsp;<em>ETL<\/em>&nbsp;en&nbsp;<em>AWS Glue<\/em>&nbsp;est\u00e1 compuesta principalmente de los scripts y otras herramientas que utilizan los datos configurados en&nbsp;<em>Data Catalog<\/em>&nbsp;para extraer, transformar y cargar los datos en un sito definido.<\/p>\n<ul>\n<li><strong>Job<\/strong>&nbsp;es el motor principal de la ETL. Un trabajo consiste en un script que carga datos de las fuentes definidas en el cat\u00e1logo y realiza transformaciones sobre ellos. Glue puede generar autom\u00e1ticamente un script, o se puede crear uno personalizado usando la API de&nbsp;<em>Apache Spark<\/em>&nbsp;en&nbsp;<em>Python<\/em>&nbsp;(<em>PySpark<\/em>) o&nbsp;<em>Scala<\/em>. Adem\u00e1s, se permite el uso de bibliotecas externas que vinculara al trabajo mediante un archivo zip en S3.<\/li>\n<li><strong>Triggers<\/strong>&nbsp;se encargan de ejecutar los&nbsp;<em>Jobs<\/em>. Pueden ejecutarse seg\u00fan un cronograma, un evento de CloudWatch o incluso un comandos cron.<\/li>\n<li><strong>Workflows<\/strong>&nbsp;es un conjunto&nbsp;<em>triggers<\/em>,&nbsp;<em>crawlers<\/em>&nbsp;y&nbsp;<em>jobs<\/em>&nbsp;relacionados entre s\u00ed en&nbsp;<em>AWS Glue<\/em>. Con ellos se puede crear un flujo de trabajo para realizar una ETL compleja de varios pasos pero que&nbsp;<em>AWS Glue<\/em>&nbsp;puede ejecutar como entidad \u00fanica.<\/li>\n<li><strong>ML Transforms<\/strong>&nbsp;son unos trabajos espec\u00edficos que mediante modelos de&nbsp;<em>Machine Learning<\/em>&nbsp;crean transformaciones personalizadas para la limpieza de los datos como por ejemplo identificaci\u00f3n de datos duplicados.<\/li>\n<li>Finalmente, tambi\u00e9n es posible usar&nbsp;<strong>Dev Endpoints<\/strong>&nbsp;y&nbsp;<strong>Notebooks<\/strong>, que facilitan el desarrollo y probar los scripts de manera m\u00e1s r\u00e1pida y sencilla.<\/li>\n<\/ul>\n<h2>Ejemplos<\/h2>\n<p>Script de ejemplo de ETL en Python:<\/p>\n<pre><code class=\"language-python\">import sys\nfrom awsglue.transforms import *\nfrom awsglue.utils import getResolvedOptions\nfrom pyspark.context import SparkContext\nfrom awsglue.context import GlueContext\nfrom awsglue.dynamicframe import DynamicFrame\nfrom awsglue.job import Job\nargs = getResolvedOptions(sys.argv, ['JOB_NAME'])\nsc = SparkContext()\nglueContext = GlueContext(sc)\nspark = glueContext.spark_session\njob = Job(glueContext)\n## Read Data from a RDS DB using JDBC driver\nconnection_option = {\n\"url\": \"jdbc:mysql:\/\/mysql\u2013instance1.123456789012.us-east-1.rds.amazonaws.com:3306\/database\",\n\"user\": \"test\",\n\"password\": \"password\",\n\"dbtable\": \"test_table\",\n\"hashexpression\": \"column_name\",\n\"hashpartitions\": \"10\"\n}\nsource_df = glueContext.create_dynamic_frame.from_options('mysql', connection_options = connection_option, transformation_ctx = \"source_df\")\njob.init(args['JOB_NAME'], args)\n## Convert DataFrames to *AWS Glue* 's DynamicFrames Object\ndynamic_df = DynamicFrame.fromDF(source_df, glueContext, \"dynamic_df\")\n## Write Dynamic Frame to S3 in CSV format\ndatasink = glueContext.write_dynamic_frame.from_options(frame = dynamic_df, connection_type = \"s3\", connection_options = {\n\"path\": \"s3:\/\/glueuserdata\"\n}, format = \"csv\", transformation_ctx = \"datasink\")\njob.commit() <\/code><\/pre>\n<p>Creaci\u00f3n de un Job mediante l\u00ednea de comandos:<\/p>\n<pre><code class=\"language-python\">aws glue create-job --name python-job-cli --role Glue_DefaultRole \n--command '{\"Name\" : \"my_python_etl\", \"ScriptLocation\" : \"s3:\/\/SOME_BUCKET\/etl\/my_python_etl.py\"}' <\/code><\/pre>\n<p>Ejecuci\u00f3n de un Job mediante l\u00ednea de comandos:<\/p>\n<pre><code class=\"language-python\">aws glue start-job-run --job-name my_python_etl <\/code><\/pre>\n<p>Adem\u00e1s,&nbsp;<em>AWS<\/em>&nbsp;tiene publicado un&nbsp;<a href=\"https:\/\/github.com\/aws-samples\/aws-glue-samples\">repositorio<\/a>&nbsp;con multitud de ejemplos de ETLs para&nbsp;<em>AWS Glue<\/em>.<\/p>\n<h2>Seguridad<\/h2>\n<p>Como todo servicio de&nbsp;<em>AWS<\/em>, est\u00e1 dise\u00f1ado e implementado para ofrecer la mayor seguridad posible. Estas son algunas de las funcionalidades de seguridad que ofrece&nbsp;<em>AWS GLUE<\/em>:<\/p>\n<ul>\n<li><strong>Cifrado en Reposo<\/strong>: este servicio admite el cifrado de datos (<em>SSE-S3<\/em>&nbsp;o&nbsp;<em>SSE-KMS<\/em>) en reposo para todos los objetos que trabaja (cat\u00e1logo de metadatos, contrase\u00f1a de conexiones, escritura o lectura de los datos de la ETL, \u2026).<\/li>\n<li><strong>Cifrado en Tr\u00e1nsito<\/strong>:&nbsp;<em>AWS<\/em>&nbsp;ofrece cifrado de conexi\u00f3n segura (SSL) para todos los datos en movimiento, las llamadas a la API de&nbsp;<em>AWS Glue<\/em>&nbsp;y a todos los servicios de&nbsp;<em>AWS<\/em>&nbsp;como S3, RDS\u2026<\/li>\n<li><strong>Registro y monitorizaci\u00f3n<\/strong>: est\u00e1 fuertemente integrado con&nbsp;<em>AWS CloudTrail<\/em>&nbsp;y&nbsp;<em>AWS CloudWatch<\/em>.<\/li>\n<li><strong>Seguridad de red<\/strong>: es capaz de habilitar conexiones dentro de una&nbsp;<em>VPC<\/em>&nbsp;privada y trabajar con&nbsp;<em>Security Groups<\/em>.<\/li>\n<\/ul>\n<h2>Precio<\/h2>\n<p>AWS factura por el tiempo de ejecuci\u00f3n de los&nbsp;<em>crawlers<\/em>&nbsp;\/&nbsp;<em>jobs<\/em>&nbsp;de ETLs y por el uso de&nbsp;<em>Data Catalog<\/em>.<\/p>\n<ul>\n<li><strong>Crawlers<\/strong>: se factura s\u00f3lo por el tiempo de ejecuci\u00f3n del&nbsp;<em>crawler<\/em>. El precio es de $0.44 (eu-west-1) por cada hora de DPU (4 vCPUs y 16 GB RAM) facturados en tramos de hora.<\/li>\n<li><strong>Data Catalog<\/strong>: se puede almacenar hasta un mill\u00f3n de objetos de manera gratuita y a partir de ah\u00ed $1.00 (eu-west-1) cada 100.000 objetos. Adem\u00e1s, se factura $1 (eu-west-1) por cada 1.000.000 de peticiones al&nbsp;<em>Data Catalog<\/em>&nbsp;de las cuales el 1er mill\u00f3n es gratuito.<\/li>\n<li><strong>ETL Jobs<\/strong>: se factura s\u00f3lo por el tiempo que el trabajo de ETL demore en ejecutarse. El precio es de $0.44 (eu-west-1) por cada hora de DPU (4 vCPUs y 16 GB RAM) facturados por segundo.<\/li>\n<\/ul>\n<h2>Beneficios<\/h2>\n<p>Pese a ser un servicio joven es bastante maduro y se est\u00e1 usando mucho por clientes del todo el mundo de&nbsp;<em>AWS<\/em>. Las caracter\u00edsticas m\u00e1s importantes que nos aporta son:<\/p>\n<ul>\n<li>Gestiona autom\u00e1ticamente el escalado de recursos, reintentos de tareas y gesti\u00f3n de errores autom\u00e1ticamente.<\/li>\n<li>Es un servicio Serverless,&nbsp;<em>AWS<\/em>&nbsp;maneja el aprovisionamiento y escalado de los recursos para ejecutar los comandos o consultas en el entorno Apache Spark.<\/li>\n<li>Los crawlers son capaces de rastrear tus datos, sugerir esquemas y almacenarlos en un cat\u00e1logo centralizado. Adem\u00e1s, son detectan cambios en los mismos.<\/li>\n<li>El motor ETL de Glue genera autom\u00e1ticamente c\u00f3digo Python \/ Scala y tiene un programador incluyendo dependencias. De este modo, facilita el desarrollo de las ETLs.<\/li>\n<li>Usando el cat\u00e1logo Glue, podemos consultar directamente los datos S3 usando Athena y Redshift Spectrum.<\/li>\n<\/ul>\n<h2>Conclusiones<\/h2>\n<p>Como toda Base de Datos, herramienta o servicio ofrecido,&nbsp;<em>AWS Glue<\/em>&nbsp;tiene ciertas limitaciones que habr\u00eda que tener en cuenta para adoptarlo como servicio de ETLs. Por ello deber\u00edas tener presente que:<\/p>\n<ul>\n<li>Est\u00e1 muy enfocado a trabajar con fuentes de datos en&nbsp;<em>S3<\/em>&nbsp;(CSV, Parquet\u2026) y&nbsp;<em>JDBC<\/em>&nbsp;(MySQL, Oracle\u2026).<\/li>\n<li>La curva de aprendizaje es alta. Si tu equipo viene del mundo de ETL tradicional, tendr\u00e1s que esperar a que gane conocimientos de&nbsp;<em>Apache Spark<\/em>.<\/li>\n<li>Al contrario que otras herramientas de ETLS, carece por defecto de compatibilidad con muchos servicios de terceros.<\/li>\n<li>No es una herramienta de ETLs 100% al uso y, puesto que usa Spark, es necesario realizar optimizaciones en el c\u00f3digo manualmente.<\/li>\n<li>Hasta hace poco (abril 2020),&nbsp;<em>AWS Glue<\/em>&nbsp;no soportaba fuente de datos en streaming. Es demasiado prematuro usar&nbsp;<em>AWS Glue<\/em>&nbsp;como herramienta de ETLS para datos en tiempo real.<\/li>\n<\/ul>\n<h5>\u00bfQuieres saber m\u00e1s de lo que ofrecemos y ver otros casos de \u00e9xito?<\/h5>\n<p><a href=\"\/\" role=\"button\"><br \/>\nDESCUBRE BLUETAB<br \/>\n<\/a><br \/>\nShare on twitter<br \/>\nShare on linkedin<\/p>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/elipajares\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Alvaro-Santos-150x150.jpg\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Alvaro-Santos-150x150.jpg 150w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Alvaro-Santos-300x300.jpg 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Alvaro-Santos-75x75.jpg 75w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Alvaro-Santos.jpg 500w\" sizes=\"(max-width: 150px) 100vw, 150px\"><\/a><\/figure>\n<p>\u00c1lvaro Santos<br \/>\nSenior Cloud Solution Architect<\/p>\n<p>Mi nombre es \u00c1lvaro Santos y ejerzo como Solution Architect desde hace m\u00e1s de 5 a\u00f1os. Estoy certificado en&nbsp;<em>AWS<\/em>,&nbsp;<em>GCP<\/em>,&nbsp;<em>Apache Spark<\/em>&nbsp;y alguna que otras m\u00e1s. Entr\u00e9 a formar parte en Bluetab en octubre de 2018 y desde entonces estoy involucrado en proyectos cloud de Banca y Energ\u00eda y adem\u00e1s participo como Cloud Master Partitioner. Soy un apasionado de las nuevas patrones distribuidos, Big Data, Open-source software y cualquier otra cosa de mundo IT que mole.<\/p>\n<p><b>SOLUCIONES, <\/b>SOMOS EXPERTOS<\/p>\n<p><a href=\"\/soluciones\/data-strategy\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/data-strategy\/\"><\/p>\n<h5>\n\t\t\t\t\t\tDATA STRATEGY<\/h5>\n<p><\/a><a href=\"\/soluciones\/data-strategy\/\">\t\t\t\t\t\t<\/a><br \/>\n<a href=\"\/soluciones\/data-fabric\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/data-fabric\/\"><\/p>\n<h5>\n\t\t\t\t\t\tDATA FABRIC<\/h5>\n<p><\/a><a href=\"\/soluciones\/data-fabric\/\">\t\t\t\t\t\t<\/a><br \/>\n<a href=\"\/soluciones\/augmented-analytics\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/augmented-analytics\/\"><\/p>\n<h5>\n\t\t\t\t\t\tAUGMENTED ANALYTICS<\/h5>\n<p><\/a><a href=\"\/soluciones\/augmented-analytics\/\">\t\t\t\t\t\t<\/a><\/p>\n<p>Te puede interesar<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Conceptos b\u00e1sicos de AWS Glue \u00c1lvaro Santos Senior Cloud Solution Architect\u200b Share on twitter Share on linkedin Desde la&nbsp;Pr\u00e1ctica Cloud&nbsp;queremos impulsar la adopci\u00f3n de la nube como forma de trabajo en el mundo de IT. Para ayudar en esta tarea, vamos a publicar multitud de art\u00edculos de buenas pr\u00e1cticas y casos de uso, otros hablar\u00e1n [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":17831,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7,8,9],"tags":[],"class_list":["post-2489","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-es","category-practices","category-tech"],"acf":[],"jetpack_featured_media_url":"https:\/\/bluetab.net\/wp-content\/uploads\/2023\/04\/6.png","_links":{"self":[{"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/posts\/2489","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/comments?post=2489"}],"version-history":[{"count":0,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/posts\/2489\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/media\/17831"}],"wp:attachment":[{"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/media?parent=2489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/categories?post=2489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/tags?post=2489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}