 Bueno, muy buenos días a todos o a la mayoría quizás. Los tiempos son diferentes. Estamos súper contentos de dar este tutorial aquí en UseArt para ustedes sobre escalar dataductos con R y Kubernetes. En lo que va a ser la presentación tenemos los siguientes elementos. Vamos a primero dar una introducción general, si una introducción sobre lo que lo que estamos, lo que proponemos hablar hoy. Después vamos a introducir lo que es R, Docker y Kubernetes, que son dos elementos claros. Y vamos a pasar a un ejercicio con Docker. Después del ejercicio, vamos a tomar una pausa. Creo que para todos levantarnos 15 minutos nos va a ser bien. Y vamos a después hacer los pasos de llevar los contenedores a un clasio. Ahora, el ejercicio con Docker, si lo tenemos pensado como un breakout, no sé si van a llegar los 40, pero con los que estamos, si estamos cuatro aquí para ayudarles. Lo que es llevar los contenedores a un cluster podría ser, pero creo que lo mejor es hacerlo primero, si de forma clasical, de forma que todos estamos mirando y que ustedes los sigan en el computador, vayamos haciendo preguntas. Porque el desplegar los pipelines, si hay que verlo una vez, quizás es más fácil si lo hacemos todos juntos y después un resumen, una discusión y un cierro. Lo que es nuestra ambición de que ustedes se lleven después de este tutorial es primero que todo, que sepan cómo dockerizar un proceso en ER. Si el poder dockerizar es un anglicismo horrible, van a haber otros, pero un proceso en ER les va a abrir la puerta a trabajar de formas que en este momento quizás no tienen a su disposición. Una de ellas es llevarlo a computación distribuida. Ojalá, si van a ver cómo hacerlo, van a tener ejemplos y documentación para repetirlo después. Y esos son los dos objetivos principales. En lo teórico, sería argumentar cuándo usar computación distribuida quizás cuándo no, porque no siempre es una ventaja, no siempre les va a ayudar. Y pensar en cómo descomponer pasos de análisis en los diferentes procesos, o si quieres llamarlo el nombre técnico, los diferentes servicios de los cuales consiste. Esa es el mayor objetivo. Ahora, una cosa que antes llamé prerequisito, pero no es tan feo quizás, esa es la oportunidad para pensar más en BASH. Todo lo que vamos a hacer hoy lo vamos a hacer en la línea de comanda. Entonces, esta podría ser otra excelente oportunidad de, si le tienes poca práctica o algo de temor en la línea de comando, pues dejar de tenerla y aprovechar esto más bien como una excusa para aprender más sobre líneas. En la instalación, en los paquetes que pedimos instalar, esa parte de la, como se llama, hay una parte de Paquinon, por ejemplo, que para Windows no hay instalador, en mucho de lo que ocurre en este, si en esto de computación distribuida, Docker, etcétera, Linux es lo que prevalece. Entonces, muchos escogen de alguna forma, se casen más a esa plataforma, ya sea con una máquina virtual o lo que también es muy fácil, levantar una máquina remota para ahí tener el entorno Linux en que trabaja. Dime Rony. Tal vez aclarar que con esta idea de no tener la línea de comando, si en el proceso de cuando France va explicando las cosas, tienen alguna duda, la pueden poner por el chat y entonces ahí vamos a estar aclarando, sea un concepto, sea un paso, lo que sea, para que no se quede, pues atrasados con lo que va explicando France, nos preguntan por el chat y ahí tratamos de ayudarlos. Muchas gracias Rony. Buenísimo comentario. Lo que acordamos entre nosotros es que si hay alguna pregunta que pueden responder ellos, te pueden sacar a un breakout room o contestarlo para el chat, si es lo suficiente importante para hacerlo general, avísenme, interrúmpanme y lo hacemos para todos, en voz alta. A mí no me importa para nada que me interrumpan durante una charla. Entonces por favor, si hay, si es algo en el chat que empiecen por ahí, pero Rony, Andrea, cualquier cosa y Patrick me avisan después. Bien, con eso vamos a la introducción y quizás dejé, perdón, antes de la introducción pongamos esta, esta primero, lo tengo que recargar para que se camile orden y es introducirnos a nosotros y a ustedes, perdón, que poner otra para arriba sería esta. ¿Cómo ustedes estamos? Mi nombre es France. Conmigo están mis colegas en expancia que se llama Andrea, Patrick y Rony. Si tenemos todos un nivel, como me imagino ustedes, diferente en todo lo que vamos a hablar hoy, entonces preguntan lo que quieran y buscamos cómo ayudarles en contestar la respuesta. Nos encantaría por lo menos un momento saber con quiénes estamos ustedes. Si, si, si hacen un, si abren la cámara un momento en lo posible, hacemos el screenshot para tener los participantes. Sí, David, Alejandra, muchas gracias por por estar ahí. Eva, gracias. Así nos podemos saludar un momento, como lo sería en una tutorial. Ignacio, gracias por saludar. Genial. Ya casi estoy para la foto. Ahí vamos. Muy bien. Uno, dos y tres. Emilio, justo tiempo. Aquí vamos y la voy a pegar aquí. Eso. Ahí estamos todos. Sí. Como les dije antes, es un placer absoluto estar con ustedes aquí. La idea es que lo aprovechen y lo puedan usar en su día a día. Sí, ese es lo mayor. Entonces cualquier pregunta que sea dirigida es el software que vamos a usar. Sí, lo mínimo es R, R estudio. Pedimos que instalen a docker community edition. Pedimos que instalen pack deep el, el, el pack idorm y abrir una cuenta gratis en pack idorm hub. Ahí quiero aclarar de una vez dos cosas. Uno, sí, en, en inglés lo llamo un disclaimer. Nosotros, como expandia somos partner de pack idorm. Pero el enfoque, el enfoque aquí no es para nada comercial. A mí yo les he estado siguiendo desde varios años. Me encantan lo que crearon y todo lo que vamos a hacer aquí se puede hacer con la con la versión de código abierto de pack idorm. El código ejemplo lo tenemos en GitHub en escalar R. Ya lo voy a poner en pantalla cuando lleguemos. Lo quiero poner énfasis en esta parte que todo lo que podemos hacer lo podemos hacer con la versión de código abierto. Cuando nosotros trabajamos con pipelines que son que tenemos que escalar, este es el script que usamos para levantar un cluster de Kubernetes en GCP que después lo bajamos. Y aquí está todo eso es para iniciar. Lo importante es que podemos usar nodos que son free emtable. Podemos hacerlo a un precio menor. Podemos decir el número de nodos 15 y después lo podemos bajar rápidamente. Este script sí está para ustedes también para que lo usen porque ahí es donde está la utilidad de lo que van a ver en más o menos una hora y media. Muy bien. Alguna pregunta hasta ahora. No. Entonces seguimos. El reto que vamos a hacer como como ejemplo en esta si en todo lo que es esta es el tutorial es el siguiente. Lo que queremos hacer es como hacer una una computación de la distancia de cada uno de los segmentos sensales de Costa Rica. Es una cosa costaricense. No hay varios niveles provincia, cantón, municipio, creo y después segmentos en sal que es la la unidad mínima en la que están divididos. Queremos hacer una un cálculo para ver de cada uno de esos segmentos que ven aquí en Polígonos en el mapa hasta las playas. ¿Cuál es la distancia? ¿Cuál sería la playa más más cercana? Sí, es un ejemplo de que queremos estar que vamos a repetir algo que no es tan difícil de calcular, pero sí cuesta tiempo si lo hacemos muchas veces. Entonces en algún momento lo que queremos hacer es agilizar el proceso. Entonces el primer paso es dividir los 82 cantones que tenemos en 235 segmentos sensales. El segundo paso es asociar esos segmentos sensales con la playa más cercana y el tercer paso es calcular la distancia entre los segmentos sensales y la playa más cercana. Eso todavía perfectamente se puede hacer sobre un computador, pero se pueden imaginar que hay más retos que requieren ese tipo de que son por cada paso relativamente fáciles de entender pero si ya son muchos mil, dos mil, un millón de cálculos de repente podemos entrar en una situación donde el computador que tenemos disponible ya no da y a veces ni siquiera incrementar el computador a algo mucho más grande nos da suficiente campo de juego para poder llevar la acción. En este caso si hacemos un zoom-in aquí esta parte en Costa Rica se llama punta arena si hacemos el zoom-in ahí queda más claro qué es lo que estamos calculando si para cada segmento sensal identificamos la playa más cercana funciona pero toma mucho tiempo cuando hay muchas playas. Típicamente si un proceso en R lo que lo que haces es correr sobre un solo sobre un solo threat sobre un solo proceso. Entonces cuando tenemos eso tenemos un máximo de un solo proceso dependemos completamente de la velocidad del del procesador y tenemos un máximo teórico de un máximo teórico de lo que es la la memoria a usar de 888. El primer paso que nosotros tenemos tomamos y nos imaginamos ustedes también es que vamos a buscar a correrlo en paralelo. Tenemos excelentes paquetes como Future de Henry Baxter tenemos el Bingstone perdón tenemos fur con Future que funciona súper bien para paralelizar procesos y ahí tenemos como máximo pues una si en teoría podemos comprar un computador AMD con 128 cores pero tan asesibles no son es relativamente costoso en teoría tenemos un máximo de RAM entre los 128 y un terabyte pero otra vez si tienes un laptop tendrías que comprar otra computadora nueva o buscar acceso a uno de estos factible pero no no es lo idóneo. El otro paso o la otra posibilidad y eso es lo que vamos a ver hoy es que vamos a correr múltiples procesos en múltiples contenedores entonces paralelizar con fur por ejemplo genial funciona pero lo paralelizamos para alguna cantidad de cores de de máquinas que que vamos a unir y con eso el el máximo de procesos que vamos a poder correr es prácticamente ilimitado siempre hay límites pero prácticamente ilimitado y puede ser muchísimo más barato porque más barato porque si fuéramos a comprar y esto yo busqué algo con muchos scores y saqué este screenshot no sé si sería el mejor pero una máquina con sí con 128 gigabytes de RAM y cuántos procesadores tiene 128 CPU puede costar 18 mil dólares ahora eso dicen 28 o esos 118 mil dólares si lo miramos cómo lo podemos gastar en amazon si IBM cloud google cloud de repente nos da nos da algo muy interesante y es que está el fenómeno de preemptable machines así se llaman con google y está el fenómeno de spot price en aws para aprovechar esto si donde tenemos donde podemos alquilar máquinas al 70 80 por ciento de descuento funciona muy bien nosotros lo hemos hecho si entonces levantamos un contenedor con el proceso que estamos trabajando o our studio server en la nube alquilamos una máquina locamente grande sabemos que puede el máximo que puede durar son 24 horas pero a veces realmente dura 30 minutos y ellos se toman el derecho de apagarla en cualquier momento y a veces lo apagan en cualquier momento sí creo que nuestro equipo el que más sufrió de esto es patrick que de repente le tocan tres veces seguidas que en 20 minutos se apaga la cosa eso no deja trabajar pero si usas un cluster entonces ahora tienes la maquinaria para que cuando un nodo se cae no importa o puedes levantar otro nodo incluirlo al cluster o haces el cluster tan grande que si se caen si se caen 5 dentro del tiempo que tú estás procesando no importa porque en vez de 4 para algo tan grande no importa si haces si dos máquinas grande o 32 máquinas grandes en la forma en que se calculan los precios en estas infraestructuras es es igual si es completamente linear entonces la decisión no está tanto en bueno cuánto necesito pero cuánto necesito para optimizar lo que es el proceso que estamos que estamos haciendo y ahí de repente por lo que vale ese servidor puedes tener 19 mil horas de máquinas preemptable que lo calculea 2.2 años a tiempo completo 24 7 y eso es eso es muchísimo si es otra forma de manejar presupuesto que puedes funcionar muchísimo mejor claro si vamos a hacer eso necesitamos saber cómo distribuir trabajo entonces la forma en que a mí me gusta pensar en cómo distribuir trabajo es la siguiente tenemos un sí tenemos un montón de datos o paquetes de datos en la en lo que vamos a en cómo hablamos ahorita el término que vamos a usar es datum es la nuestra mala pronunciación de datum pero yo no soy capaz de decir datum ya nosotros aquí decimos datum no encontramos nada en español que funciona mejor eso puede ser puede ser un dato pero generalmente son grupitos de datos puede ser agrupado en hasta con un zip o un tar gz son paquetitos de trabajo que vamos a ofrecer a los procesos que vienen después porque con esos datos queremos hacer algo y el resultado de ese algo es eso son otros paquetitos de datos si de todos estos pueden salir dos dos paquetes de datos más dos datos más y esos los queremos incorporar en el siguiente proceso entonces con eso vamos a hacer algo más lo interesante es que cuando tenemos procesos sin cataductos donde vamos de paso uno paso dos paso tres la necesidad de cómputo para cada uno de esos pasos no algunos pasos los podemos por ejemplo paralelizar fácilmente como el ejemplo que les acabo de mostrar si la primera parte del cómputo de la distancia a la playa lo dividimos en en grupitos de si de datos sobre zonas sensales o quizás una zona sensal por cada proceso en paralelo y prum se ejecutan todos a la vez en inglés el término es que tiene que ser embarrassingly parallel si tiene que ser paralelo cuando corres uno y corres el otro no importa después puedes unir los resultados sin tener que sin tener que pensarlo mucho más pero eso no va a aplicar para todos los pasos que vamos a tener en algunos pasos vamos a hacer algo que queremos hacer en una instancia más grande que los demás y porque ocupa más memoria generalmente o porque necesitamos tener todos juntos por ejemplo para unir todos los resultados del cálculo a un solo archivo que después vamos a bajar con el cual vamos a trabajar y poder decidir cuál de si poder decidir a cuál cuál paso en la tarea de asignó cuánta memoria ayuda ayuda un montón hasta aquí hay alguna pregunta o duda que quieran hacer seguimos entonces y vamos a hablar de docker y cubanita ahora el en la etimología cubanitas tiene la misma raíz que cibernética si es helmsman que es eso es es el que tiene la la en un buque la la la helm el el y no lo traducía antes la con que das la vuelta no es un timón o si es un timón entonces el que tiene el timón del buque el que está aman no es la única forma no es la única solución si desde el dos mil nueve primero tuvimos mesos después tuvimos adupiar y después tuvimos open shift el primero que estaba enfocado en orquestar contenedores y después siguieron más hoy en día en dos mil catorce comenzaron con cubanitas y ese hoy en día está tomando como el rol de ser el sistema por defecto para organizar este fenómeno donde tenemos un proceso o una unidad de computación y lo queremos llevar a un entorno de despliegue si queremos hacer eso hablar del entorno del despliegue es un poco rápido primero tenemos que hablar de ese proceso o unidad de computación porque la mayoría de nosotros estamos muy acostumbrados a correr un script en r esperar tanto tiempo como dure y después ver el resultado pero existe la posibilidad de crear un contenedor si donde entran datos salen datos y ese contenedor una vez que lo tienes es algo que puedes desplegar ya completamente libre agnóstico al lenguaje que lo has escrito al entorno versiones todo lo demás es una versión de algo con una entrada y una salida y esa entrada y salida es lo que después hay que coordinar sobre el tu entorno de despliegue esa coordinación para eso puedes usar herramientas inclusive en our studio workbench si los si tienes la creo que solamente en la versión pro pero los jobs que puedes armar en la versión pro los puedes mandar a tu instancia de cubanitas y lo que estás haciendo y eso es lo que r studio workbench hace por ti levanta un contenedor que despliega a cubanitas hace el cálculo y cuando está finalizado te da los resultados para hacer lo que nosotros queremos hacer entonces crear datos de diferentes pasos ya sea en un paso de preprocesamiento de datos ya sea en el cálculo si el entrenamiento de modelos donde quizás queremos hacer tunen queremos correr 10 100 modelos en procesos de entrenamiento a la vez tenemos herramientas como cubflow que si se conecta con cubanitas ml flow que viene de data bricks tienen su su opinión ahí también y tenemos paquider nosotros en este en esta demo nos vamos a enfocar en esta por varias razones cubflow está muy enfocado en tener una ui ml flow es muy paitonero se pueden hacer otras cosas pero la gestión es bastante paitonera y paquidorm en en mi opinión y yo logre convencer a otros en equipo pero en mi opinión es más agnóstico el lenguaje que usas y nos ha servido muy bien para escalar procesos en él entonces lo que podemos hacer con paquidorm es no tener que configurar nosotros mismos lo que está pasando sobre cubanitas porque esa configuración si es si es pesado si es hay que escribir todo es posible pero la la forma en que hay que escribir los los archivos de configuración van en muchísimo detalle entonces las herramientas que dibujé aquí arriba en el pechito lo que hacen es simplificar un poco la vida del que está trabajando con con la ejecución de procesos también funcionan con archivos de configuración pero son más son más requieren menos trabajo configurar y están enfocadas en llevar procesos a cubanitas escalarlos de la forma necesaria para cada uno mucho en paralelo un poco más grande muy grande si poco es en paralelo pero más grande todo eso se puede configurar y lo más a ver lo que lo que para mí es lo más lo más lo más chévere es que puedes dejar en manos de la plataforma de tu clase cuando se escala entonces esto se reaccionan a como si a nuevos datos por ejemplo vamos a hablar de eso más allá donde estamos ahora lo que necesitamos entender es es cómo construir este contenedor para que entre y salgue algo y a eso los queremos invitar a ustedes para que lo vayamos lo vayamos a hacer juntos lo vamos a hacer de la de la mano y tenemos una un ejemplo preparado para que lo puedan seguir donde tenemos un proceso una unidad de computación y lo vamos a llevar al contenedor lo que pensamos que puede ser nuevo para ustedes es que el contenedor no corre para el contenedor se conecta con datos que no están en el contenedor entonces corres algo para para generar un resultado yo lo voy a mostrar en pantalla y después nos dividimos en en breakout rooms para que lo podamos así para que lo podamos hacer entre todos el código de esto está en en si entonces tenemos el se llama paso dockerizado lo pueden bajar ahora o ahorita yo voy a mostrar cómo funciona para que lo veamos en detalle después qué es lo que hace y tomamos un montón de datos sobre marmotas y hacemos un un simple conteo de eso mismo si el código es es simple es para que se agilice el proceso de de cálculo y lo que te va a devolver en tu propia máquina es el conteo de de todas las marmodas que tenemos en el ejemplo que tienen tienen voy a cerrar ese primero café en ella casen en el ejemplo que tienen vamos a poner este aquí tienen varios archivos tienen el archivo de conteo marmota de marmotas el docker fae las marmotas se sirve un paso y todo esto lo pueden abrir en el resumen yo aquí puse los datos de marmotas los puse en una carpeta parte para que ahorita más tarde podamos mirar aquí a ver qué es lo que pasa con con con esta carpeta cuando vamos a iniciar el el proceso y si miro y si miro que haya adentro en términos de código lo siguiente entonces tenemos el proceso en r que queremos escalar como dije va a ser en este caso relativamente simple pero esto puede ser cualquier código que ustedes tengan entonces necesita leer datos y lo va a leer en una carpeta que se llama script marmotas se sirve como ven esa carpeta no existe aquí es una carpeta que vamos a definir en el en el paso que viene después va a correr el proceso en este caso va a ser un conteo por su género entonces va a leer los datos que leímos aquí datos marmotas y la la especie perdón y la especie correspondiente y aquí hacemos el conteo renombra columnas y nos escribe los el ccv a esa misma carpeta script conteo marmotas ccv ese conteo es el resultado si en lo que presentamos antes es nuestro datum para llevar esto a para llevar esto a una aún a un contenedor lo que necesitamos es un docker ahora sobre docker se pueden seguir cursos tutoriales todo lo demás la esencia es que creamos una una imagen creamos algo que contiene todo lo que se necesita para correr esta si este paso y desde esa imagen los podemos instanciar podemos decir run en el momento que decimos run instancia aunque no contenedor y empieza a correr si lo decimos otra vez con quizás como otro nombre el contenedor entonces lo instancia otra vez otra vez y otra vez entonces con un con solamente este código y con solamente este docker final estamos listos para instanciar ese proceso entre uno a mil veces o las veces que queramos pueden ser más esa es la parte donde necesitamos cubanitos para desplegar ya vamos a volver ahí ahora es el enfoque en crear ese contenido hay un proyecto que se llama rocker que mantiene un montón de imágenes con con r en sus en diferentes versiones este lo tomamos como base cuando hacemos esto en docker lo que jalamos no es solamente r 4.1 pero jalamos dependencias jalamos toda la capa del os en este caso dirian y todo lo que necesitamos para tener una mini máquina virtual con el mínimo de r que tenemos ahí el presente hacemos un update es por costumbre pero no es necesario y copiamos el conteo marmotas si el proceso que queremos en r el proceso la la acción que queremos este contenedor tome lo copiamos a ese contenedor noten que no estamos copiando datos porque si copiaríamos datos entonces fijamos este contenedor para hacer el proceso solamente con esos datos que tiene nada más lo queremos más bien dejar abierto a que los datos vengan después si necesitamos un lugar para poder decir mira aquí van a entrar y van a salir los datos que tenemos entonces el make their script es este mismo script que tenemos aquí lo insanciamos pero está está vacío no tiene nada todavía y aquí al final decimos bueno cuando el contenedor arranca el momento que haces docker run el proceso que quieres que inicia es este conteo marmotas.her hasta aquí todos bien entonces hagamos la clave para ahora ahora hacer eso está en el y yo también tengo que mirar rápidamente para no inventarme cosas durante talleres que siempre es mala idea entonces aquí abajo en el ejemplo da un paso de cómo hacer el docker run y lo voy a lo voy a lo voy a copiar para después editarlo aquí en mi consola. El primer paso es que necesitamos hacer un build si es el docker build entonces decimos bueno en mi caso necesito decir sudo porque estoy en linux si estás en windows no las necesitas hacer pico build y le doy un nombre le doy un tag y lo llamo paso docker y salvo y este punto indica que que busque lo que necesita para hacer ese build aquí donde estoy ahora y donde estoy ahora es en mi working directory de github de que se llama paso docker y salvo y digo entero claro claro ok ahí va lo hace muy rápido porque yo ya lo había hecho una vez antes cuando ustedes lo hacen quizás empieza a descargar esa primera imagen pero lo que tenemos ahora es es un contenedor que se llama docker paso docker y salvo ahora lo que necesito hacer es decir sí docker sudo docker run sin duda pongo el remove por por hábito porque si cuando se apaga entonces lo quita de memoria también mantiene mi sistema un poco más de un nombre y ese nombre es el que le acabamos de dar y se llama paso lo que perdón es el nombre que le vamos a dar pasos docker y salvo y ahora necesitamos hacer la conexión de contenedor que vamos a correr con este con esta esta carpeta donde tenemos información sobre las marmotas esa carpeta está en mi desktop podría estar en cualquier lado pero en mi caso está en mi desktop lo que voy a darle es la instrucción sigión v de del folio voy a conectar un folio voy a decir bueno mira en mi desktop perdón si en desktop como tengo marmota quiero que de estos marmotas en el computador perdón en el contenedor lo veas lo percibas como si fuera la carpeta script y si hago esto perdón siempre falta claro paso lo que he realizado es el contenedor que necesito correr me faltó una inserción si hago esto mira me dio respuesta me dio el conteo de marmotas en mi en mi computador y aquí están esto es lo que queremos que ustedes vayan ahora en en en grupitos para ensayarlo por su propio lado por la simple razón de que si lo si lo ves en pantalla alguien acelbemos siempre funciona mejor que en tu computador local entonces somos somos 20 personas dividámonos a ver cómo hago lo tengo que hacer yo breakout rooms y 4 breakout rooms que es lo más fácil si voy a decir let participants choose room ustedes por favor escojan donde haya menos personas no para que nos vayamos dividiendo y así dentro del room hacemos este ejercicio como ustedes les parecen debería decir alguien tiene una objeción pero aquí aquí vamos si entonces los los rooms están andrea si tú tomas número uno rony si tú no más tomas número dos patrick si tú tomas número tres yo voy a tomar número 4 si y los participantes por favor dividan se al en en los diferentes segundes steffy no puedes ir a un room si entonces a ver déjame ver si steffy si te puedo asignar yo yo voy a asignar steffy es la solución 20 18 dividido por 3 1 2 3 4 5 y franza mí me puso en el uno y ahí ya está andrea ya ya ya me salió siempre para unir voy al 3 que me dijo ahí está patrick ya entonces voy al 2 y yo están en el grupo 3 francés está en mi por cualquier cosa muchas gracias por avisar marien lo que dije fue en un minuto están los demás con nosotros parece que en 40 segundos ya casi vamos a estar listo muy bien entonces mientras van entrando los demás ya casi estamos súper falta no creo que estamos todos porque son 20 21 22 si estamos otra vez muy bien vamos un poquito adelantados en el tiempo con el tutorial quisiera aprovechar para hacer una una si discusión general de lo que vimos ahora de los diferentes grupos no sé andrea ron y patrick hay preguntas que que sobraron que quedaron para la reunión general no en el uno ok en el 3 franza alguien tenía la pregunta de si podemos conectar un volumen directamente a un bucket en ycp o en amazon es muy buena pregunta en este ejercicio no sé no sé tocaría mirar la documentación no sé si se puede si no se puede claro es que mover en un bucket puede haber muchísima información si porque la alternativa sería llevarlo a un volumen llevarlo a un disco donde donde funciona pero desde un bucket yo nunca he hecho este ejercicio no sé van a ver ahorita que en sobrecuvernitos en el placer tenemos para poder usar los datos tenemos que copiarlos primero a un disco desde desde un storage para que por ejemplo antes de poder usarlos con un put y eso me me da a pensar de que no es posible pero pero no sé habría que ver alguna otra en tu grupo patrick y tampoco algunos atraezan el camino pero pero no preguntas muy bien entonces abro el foro para cualquier otra pregunta si abran el micrófono y interactuamos en mi grupo había muchas preguntas muy buenas una que creo que vale la pena repetir aquí es la de si quiero si quiero definir sobre el tamaño sobre el cual quiero correr el proceso que tengo lo defino en el docker file o lo definen en otra parte y esa pregunta es clave porque es lo que estamos haciendo es justo para que podamos definirlo en otra parte lo que creaste en tu imagen lo puedes llevar lo puedes llevar a una máquina virtual si común y corriente del tamaño que tú quieras en el momento de si en el momento que lo quieras correr sobre una sola máquina ahí lo que tendrías que definir es a cuál volumen donde va a tener acceso a los los datos pero eso es sí es muy similar a lo que hicimos aquí con ese guión uve y te da un mundo de posibilidad si de repente puedes crear todo el proceso mandarlo a calcular en otro lado y después recibir el resultado lo que ayuda sobre todo cuando tienes problemas de memoria y muchos de nosotros estamos trabajando en laptops o computadores que tienen que 16 72 gigas pero cosas como random force a veces si puede usar muchísima memoria entonces el poder decir bueno si por tres horas abro una máquina de 128 gigas y después la vuelvo a cerrar agiliza agiliza esas cosas montan alguna otra pregunta no entonces lo que propongo hacer es que adelantemos a ver que donde estamos si que adelantemos un poco lo que es el es muy temprano para café entonces vamos a seguir hasta aquí y después muy bien este paso de crear dogfiles con tu con tus procesos es clave y el segundo paso es decir bueno lo voy a llevar a algo en paralelo o algo en una instancia más grande una cosa que nosotros hemos visto en la práctica es que hay cosas que son fáciles de paralelizar en r y hay cosas que no son tan fáciles de paralelizar en r por ejemplo porque depende de un paquete que lo hace de cierta forma o no otro todo lo que es per si con map y la extensión de paralelizar con fur ayuda un montón y te permite que crear código que después va a usar todos los cores que usas en cualquier en los spots que vas creando en la si sobre la sobre la infraestructura de cubanito y eso te permite jugar con con cómo optimizar lo que estás si lo que estás mandando a lo que estás mandando a computar si hacemos esto solamente en cubanitos si la la es posible generalmente vamos a escribir en buckets por eso el proceso de escribir un bucket y después de volverlo a un volumen es algo que hecho la creo que hay problemas con la conexión directa a menos de hecho que lo hagas en el mismo código r eso sí podría ser pero ya entramos en detalle demasiado específicos lo que queríamos estar aquí es que el tener tus datos tus paquetitos de datos e externalizarlo a muchas maquinitas y después si guardarlos y extenderizarlo a los siguientes pasos en muchas maquinitas se puede a mano yo nunca lo he hecho porque la configuración ahí si es si toma tiempo por eso buscamos algo debajo para ayudar y lo que lo que hacemos con paqueter es que debajo vas a tener una o encima no no no sé dónde está si pero encima de cubanitos una capa que hace un par de cosas uno es que te permite dar el paso de externalizar a muchos más maquinitas en en la definición de pipelines que va a ser mucho más mucho más claro que otra configuración que estarías haciendo sigue siendo que escribes una configuración pero muchísimo menos de lo que sería en el puro cubanitos la otra es ellos integraron algo que llaman data version entonces si tienes esto levantado en producción lo que vas a poder ver es cada uno de tus datos y tus conjuntos de datos tiene un lugar si es como si tuviera un cajón donde donde está uno donde está el otro donde están los demás y en cada cajón tienes versiones del estado cuando último corrió tu data octo entonces en el paso de aquí aquí no solamente tengo los nuevos datos tengo una nueva versión de los datos si lo hago una segunda vez la clave es que cuando tengo un dato nuevo automáticamente va a correr para crear una versión nueva de los datos una versión nueva de los datos finales si puedo incluir algo en lo que es ese primer repositorio y esa acción hace que lo demás empiece a caminar para hacer el cálculo otra vez y eso es lo que lo que ayuda los que mencioné antes no que un flow que un flow ml flow hacen eso también es parte de lo que de lo que ayudan a hacer lo que hasta donde ese no hacen o no hacen de la misma forma es versionar los datos que puede tener venta si vamos a hacer esto en en el total si vamos a regresar ahora al ejemplo que tenemos de trabajar sobre la cartografía sobre el mapa de Costa Rica con los diferentes segmentos sensales el primer paso es llevar el proceso a un contenedor docker y ese contenedor docker va a ir a un container registry no lo hicimos ahora con ustedes porque requiere a un lugar un poco más de configuración por en toda la documentación sobre docker que que van a leer es el paso docker push y ese push eso de enviar tu imagen en un lugar donde lo puedan compartir si puede ser docker hub es por defecto puede ser en en gcp en aws lo que buscan esas infraestructuras es algo que se llama el container registry nosotros tenemos eso preparado para la para la presentación de hoy donde por ejemplo aquí en el google cloud platform déjame enviarla si tenemos un container registry hay un montón de imágenes en especial tenemos el si la imagen de que vamos a usar ahorita después vamos a conectar con un cluster vamos a llevar nuestros archivos aún a uno de los repositores iniciales en paciderm y vamos a crear los datos si para seguir estos pasos otra vez vamos aquí también la clave está en poder conectar con los datos entonces en paciderm esa conexión con datos tiene un nombre que tiene que ser genérico porque si lo fuera a llamar repotala ahorita le vamos a dar nombres pero en mi código r no le puedo dar un nombre como script porque todo eso se lo queremos delegar más bien a paciderm este nombre de aquí es el nombre repositorio y va a ser va a ser dado si por defecto es el nombre del pipeline anterior o es un repo que hemos creado a mano el que siempre queda igual es el auto por qué porque este auto va a ser el nombre del pipeline que hemos creado para para este paso en particular entonces va a ser el si el nombre que se da cuando cuando lo lo implementamos entonces antes de correrlo quiero pasar con ustedes por los si por lo que van a encontrar en en github que es el ejemplo este ejemplo lo encuentran se llama escalar r esas lo puedo hacer hasta un poquito más grande donde tenemos las las diferentes los diferentes pasos y unos pasos se llaman pipeline entonces el pipeline distancias que acaban de ver que había un repo que se llama distancias cuando lo definimos decimos bueno el pipeline tiene un nombre tiene una descripción si no es el mejor para abrir primero vamos a hacer primero el de el de separar el pipeline tiene una descripción y dice bueno tiene un input y este pfs es paciderm file system es el mismo pfs al que hicimos referencia ahorita en el script va a entrar en un repositorio donde vamos a encontrar la información y en este caso lo que voy a jalar es jalar todos entonces voy a si lo llaman un globo es como el la acción de tomar toda la información que tenemos presenta después definimos la transformación pero miren lo interesante la transformación se define como una imagen dentro de esa imagen nosotros tenemos varios scripts tenemos uno decide uno que separa r van a verlo aquí si entonces tenemos uno que se llama separa el mismo nombre separa shape r aquí está separa shape r pero también tenemos unir segmentos playa r visualizaciones lo que hicimos fue usar un solo docker file para meter más de una acción de transformación pues voy a mostrar entonces este docker file va a tomar un poco más en en correr y levantarse porque tiene varias si varios paquetes entre ellos paquetes que se demoran encargar creo que estamos como a una hora una hora y media antes de que esto levanta entonces tenemos from rocker igual que usamos ahorita pero no la versión 4.1 pero 4.00 con el run instalamos las dependencias a nivel os con el run instalamos las dependencias de los paquetes r que vamos a instalar después e instalamos todos paquetes r en la imagen mira que copiamos las tres diferentes pasos de transformación y no decimos el sí con qué tiene que arrancar cuando arranca el el contenedor a diferencia de lo que hicimos ahora con cuál de esos tres arrancar es algo que dejamos para después cuando decimos bueno corre el contenedor aquí en el pipeline separa corre el contenedor y has r script separa shape en el de distancia decimos mira corre el contenedor y corre r script distancias punto es un truco que pueden usar en cualquier situación pero ahí está la otra es que podemos definir lo dejamos muy simple pero definir el paralelismo entonces en este caso vamos a abrir cuatro contenedores para cada una de las secciones que vamos a tomar porque cuatro porque para hacer esto vamos a usar el cómo se llama el el entorno de paquete mal yo ya estoy adentro si quieren ahorita si pueden pueden conectarse para seguir este ejemplo lo que puedo hacer aquí es crear un pequeño workspace que me lo dan por cuatro horas llamémoslo si el lovely lovely mermoth para quedar en el tema y lo creamos muy rápido es similar o es idéntico a los pasos que hicimos ahorita para si para crear el si la infraestructura si la creas a man cuando estás aquí puedes conectar perdón y estos pasos para conectar son pasos que podemos literalmente copiar y pegar donde está mi vamos a otro ejemplo podemos copiar y pegar entonces aquí voy a hacer un clear y digo ok copi y hacer un login copi y el password es el que me da aquí abajo one-time password y lo puedo puedo incluir puedo validar que todo está bien perdón diciendo pack the version perdón pax y tía control que hago mal eso es lo que hago mal bien el ejemplo que vamos a iniciar ahora después del café lo vamos a hacer completamente la línea de comando por qué porque la versión si a open source es la que la que funciona completamente la línea de comando cuando están si están jugando con esto y quieren algo de visualización para ver qué es lo que está pasando aquí está el dashboard que ayuda a entender lo que está pasando pero como es de la parte comercial aquí nos la usamos es extra si es bueno tenerla ahí presente en en esta parte que dan para para jugar pero para serles franco a mí me prefiero creo que patrick está en esto conmigo yo hasta prefiero hacer la línea en comando porque es más claro entonces para no adelantarme demasiado más en lo que va a ser la ejecución de la demo hay más más preguntas antes de que entremos a una breve pausa si la parte que has hecho nos ha como registro en el paquí del tenemos que crear unas una instancia o que no entra muy bien claro mira cuando yo hago cuando yo entro aquí es que cuando entro digamos una nueva no me estás nuevo cuando llegas aquí te da la opción de dice arranca gratis y siguen en google o quito sí sí sí entra y tengo un creado en un workspace aquí perfecto el siguiente paso es conectarte vale que es o sea una vez lo creas le damos un nombre en la descripción y ya me dice como conectarme vale vale exacto vale y eso es lo de menos porque cualquiera dan dan nombres de animales de cualquiera lo puedes tomar lo que requiere david y quizás es bueno validarlo es que pax y tiel este entonces instalado en tu computador si eso estaba en la previa lo lo probé bueno si creo que sí lo he hecho si lo he probado si lo he instalado en un club y vale y a ver entonces el modelo negocio estos del paquí del te venden lo que hemos hablado de las pipelines y supongo que también debajo de las máquinas virtuales no el hierro digamos para correcto es correcto y la forma en que ellos lo lo hacen es que lo hacen por hora no te cobran por el hierro dicen por el hierro ahí no tienen pero solamente de cobran por lo que lo que si por su licencia lo que ellos hacen y te da esta facilidad de levantar cosas mucho más rápido más fácil levantarlo por aparte recuerda ese primer script es hasta bueno quizás que regresemos a un momento porque lo que te da lo que te lo que cuando levantas cualquiera de estos mira los componentes claves es que tú definas cuáles máquinas vas a usar la máquina que te dan ahí por defecto es una máquina creo que es nn uno no recuerdo cómo se llaman pero es una máquina con cuatro cpu y 16 gigas de memoria se te lo dan por defecto cuando lo levantas por tu propia cuenta mira aquí todo esto es de configuración todo de aquí arriba para abajo plasené en bachet etcétera y todo esto es de configuración el bachet es donde están los datos para conectarte para jalarlo a lo que sería el primer repositor y todavía los tienes que hacer una acción de copia de llevarlos a un volumen es así no no hasta donde yo se no hay que ir cuando vamos después vamos a crear el clúster y en en gcp cuando quieres crear un clúster cubanitis eso te lo da en google cloud platform o iws o ibm si todas estas de infraestructura te lo dan como un servicio entonces aquí lo que estás creando es un clúster cubanitis ellos lo hacen por ti lo único que quieren que quieren que tú tú hagas es perdón es que definas cómo lo quieres configurar en este caso porque este es un ejemplo que yo literalmente hice copy paste y una de nuestros proyectos entonces para nosotros lo que es de gran interés es que usemos esas máquinas preemptable si esas máquinas que son muy baratas tomamos 15 porque si se nos cae en 5 todavía sigue el proceso si esa es la razón por tomar y si no se caen pues más rápido vamos a llegar al final claro para que para que funcionan necesitas creo que son un mínimo de dos máquinas que no son virtuales y eso es parte del paseo pero hay dos máquinas que tienen que ser fijas porque si no se cae tu controlador se cae tu el que está manejando el dimán hacemos en qtl hacemos esa esa configuración que acabamos de hacer con el copy paste tenemos que hacer un binding de administrador en lo que es el cliente lo que es mi computador y lo que es el clase remoto y eso es lo que acabas de hacer es que qtl para mi local empieza a ser el que controla lo que es el pakiderm en el servidor y una vez que yo establecido eso bueno ahí puedo puedo hacer el si puedo hacer el deploy puedo arrancar con trabajar como podemos trabajar ahora y ese sería el paso donde validamos bueno estamos conectados de la misma forma o alguna otra pregunta si yo tengo una pregunta bueno algo pequeño me oyes si perfectamente solo una cosa cuando he hecho en la en la command line pak ctl loggin a one time password verbal he puesto el password como se puede comprobar si estoy bien conectada o no hace falta pues eso sí pues lo tengo vale y esto quiere decir que estoy conectada a las sesiones vale ok ahora porque a ver es un poco abstracto yo paxi de pak control o pak ctl lo estás corriendo local pero el pak divan es el que está en el servidor entonces cuando estás desconectado vas a ver que solamente vas a ver pak ctl en este caso es los dos y con eso sabemos estamos conectados vale me lo dieron ok gracias con gusto alguien más no entonces por favor puedes ponerlo en el chat por favor este con mucho gusto a ver gracias donde está pero a ver no perdón no hice mi copy paste bien es esto es pero lisa toma en cuenta que hay una hay una hay un r markdown en el proyecto tiene que tiene todos estos pasos desde llevar la imagen ejecutar para que hasta más de lo que nosotros estamos haciendo para que después lo puedan repetir repetir todos los pasos que vamos a hacer están en un instructivo allá gracias a patrick que lo escribió a mucho detalle perfecto gracias si súper bueno entonces ahora sí hablamos de café hola hola a cleman gracias por abrir la pantalla si estamos será que tal el aperitivo bueno me espera un poco más yo lo pensé y dije no no puedo con la segunda mitad de un taller súper vamos a continuar vamos un poco avanzados en lo que es el tiempo entonces nos da tiempo para para hacer esto paso a paso lo que vamos a construir es el siguiente pipeline vamos a crear un repositorio donde tenemos los datos de los shapes si los que son de con los cuales iniciamos los 72 vamos a crear un pipeline que se para esos shapes y va a resultar en un repositorio perdón un repositorio que se llama separa shape vamos a copiar de ese repositorio uno con playas porque ya me adelanté hay un momento que hacemos un cross donde para cada elemento de separa shape hacemos una combinación con playas rds si esas esas posibilidades para hacerlo y ahorita lo muestro en la configuración es lo que hace valioso usar algo como como packaging para no tener que inventar nosotros como hacer después de ese cross vamos a abrir el pipeline distancias con que da datos en distancias unir segmentos y al final vamos a bajar segmentos playa rds para para ver el sila del final para verla como se llama el resultado entonces regreso a mi línea de comando y aquí voy a hacer también que voy a hacer se puede ir a lo voy a usar ahorita y les será claro por qué yo cuando trabajo por eso es una cuestión de gustos a mí me gusta trabajar con algo que se llama el pat control shell y eso es porque pat control o pat ctl se me traba la lengua después de un de largo rato y hasta en mi mente ya no lo puedo decir y lo que tenemos aquí además es que tenemos autocomplete entonces podemos decir vv y version y nos imprime la versión pero la otra es y así está la documentación decir pat ctl y el comando y funciona absolutamente igual como ven aquí abajo el primer paso que vamos a tomar es crear este repo el repo shapes entonces lo lo hacemos de la siguiente forma decimos create si repo y se va a llamar shapes espi ahora si hago list de repo voy a tener shapes espi en mi mente para mí así lo digo muchos en cursos de introducción r cuando yo trabajo en r es como si estoy hablando con datos cuando estoy trabajando en en pakiderm es como si estoy hablando con un cluster si estoy dando instrucciones y de esta forma interactiva a mí me funciona muy bien lo que necesitamos tener aquí ahora son datos y esos datos los tenemos preparados ya en un bucket que preparamos antes de la de la de la como se llama de la demo es el mismo bucket o no es el mismo pero al igual configuramos un bucket de inicio recuerdan en la configuración que vimos antes del café hay un bucket en gcp que de donde podemos poner los datos de entrada en este caso vamos a hacer un put que dice insert data into pakiderm y el el archivo que necesitamos para eso put file shapes espi y ahora detrás de cada repo cuando trabajamos con un repo necesitamos incluir la rama en la cual estamos recuerden en una de las de las de las ventajas de usar pakiderm es que está muy enfocado en versiones de datos entonces puedes crear ramas con datos puedes si puedes regresar a una versión casi como si fuera git la interfaz es muy similar no es git pero usaron un una una interfaz que es muy similar a git enfocado en versiones de datos en nuestro caso lo vamos a hacer con master y vamos a poner ahí los archivos que están aquí entonces en el bucket de gcp si nunca han visto esto esto es google storage si y por detrás está los deftus de google que nos permiten tomar esta acción tienen todo un nombre único entonces nuestro se llama demo espacial shapes está abierto a todo el mundo entonces ustedes lo deberían poder leer también y ejecutamos la acción bien se demora un poquito pero ahí está y si ahora decimos les de repo miren la diferencia tenemos shapes aquí con cero bytes y ahora lo tenemos con 34 megabytes y o 35 si a ver de dónde o bien con esto tenemos esta parte los shapes espi están listos y vamos ahora a ir al siguiente paso donde vamos a crear un pipeline el primer pipeline es el de separar datos entonces en creo que lo tengo aquí se para jason este pipeline lo que hace es que va a tomar va a mirar si se va a conectar no sé cuál la palabra quizás conectar es la mejor con los datos que están en repo shapes esp y los va a mirar absolutamente todos y los va a ingerir todos para hacer la transformación que tenemos definido en separa shape para ver qué tenemos en separa shape que lo tenía abierto lo voy a abrir ahora entonces es separado me está separa shape r este es el código que va a correr en el en el contenedor va a abrir todos estos paquetes ya están instalados mira que está el indir es shapes esp shapes y puedo validar que es en efecto ese ese que tengo cuando digo list de file tenemos shapes esp master y si le digo bueno que hay hay ya está autocompletando a shapes me va a decir bueno tengo shapes es un beer y si digo el contenido de shapes mira están los segmentos la información de el out there como hablamos del antes del café se llama pfs out por defecto así se llama porque va a tomar el nombre de la de la de la del pipeline y todo esto una vez que estoy aquí a nivel del pipeline ya no me tengo que preocupar del código bueno solamente si no está correcto pero este es el código que va a correr todas las veces necesarias para crear los shapes que pedimos aquí vamos voy a decir es un clear y voy a decir a crear pipeline desde un archivo file si es el pipeline pipeline separa junto a eso me da un error entonces mira lo que dice dice please specify attack for the doctor image in your in transform image spec for example change python to python 3 or batch to batch 5 lo dejé ahí para tenerlo como ejemplo y poder mostrarles donde donde es que estamos perdón donde estamos trabajando con que es pelea de retón vamos donde estás aquí estás entonces en google cloud les mostré antes que este es el el como se llama el docker file con quien estaba con quien estaba trabajando perdón es la imagen del del contenedor con quien estaba trabajando entonces me dice mira especifica tu versión y le podemos poner cualquier cosa y vamos a ponerle yo que se usa a 2021 y digo safe entonces ahora que lo cambia user veinte veintiuno tengo que cambiar aquí en el pipeline tengo que decir image y está user veinte veintiuno separa si y si lo vuelvo a correr no me lo va a correr porque si ya existe si entonces eso es uno lo tenemos que remover primero para removerlo necesitamos donde está entonces decimos list pipeline y dice mira estos son los pipers que tienes ok vamos a decir remove delete pipeline sería separa shape uno si ahora digo list pipeline se fue ay no no se fue porque tiene sola razón ahora sí se fue gracias patrick voy a recrearlo para ver si se fue la si se fue el warning a great pipeline separa uno y ahí lo crea de una vez la razón que te que te recomiendan esto es para que tengas control de exactamente cuál pipeline están corriendo según autores y usar siempre leites por defecto es menos es menos preciso bueno perfecto ahí vamos y vieron también que si hago list list pipeline entonces me muesta no solamente donde está pero me dice también está running si y si está running significa que estoy escribiendo datos algún lado entonces si hago list repo mira tengo segundo repo que ahora se llama separa shape es el output repo for pipeline separa shape puedo ver en más detalle cómo corrió exactamente más si estamos para nosotros que estamos usando estamos acostumbrados a escribir en r el cuando hay algún error queremos ver exactamente qué ejecutó entonces si digo esto si pido los no perdón si te pido los logs logs del pipeline del pipeline separa shape mira que me da el output como si fuera me da el output exactamente como corrió entonces yo aquí puedo ver el cómo se llama el list en r tal como fue el resultado al final este es el output al final si eso ayuda un montón puedo hacer más si no puedo ver los los jobs que están corriendo list job en este caso me da un número y lo puedo inspeccionar si digo inspect the job y pido este número copi hay perdón copi y si es el job id correcto es inspect no list perdón entonces inspect lo que me dice es lo que lo que ejecutó ahorita lo vamos a hacer en más detalle pero mira la ejecución fue menos de un segundo fue rapidísimo casi instantáneo el tiempo de pre de perdón el download el tiempo de procesamiento fue 10 segundos y tenemos donde está en ese momento en este momento terminó de una vez y me da el el job tal como lo definí para el siguiente paso esto va a tener va a tener más más pies pero vamos a preparar primero el siguiente el siguiente yo entonces aquí vamos vamos a decir crea el pipeline dale por favor en qué bueno en qué directores estabas cuando se ha ejecutado el paso no quiero decir porque como se han oído las imágenes mágicamente de agradezco porque no lo mencioné entonces si salgo de aquí mira yo estoy en la la la carpeta de trabajo de escalar entonces todos los pipelines están aquí en la raíz de donde estoy trabajando si y cuando digo pax y tiel sí por eso usó el shell no no lo logra escribir cuando digo pax y tiel shell él queda y dice context lovely marmot porque ese es el contexto del del clas de remoto y recuerdas que lo llamé si sí sí sí exacto me había conectado pero claro no funciona lo que imaginaba que no estaba en la carpeta de cuadras claro pero ahí estoy y eso lo respeta entonces por eso y solamente por eso yo puedo hacer lo siguiente por es lo mismo que en r cuando quiero limpiar hago control l si me limpo de la pantalla entonces ahora aquí puedo puedo dar el siguiente paso voy a crear el un repositorio que se llama playas en nuestra en nuestra imagen es esta si estamos creando esta que se llama playas para después correr el de distancias que recuerdan tiene un cross es es un poquito más complicado entonces ahora vamos a hacer create repo playas y si hago list de playas perdón list de repo aquí está con 0 bytes necesita datos ahora aquí viene un pequeño truco yo esta mañana traté yo sé que patrigo ha intentado de varios hemos intentado que es copiar de un repo al otro yo no sé por qué no me funciona pero no nos funciona entonces vamos a bajar el el dato que queremos y volver a ponerlo en este repo cuál es el que queremos les voy a mostrar list file en separa shape master si tenemos un archivo que se llama perdón que está en la carpeta playas que se llama playas ardeas aquí está playas ardeas es lo queremos para poder hacer la unión entre playas y segmentos sensores sensales si porque es la distancia que queremos que queremos calcular primero la vamos a bajar y david ojo que la vamos a bajar al reposital al al la carpeta local donde estamos ahora y decimos lo siguiente decimos get the file y vamos al mismo si al mismo camino que acabo de hacer separa shape está en master shape segmentos playa y hay uno que se llama playas ardeas y lo vamos a el output lo vamos a guardar en playas con ardeas y me lo jala y ahí está y ahora hago un put desde local porque no necesitas arrancar con un repositorio en en google storage es cómodo pero puede ser de datos locales ahora el put va a ser completamente local voy a decir put file playas donde lo quiero tener playas a master perdón en el perro no sé qué está viendo playas master file si eso siempre significa que estoy mirando local file playas ardeas me lo auto completa y ahí estamos si ahora hago el mismo list que hice antes list file separa no pero no es el mismo list porque ahora puedo hacer un list file playas perdón master y ahí está si mi playas ardeas si lo veo así es si por dicha es se ve súper simple al principio nos esta parte es quizás la que más nos costó en cómo llevar archivos de un lado para el otro pero espero que a ustedes no les cueste esfuerzo malo lo que vamos a hacer ahora es el pipeline que más tiempo se demora y ese pipeline es el de cálculo de distancia mira que ahí en el en el input lo que estamos definiendo en es un cross estamos haciendo un cruce de dos repositorios de entrada el poder hacer eso obviamente te abre otro mundo de posibilidades porque aquí dice mira en el packaging file system donde dice shape segmentos hay un repo que dice separa shape en el packaging file system si en donde dice playas perdón el glob es vamos a leer todo lo que está en shape segmentos estallita todo lo que está ahí lo vamos a leer en el repo playas vamos a leer todo lo que está en el repo playas que en este caso es un solo documento entonces en el transform si donde tenemos ahora distancias r que no lo tengo abierto lo voy a abrir ahora distante porque no lo veo porque estoy en una demo aquí está entonces en el distancias r en tengo tres tres entradas tengo uno que se llama indir si el de entrada tengo no que se llama playas there y tengo el output there que corresponde a lo que acaban de ver siempre con el prefijo pfs de de play de packaging file system entonces llevemos ese a a calcular aquí estamos entonces vamos a decir create pipeline decimos el archivo local pipeline distancias punto json se el mismo a ver si todavía lo coge los pipeline no le hice la misma corrección pero si está corriendo está arrancando este pipeline se va a demorar un poco más entonces si hago lo mismo con los list list jobs list job entonces ahora tengo dos jobs y uno está corriendo puedo hacer el inspect job que hice antes inspect job con el job id y este es el nuevo copy perdón está autocomplentando entonces es más fácil 4 6 0 y veo que está running que todavía está corriendo para esto abrir el que está la ventanita del otro lado porque aquí ahora lo que voy a decir es voy a decir watch que es estándar en linux no sé cómo bien como va a ser en otro lado pero decimos botch para que paxitiel inspect job y ponemos el job id que acaba de copiar un pequeño truco por qué porque ahora cada dos segundos me va a decir ok cuánto he procesado esos son los cuatro cores que está usando no está en un q ahí que este comenzó hace un segundo cuatro segundos 10 segundos y así va sucesivamente si tienes 200 cores ves los 200 me dice bueno cual pipeline estoy corriendo cuando arrancó cuál es el estado y es running y me dice cuántos he procesado ya vamos por 29 y se va subiendo de poco en poco también da una indicación de cuáles han fallado cuáles han sido skips y cuál pase de alto por alguna razón para primero que tengamos la información después podamos buscar el error y me dice mira este es el total de los que estamos de los que estamos usando y así la información de lo que pasa de lo demás este es la ventanita que entonces miramos con con con loca pasión cafe en mano aperitivos no por menos yo no hasta que termina el proceso si vamos por la un poco más de la mitad y tenemos que esperar entonces si en este punto hay alguna alguna pregunta me avisa hola francis yo tengo una duda me escuchas perfectamente sí el el cross lo que hace es calcular la distancia a la playa pero para cada uno de los elementos de la lista que corrimos en el primer script verdad entonces el segundo script como está en r o sea nada más entra un data frame o entra la lista completa o como cuál es la diferencia y patrick tú lo estuviste quieres usarlo para responder si no vamos para arriba en el script que el cross lo que hace es como tengo acceso a dos repes historias y compara playas alíes con cada uno de los shapes segmentos entonces aquí yo tengo acceso tanto a shapes segmentos como a hacer para ese pará y algo por playas entonces como en este caso sólo hay un archivo en playas el esto siempre va a tomar ese archivo y lo va a comparar con cada uno de los archivos que están en el otro repo entonces no sé si me entender o si entonces si te puede añadir un poco a eso patrick el ender mira donde lo estamos usando entonces aquí en segmento da una lista de los de los segmentos por aparte después el playas de es aquí son la la la el si la cantidad de playas entonces para cada segmento aquí está vamos a usar el este nurse feature con las playas el hecho de que podemos incluir dos porque aquí el el haberla lo lo lo lo bonito es que si esto fueran todas las playas de latinoamérica poder tenerlos en dos repositorios aparte quizás cada uno con su propia fuente es lo que nos permite hacer combinaciones y usarlo de esta forma en nuestro código el código después sigue normal si y el hecho de que hago la comparación una contra la otra está en la línea 25 que es sí sin taxis de nurse feature que sonan si no me equivoco patrick una función de sf te contesto la pregunta emilia si si si si o sea esto este código correría igual en mi computadora nada más tardaría más no esa es la idea esa es la idea del ejemplo exactamente pero significa que en tu en tu computador necesitarías estas dos carpetas que existen si con los datos correspondientes claro claro no es exactamente igual porque en la línea 16 que hacemos el list files si lo hacemos local él le va a listar todos las ideas que hay en la carpeta en el paso como estamos separando cada uno de esos files en datos diferentes siempre va a tener solo un arquivo disponible para leer entonces en partidón este siempre a ver un solo aquí si lo hacemos local este list files va a listar todos entonces esa es como la diferencia por eso es que definimos el parámetro glock en el pipeline para decir que tomen cada uno de esos archivos al diez como datos separados entonces cada proceso que corra va a tomar solo una diez porque es un solo se me explico ya ya ya ya si ya ya entendí un poco mejor si muchas gracias entonces para correrlo local tendrías que hacer un loop si for each hacer para cada uno de y correr ese pedacito super si vamos a nuestro proceso mira ya tenemos 82 hay uno que dice recovered si entonces en algún momento si corrió pero lo lo corregió puede haber que hagan fail y eso es lo que hay que ver en un proyecto que hicimos con muchos datos el de los 15 no es que que vieron antes de donde sacamos ese pedacito el fallo si al principio fallábamos un montón porque algunos algunos combinaciones de datum requería una una cantidad de memoria exerbitante entonces fallaban porque no tenían suficiente memoria eso es algo en los pasos cuando cuando estén trabajando en esto descomponer el proceso al nivel de que puede correr con lo que tienen infraestructura disponible en los nodos es gran parte del del esfuerzo del paseo si bien entonces dado que esto está terminado podemos ahora ver dar el siguiente paso porque mira en el este ripo perdón tengo que decirlo bien en el este ripo tenemos ahora también las distancias si y en las distancias tenemos múltiples documentos todavía que ahora necesitamos unir entonces ahora vamos al último paso que es unir ya ve y ya vieron es que hay pero hay pipeline archivo local pipeline 1 punto eso este va muy rápido les y tenemos ahí unos segmentos todavía está corriendo parece starting está recién arrancando es pipeline y ahora tenemos datos perdón si para shapes unirse menos y 34 mega como gran paso final es bajar estos datos pero antes de hacer eso si como les dije el trabajar así en la línea de comando es es útil es es cómodo la la parte que da la lo que es la la interfaz y lo muestro porque a veces donde estás aquí estás la parte que da la interfaz es que te muestra todo esto en una forma gráfica entonces cuando carga te muestra el si te muestra el proceso tal como lo hemos sido corriendo cada uno de los de las bolitas en no son bolitas perdón en los pentágonos son repos de reclusitorios que tienen en este caso el primero tiene ocho ocho files que tiene shapes y ahí están los shapes si estos son los archivos que contiene cada flechita verde es un pipeline que tiene un estado que puede correr y ese pipeline está asociado con otro con otro repo donde donde puedes si quieres ir a mirar aquí están los shapes segmentos entonces los 82 que creamos lo que hago aquí con click es lo mismo que estábamos haciendo dando las listas si list file cual era la primera separa separa shape master shape segmentos y es esa misma lista que acabamos de ver en la interfaz entonces para terminar vamos a sacar ahora de la del dataducto el cómo se llama el el resultado entonces eso sería que el file de unos segmentos no es el fue el último otra vez de master es donde estamos y hay uno que se llama segmentos playas y tenemos que dar un nombre si del del output perdón del output y decimos cuando ponen datos segmentos segmentos playas y me lo va a bajar si bueno ahí va ya esa la velocidad de cómo baja depende de de tu conexión y lo que podemos hacer ahora en en r porque eso íbamos es el files perdona visualizaciones es el último aquí estamos este es el que acabamos de bajar segmentos playas a 10 y si corremos los demás lo demás vamos a tener el resultado que buscamos con la función perdón en algún momento reinicía algo ok y voy para abajo otra vez y son un montón de playas pero ya casi vamos a tenerlo y voila entonces para la siguiente vez que que vengan tienen con qué decidir para dónde ir la buena noticia es que es difícil encontrar un lugar en costa rica que no es de cerca la playa esta forma de trabajar donde nosotros creamos un pipeline que levantamos en un clase temporal para bajar el resultado y seguir trabajando localmente si es una que nosotros usamos claramente la la alternativa si está la si está el presupuesto y todo lo demás de dejar este clase corriendo en en dado caso si tiene tiene tiene lugar pero no es estrictamente necesario entonces nosotros con esto hemos corrido clusters enormes y vale si 20 20 dólares la hora mucho menos creo que la de 15 no será como 15 dólares la hora porque todo es preemptable y es muy divertido quizás eso es un poco un poco poco ñoño pero la la la idea de que tienes 15 máquinas trabajando para ti a mí hasta el día de hoy como que me da algo de alegría entonces está eso está eso también muy bien preguntas hasta aquí ok fuimos un poquito más rápido dando esta demo de lo que de lo que pensábamos nos va a sobrar un poquito de tiempo las que estamos perfectamente dispuestas a usar para lo que lo que fuese en preguntas porque porque vamos a llegar a la parte parte final primero la la computación ya la vimos si los pasos y el resultado esto ya lo mencioné pero quizás puedes relacionar esto que lo estamos haciendo si si como hablar con el cluster y la complejidad que es parte de lo que queríamos mostrar es mínimo entonces al igual que r y los paquetes r ayudan mucho en abstraer muchísima complejidad de lo que está debajo a través de funciones todo lo demás tenemos algo similar en paquiderm para para la interacción que hacemos con esos datos y procesos que están corriendo arriba el resumen lo que tenía en mente es el siguiente poder pasar un proceso de cómputo a un contenedor docker si lo que lo que nosotros hemos visto es que te abre un mundo de posibilidades para despliegue y ejecutar desplegar la cubanitis es solamente uno si podrías quizás si te sientes más cómodo está abled a iws ics no como es elástica container la ssm fue pero hay otros lugares donde con con facilidad puedes despliegar contenedores de cualquier tamaño como es parte de hacer hacer análisis reproducible el pequeño truco porque solamente un pequeño truco pero hay que verlo una vez de hacer un contenedor que hace algo no que tiene una entrada que tiene una salida eso se lo puedes pasar también a cualquier colega y le va a correr el proceso exactamente como tú lo diseñaste es otra ventaja orquestar un dataducto completo con diferentes partes sobre cubanitis te te ofrece eso de capacidad de cómputo ilimitada y lo que esperamos haber mostrado es que no es no es difícil es más si quieren usar el tiempo para ahora hacerlo otra vez en breakout rooms con muchísimo gusto eso fue la idea inicial quizás eso es algo que después del último punto lo voy a lo vamos a hacer abrindo los breakout rooms es lo hacemos igual porque en el resumen como último el spot pricing si el fenómeno de preemptable machines te permite volar si te permite con muy bajo costo levantar máquinas enormes cerrarlas otra vez al finalizar ojo con azur es lo que vimos esta semana pero en los demás el el el cierre y ver qué está funcionando es es bastante claro vamos y debía haber hecho eso de una vez vamos a hacer esto mismo en grupitos voy a buscar el el breakout rooms aquí está y voy a armar los mismos breakout rooms que teníamos antes para hacer el ejercicio entre todos muy bien faltan algunos por entrar rita estamos a tiempo yo sé que vienes con la escoba pero vamos a salir del salón absolutamente a tiempo si esperemos un poco más para la gente que está un entrando no ya estamos 12 no me faltan a me faltas a la 3 ahí están genial qué dicha que hicimos este ejercicio si salió unas preguntas muy buenas en mi grupo otra vez algo para llevar a la discusión general en rea ron y patrick muy bien entonces antes de dar un cierre cierre algo de siguientes pasos si les gustó hacer esto si jugar con con cómo llegar un proceso como como paralelizar etcétera lo que yo he sentido es una muy buena escuela es trabajar con docker compos docker compos si históricamente va un poco antes de bueno es salieron el mismo año más o menos pero cobernities le ganó a docker compos es un poco más simple pero la estructura de los llamos la forma en que en que llevas cosas a despliegue se parece un montón a lo que pasa en cobernities entonces si entiendes esos ejemplos te va a ser mucho más fácil o por lo menos para mí fue mucho más fácil entonces entender lo que está pasando en el otro lado swarm es algo que muy fácil uno a mano puede crear clusters necesitas un fin de semana un poco de tiempo con con descansado para para jugar pero es un buen punto de comienzo lo otro que para siguientes pasos es que cobernities tiene algo paradójico que es muy fácil y brato levantarlo sin un cluster temporal que es el uso que nosotros en expandia más le damos no es para computar algo rápido y entonces después seguir es complejo y costoso si lo quieres y un cluster que tiene que funcionar indefinidamente el costo obviamente porque necesitas por lo menos tres no es y para que te sume algo más y entra otra complejidad de mantenimiento y como como alojar servicios para que de ahí ayudo un montón si eso es lo que vas a usar pero pero si esa es la experiencia que hemos que hemos tenido creo que sí es tiempo para cualquier pregunta que quedó si no hay yo tengo una si en los los minutos que nos quedan qué les pareció y qué nos pueden dar de feedback para mejorar este taller para una siguiente vez si quieren hasta paro de grabar si les hace más cómodo