GuilleSQL :: Microsoft SQL Server, SSIS, y más !!

Azure Data Factory (ADF)


Azure Data Factory (ADF) es el Orquestador nativo de Azure para entornos de Big Data, el equivalente a Oozie y Sqoop de Apache. Se trata de un servicio (PaaS) en modalidad de pago por uso (pay as you go), que permite encapsular Workflows ó Pipelines, las cuales pueden contener cualquier actividad necesaria para copiar y procesar/transformar datos (ej: U-SQL, Azure ML, MapReduce, Spark, Hive, etc.), y también nos permitirá planificar su ejecución desatendida y recurrente con hasta una Cadencia de Ingesta de Datos de 15 minutos (Time Slice ó Activity Window). Podremos redesplegarlos, pausarlos, pararlos, reanudarlos, reprocesarlos, etc.

El presente artículo describe Azure Data Factory (ADF) v1. Actualmente está en Preview ADF v2, que presenta una mejora importante del producto, pero que queda fuera del alcance de este artículo.

Comprendiendo los Pipelines: Activities, Linked Services y Data Sets

Un pipeline encapsula un flujo de datos (WorkFlow) que incluye la copia y transformación de datos de un origen a un destino. Para ello utilizaremos varias cosas:

  • Actividades (Activities), que pueden ser simple copias de un origen a un destino, o transformaciones donde filtrar, agregar, o cambiar la estructura de los datos que estamos moviendo. Además de la copia, tenemos más Actividades disponibles, como Hive, Pig, U-SQL, MapReduce, Azure ML, Spark, Stored Procedure de SQL,etc.
  • Linked Services, para enlazar nuestros Pipelines con los orígenes y destinos (data sink) de datos. Tenemos muchas opciones, aunque no es simétrico, es decir, muchas sólo están disponibles como entrada (ej: SAP HANA, Amazon S3, etc.) y no como salida. Para hacernos una idea, podemos conectarnos a Amazon Redshift, Amazon S3, Azure Blob Storage, Azure Data Lake Store, Azure Cosmos DB, Azure SQL Database, Azure SQL Data Warehouse, Azure Table Storage, Cassandra, DB2, File System, FTP, HDFS, HTTP, MongoDB, MySQL, OData, ODBC, Oracle, PostgreSQL, Salesforce, SAP BW, SAP HANA, SFTP, SQL Server, SyBase, Teradata, etc.
  • DataSets, para definir la estructura de los datos de entrada y salida que estamos procesando (campos y tipos de datos).

Por verlo todo junto en un ejemplo sencillo: Un Linked Service de entrada (ej: Blob Storage de Stagging con ficheros CSV, o quizás un FTP) nos creará un Data Set, sobre el que realizaremos una Actividad (ej: Copia), generando un Data Set de destino, que enviaremos a un Linked Service de salida (ej: Data Lake Store con ficheros TSV ó Azure SQL Database). Ojala todo fuera así de sencillo, en el sentido, de que un Pipeline suele encapsular muchas más Actividades, Data Sets, Linked Services, etc., pero para comprenderlo, es un buen ejemplo.

Una forma gráfica de verlo, es desde la opción de Diagram, que entre otras cosas nos permitirá ver nuestro Data Factory de forma gráfica y explorar sus entradas, salidas, Pipelines, y Actividades. En muchos casos, como primera aproximación, esto será más fácil que visualizar nuestros JSON, aunque si queremos ver realmente que es lo que hacen, tendremos que acercarnos al detalle y ver el contenido de los JSON (la prueba del algodón), el detalle de las consultas U-SQL ó SQL, etc.

Azure Data Factory (ADF) Copy Wizard en Azure Portal

Con Azure Data Factory (ADF) es muy fácil hacer pipelines para cargar datos con el Copy Wizard (Preview), desde multitud de tipos de origen de datos (ej: Amazon Redshift, Amazon S3, Azure Blob Storage, Azure Data Lake Store, Azure Cosmos DB, Azure SQL Database, Azure SQL Data Warehouse, Azure Table Storage, Cassandra, DB2, File System, FTP, HDFS, HTTP, MongoDB, MySQL, OData, ODBC, Oracle, PostgreSQL, Salesforce, SAP BW, SAP HANA, SFTP, SQL Server, SyBase, Teradata, etc.) a diferentes tipos de destino (ej: Azure Blob Storage, Azure Data Lake Store, Azure CosmosDB, Azure SQL Database, Azure SQL Data Warehouse, Azure Table Storage, Azure Search, File System, Oracle, SQL Server, etc.).

Una de las primeras opciones que tenemos que configurar es la Cadencia de ingesta de datos (Time Slice ó Activity Window), que viene a definir cada cuanto tiempo esperamos recibir una nueva entrega de datos para cargar en nuestro Data Lake (la ingesta). También tendremos que definir la Ventana Temporal. Estos dos parámetros están relacionados, y permiten realizar re-procesamiento, por lo que es muy importante prestarles atención. En el siguiente caso de ejemplo, estamos definiendo una cadencia diaria y una ventana con comienzo el 1 de Febrero, por lo que una vez desplegado:

  • Comenzará a cargar todos los ficheros desde el día 1 de Febrero hasta la fecha actual. Si no deseamos este comportamiento, deberemos establecer otro valor de fecha de inicio (start date time).
  • Si para un día no hay fichero, la ejecución del Pipeline para ese Time Slice (Activity Window) se quedará Waiting, de tal modo que si al día siguiente siguiera sin llegar el dato pero llegase el dato del nuevo día, se cargaría dicho fichero y seguiría en Waiting la carga para el día anterior, pendiente de la llegada del fichero correspondiente. Si dicho fichero llegase varios días más tardes, entonces dicha carga progresaría y se cargaría en nuestro sistema. Este es un escenario que tenemos que conocer, ya que implica que se puedan realizar cargas con carácter retrospectivo.

Muy importante, tener presente que si el día de mañana volvemos a desplegar nuestro Data Factory sin cambiar estos valores, volverá a intentar cargar los mismos ficheros que ya se cargaron en el pasado, por lo que deberíamos cambiar la ventana temporal antes del despliegue, y/o diseñar un proceso de carga que no genere duplicados.

Continuamos. Al seleccionar el origen de datos, podemos seleccionar un fichero específico, pero también podemos utilizar ciertas variables para definir la ruta y nombre de fichero a cargar de forma dinámica. Este es un caso típico de uso en entornos de Big Data donde tenemos que realizar ingestas de datos en nuestro Data Lake desde ficheros (ej: un Blob Storage haciendo las funciones de Stagging, donde un tercero sube los ficheros a cargar utilizando una URL haciendo la función de Token SAS). En el siguiente caso de ejemplo hemos elegido utilizar el formato stagging/{year}/{month}/{day}/data.txt, por lo que empezaremos cargando el fichero stagging/2018/02/01/data.txt y sucesivos hasta la fecha actual, conforme a como definimos en la pantalla anterior (Cadencia de Ingesta y Ventana Temporal).

Más adelante tendremos que definir el mapeo de campos entre origen y destino. Aquí encontraremos la opción Repeatability settings, que nos permitirá configurar si deseamos cargar el fichero tal cual, o realizar un borrado previo, con la intención de evitar duplicados (ej: en caso de re-procesamiento, etc).

Antes de finalizar el Copy Wizard encontraremos más opciones, como la gestión de fallos y las opciones de paralelismo.

Finalmente, revisaremos todas las opciones, y si estamos de acuerdo, lo desplegaremos y a empezar a funcionar.

Sinceramente, el Copy Wizard está muy bien, es una herramienta de gran ayuda, aunque hay algunas cosas que podemos necesitar tocar a mano, pero aún en este caso, podemos importarlo en Visual Studio para personalizarlo, o incluso directamente desde el Portal de Azure. Mejor así, que partir de un lienzo en blanco, al menos al principio cuando aún no lo conocemos demasiado y no tenemos otros ejemplos en los que fijarnos o hacer copy-paste.

Creando un Pipeline (u otros elementos) de forma manual en Azure Portal

En muchos casos nos puede ser suficiente utilizando el Copy Wizard (la opción Copy data, actualmente aún en Preview). Sin embargo, este asistente sólo sirve para realizar una copia de datos, es decir, utilizar la Actividad Copy, sin tener acceso a otras Actividades que nos permitan realizar transformaciones más complejas.

Por lo tanto, en otras muchas ocasiones, necesitaremos crear un Pipeline de forma manual, o quizás, modificar o clonar uno existente o crear un nuevo pero utilizando los linked services que ya tengamos. Para estos casos, tenemos la opción Author and deploy. De este modo, no estaremos limitados a la Actividad Copy, sino que podremos utilizar cualquier tipo de Actividad de Data Factory (Hive, Pig, U-SQL, MapReduce, Azure ML, Spark, Stored Procedure de SQL, etc.). Este es el principal motivo de recurrir a la creación manual de un Pipeline.

Al utilizar la opción Author and deploy, tenemos alguna pequeña ayuda gráfica, como los botones New data store, New Pipeline, New Compute, Add activity, etc, que nos crearán un cuerpo de código genérico sobre el cual tendremos que realizar la modificación manual del JSON correspondiente. También es cierto que tendremos la ayuda del IntelliSense, para facilitarnos un poco más la escritura de dicho código JSON. Al principio puede parecer un poco duro (si no lo conocemos bien o si estamos familiarizados a trabajar con GUI), pero la realidad es que modificar manualmente los JSON nos da acceso a todas las posibilidades de Data Factory, y las pequeñas ayudas como el Intellisense y los botones para crear nuevos ítems (ej: pipelines), facilitan bastante esta labor.

Monitorización Básica de Azure Data Factory (ADF) en Azure Portal

A través de la opción Metrics and operations podemos acceder a una información básica. Donde podremos ver más cosas y donde emplearemos más tiempo, es a través de la opción Monitor & Manage (actualmente en Preview), que además de ver una representación gráfica del ADF, podemos ver un log de las ejecuciones de los Pipelines, sus reintentos y resultado de cada uno, etc.

En la siguiente pantalla vemos un ejemplo. En la barra superior podemos filtrar por una ventana temporal. Un detalle importante, es que se refiere al Time Slice (Activity Window) de la ingesta de datos. Es decir, si hoy día 21 de Febrero despliego este Pipeline con una cadencia de ingesta diaria y una ventana temporal que comienza el día 1 de Febrero, en cuanto esté desplegado se intentará cargar el fichero del día 1 de Febrero, el de día 2, día 3, día 4, etc., hasta el día de hoy 21. En la parte inferior (Activity Window) veremos dichos días, pero si revisamos su detalle de ejecución, veremos que se ejecutaron hoy día 21. Ojo con este detalle.

Otro detalle interesante de la pantalla anterior, es que podemos seleccionar un Pipeline y cambiar su estado con los botones de la barra superior: pararlo (stop), pausarlo (pause), o reanudarlo (resume).

En el caso de una ejecución fallida de un Pipeline, podremos seleccionarla para forzar que se realice una nueva ejecución. En la siguiente pantalla, se muestra un Pipeline con ejecuciones diarias y varios fallos debidos a que el fichero de entrada era incorrecto. Una vez solucionado el problema del fichero, seleccionamos la ejecución fallida, y utilizamos la opción Rerun del panel de la derecha (Activity Window Explorer), para ejecutarla de nuevo y cargar dichos datos (también se podría re-procesar un archivo que fue cargado con éxito utilizando la opción Rerun).

Al seleccionar un Time Slice en el Activity Window, podemos ver en el panel de la derecha (Activity Window Explorer) todas sus ejecuciones (en el caso de que hubiese varias, ya sea por reintentos o re-procesamientos manuales). En el caso de las ejecuciones fallidas, podremos ver el detalle del mensaje de error (no te sorprendas al ver un mensaje Java). En el siguiente ejemplo, hay una ejecución fallida de un Slice diario, al haber configurado la entrada de datos con el formato yy para año, en lugar de yyyy, por lo que no se encontró el fichero de entrada. La solución, corregir el formato, y rerun.

Integración con Visual Studio

Azure Data Factory (ADF) se integra actualmente con Visual Studio 2015 (pero no con Visual Studio 2017, al menos, todavía). De este modo, podemos crear un nuevo Proyecto de tipo Azure Data Factory, o también podemos explorar los Data Factory que tenemos ya desplegados en Azure, e importarlos como un nuevo Proyecto de Visual Studio.

Dentro de Visual Studio 2015, salvo el diagrama gráfico de los Pipelines, el resto será prácticamente todo trabajo manual, modificando objetos JSON. Esto lo hace un poco duro al comenzar. En cuanto ya tengamos algo de experiencia, será más fácil, tendremos código de referencia para copiar y pegar, etc., pero de nuevas tiene cierta curva de aprendizaje que tenemos que asumir.

Una vez tengamos todo nuestro código ya finalizado, si lo deseamos podremos desplegarlo directamente desde Visual Studio 2015 a nuestra Subscripción de Azure, y así probarlo.

Despedida y Cierre

Hasta aquí llega el presente artículo, en el que hemos podido tomar un primer contacto relativamente completo, con el servicio Azure Data Factory (ADF) en su primera versión. ADF es el orquestador de Azure para entornos Big Data en formato PaaS y modalidad de pago por uso, una solución fiable y completa, integrada con el resto de productos Big Data de Azure, desde las soluciones más PaaS como Data Lake Store y Data Lake Analytics, hasta otras soluciones más administradas como los Clusters de Hadoop y Spark de Azure HDInsight (Hortonworks).

Poco más por hoy. Como siempre confío que la lectura resulte de interés.

 


[Fecha del Artículo (UTC): 28/02/2018]
[Autor: GuilleSQL]



Escribir un Comentario

Para poder escribir un comentario, debe Iniciar Sesión con un usuario.

Si no dispone de un usuario, puede Registrarse y hacerse miembro.

Si dispone de un usuario, pero no recuerda sus credenciales de acceso, puede Restablecer su Contraseña.

Miembros de
Miembros de GITCA (Global IT Community Association)

Menu de Usuario
  Iniciar Sesión
  Registrarse
  Restablecer Contraseña
  Ventajas de Registrarse

Acerca de
  Contigo desde Oct 2007
  771 usuarios registrados
  86146 pageloads/mes
  Ranking Alexa 498160

Social Networks
Sigue a Portal GuilleSQL en Linkedin !!
Sigue a Portal GuilleSQL en Twitter !!



Archivo

Julio de 2018 (1)
Junio de 2018 (4)
Mayo de 2018 (5)
Abril de 2018 (3)
Marzo de 2018 (2)
Febrero de 2018 (7)
Enero de 2018 (1)
Diciembre de 2017 (15)
Noviembre de 2017 (7)
Junio de 2017 (3)
Mayo de 2017 (1)
Marzo de 2017 (3)
Enero de 2017 (4)
Junio de 2016 (1)
Mayo de 2016 (2)
Abril de 2016 (2)
Septiembre de 2015 (2)
Agosto de 2015 (2)
Junio de 2015 (10)
Mayo de 2015 (4)
Abril de 2015 (8)
Marzo de 2015 (11)
Octubre de 2014 (3)
Septiembre de 2014 (7)
Agosto de 2014 (5)
Julio de 2014 (2)
Mayo de 2014 (4)
Abril de 2014 (4)
Marzo de 2014 (4)
Febrero de 2014 (1)
Enero de 2014 (5)
Diciembre de 2013 (8)
Noviembre de 2013 (2)
Octubre de 2013 (7)
Septiembre de 2013 (6)
Agosto de 2013 (1)
Julio de 2013 (6)
Junio de 2013 (11)
Mayo de 2013 (7)
Abril de 2013 (6)
Febrero de 2013 (5)
Enero de 2013 (7)
Diciembre de 2012 (12)
Noviembre de 2012 (13)
Octubre de 2012 (5)
Septiembre de 2012 (3)
Agosto de 2012 (6)
Julio de 2012 (4)
Junio de 2012 (1)
Mayo de 2012 (2)
Abril de 2012 (7)
Marzo de 2012 (16)
Febrero de 2012 (9)
Enero de 2012 (5)
Diciembre de 2011 (10)
Noviembre de 2011 (10)
Octubre de 2011 (4)
Septiembre de 2011 (5)
Agosto de 2011 (2)
Julio de 2011 (2)
Junio de 2011 (4)
Mayo de 2011 (2)
Abril de 2011 (6)
Marzo de 2011 (4)
Febrero de 2011 (10)
Enero de 2011 (5)
Diciembre de 2010 (6)
Noviembre de 2010 (4)
Octubre de 2010 (8)
Septiembre de 2010 (4)
Agosto de 2010 (1)
Julio de 2010 (3)
Mayo de 2010 (5)
Abril de 2010 (6)
Marzo de 2010 (8)
Febrero de 2010 (3)
Enero de 2010 (1)
Diciembre de 2009 (9)
Noviembre de 2009 (14)
Octubre de 2009 (2)
Septiembre de 2009 (8)
Agosto de 2009 (2)
Julio de 2009 (10)
Junio de 2009 (9)
Mayo de 2009 (10)
Abril de 2009 (9)
Marzo de 2009 (3)
Febrero de 2009 (2)
Enero de 2009 (3)
Noviembre de 2008 (2)
Octubre de 2008 (2)
Septiembre de 2008 (2)
Agosto de 2008 (5)
Julio de 2008 (5)
Junio de 2008 (1)
Mayo de 2008 (3)
Abril de 2008 (2)
Marzo de 2008 (2)
Febrero de 2008 (2)
Enero de 2008 (5)
Noviembre de 2007 (2)
Octubre de 2007 (2)






Esta información se proporciona "como está" sin garantías de ninguna clase, y no otorga ningún derecho.
This information is provided "AS IS" with no warranties, and confers no rights.

Copyright © 2007 GuilleSQL, todos los derechos reservados.
GuilleSQL.com y GuilleSQL.net son también parte de Portal GuilleSQL.

Visitas recibidas (Page Loads) en GuilleSQL (fuente: StatCounter):

screen resolution stats
Visitas