1:04:11
2024-10-09 10:47:18
1:29:40
2024-10-09 12:28:28
25:55
2024-10-10 09:26:29
2:38:45
2024-10-10 09:59:31
46:32
2024-10-10 15:02:46
Visit the Big Data course recordings page
United Arab Emirates - Big Data Hadoop Analyst Training
WEBVTT--> Perfecto, listo. Ok y nos falta definir entonces este archivo, este hfc output. Recuerda que --> un put que era que tenía un archivo en un sistema, en este caso en el sistema hos y lo mandé a --> hadut. En este caso le voy a decir ahora, oye lo que tú estás convirtiendo, déjalo en hadut, --> en el output. Dele doble clic por favor a ese output y dígale que vamos a usar una conexión --> existente. En el nombre del archivo váyase y escoja producción y le agrega el prefijo --> curado al final para que sea más sencillo la configuración curado y colóquenle, sí curado, --> .csv, aquí está, .csv, producción y le coloca el sufijo, le coloca el sufijo, perdón, --> con the score curado es sufijo, no prefiero, quedaría como producción, voy a mostrar aquí --> cómo quedaría el nombre de salida, quedaría inputs producción, vean aquí me quedó mal, --> con the score curado, le coloco un punto ahí demás, --> bueno creo que, perdón, todavía falta una configuración en el thdfs output, asegura que --> el separador no lo cambie porque por defecto está con punto y coma, colóquenle coma y dígale --> que incluya el header, incluir header, bueno creo que ahora sí no tenemos ya más configuraciones, --> vamos a darle mejor sobre escribir porque si lo ejecutamos dos veces este job no sale error, --> entonces sí vamos al thdfs output y vamos a darle sobre escribir y bueno voy a proceder a --> ejecutarlo a ver si tenemos algún problema, bueno aquí me dice ok, guardamos elementos, --> bueno aquí tenemos un problemita que se puede estar agarrando, --> si tengo poca memoria, listo ya empezó la ejecución en el caso mío, --> bueno en el caso mío listo, se ejecutó y me mostró el log, este que está aquí, --> que es un log de tipo trace y debería estar este archivito acá también en el --> explorador de archivos, en la carpeta tech, va a estar entonces en esta carpeta, aquí está --> los logs y ahí está entonces mi archivo de log diciéndole que primero se conectó, --> inició la lectura y archivo curado de forma correcta, si todo está bien debería ver ese --> archivo en explorador de en el browser, ahí está producción curado, veamos a ver quién tiene --> problemas, Eva tienes problemas, no sé que está viendo el código, vamos a ver muéstame el --> run, la ejecución, ahí hay la pestaña de run job, la que tienes al lado de component, --> ahí es el que no salió, listo, file no puede invocar, listo sigue va a ver, al final sigue hasta --> el final, si está mal, hdf, oc, output y snoo, dale doble clic ahora si, dale doble clic para ver si --> el problema es que no creaste la conexión, dale doble clic a la configuración del output, --> listo, si notas usaste conexión existente pero no en el component list no sesionaste la conexión, --> entonces ahí sería a efecto, ahora vuelve a ejecutar nuevamente, perfecto, listo, --> voy a intentar ejecutar nuevamente para ver cómo me queda el log, ejecutar nuevamente, --> aquí pues estaría la misma salida y el archivo se sobreescribe, --> perfecto, noto que tienes un error Martín, vamos a ver qué error te salió, --> dice error debido, muéstrame el run nuevamente, muéstrame el run y dice lo siguiente, --> run time, ya existe, ok, vete a tu file output delimite, por favor dale doble clic, doble clic --> y vete en advanced settings, en ese mismo, en el lado izquierdo exactamente, advanced settings, --> voy a ver si amplio memoria ahora más tarde porque reducimos al, --> espera que cargue un momentico que está previamente lento, raro, espera un momento, --> que fue que se logó, mientras voy a revisar la memoria de mi máquina un momento Martín, --> a ver CMD, voy a ejecutar aquí en CMD, --> dale doble clic nuevamente al componente para que vea si de pronto ya coge, estás, --> memoria 73%, --> voy a conectarme de forma interactiva a tu máquina Martín un momento, --> memoria, no hay mucho problema, voy a hacer al ingeniero entonces, --> vamos a cerrar aquí y vamos a abrir nuevamente este job, --> vamos a darle aquí doble clic, --> no, pero ese componente parece que estuviese como vacío, --> no, vamos a borrarlo un momento al ingeniero también, vamos a borrarlo aquí, --> como si no subiese a agregar el código de forma correcta, --> lo voy a eliminar un momento y voy a agregar nuevamente un test file, --> conectamos este señor acá y tu carpeta es temporal, sí, tengo temporal, --> vamos a ver, --> log.txt y aquí puede haber una opción, bueno aquí le digo incluir header, --> que añada y advance settings, no, no está por defecto, no sé, --> ese componente tuyo está como raro, es decir, cuando le agregaste parece que --> no hubiese agregado el código del componente raro, --> listo, esperemos un momento a ver si ejecuta de forma correcta, listo, --> aquí hay algo extrañamente raro, es que el teguar, este job te lo, --> vea lo siguiente, este job, no sé, aquí hubo un error, --> que está ejecutando este teguar por cada línea que está llegando aquí, --> vamos a ver qué pasó aquí, --> vamos a ver a eso, que tienes aquí, no, al eso, porque en ese caso él permitió, --> mira lo siguiente, él permitió que conectaras un main acá, al conectar este main de aquí --> a acá, que fue donde la pregunta, la pregunta que me están haciendo también alguien del componente --> y por qué no main, en este caso al conectar el main de aquí a acá, cada fila que está escribiendo --> va a generar un log, entonces aquí vamos a eliminar este señor de aquí y vamos a --> contar, manda un mensaje, listo, voy a ejecutar aquí, sí, porque si no al main por cada línea --> me va a ejecutar el señor ese, fíjate que ahora sí, listo, perfecto, dese cuenta que él no está --> mostrando fila por fila porque él está en macreduce y trata de actualizar la interfaz --> para que se vea gráficamente qué es lo que estoy haciendo, bueno, ahí tenemos eso, debería tener --> tu archivo de temporal, y este Jog lo que buscaba era lo siguiente, y cerré sin querer mi --> invitata, lo que buscaba pues es agregar el componente t igual que lo habíamos dicho, --> pero cómo hacíamos para gestionar esos logs, que esos logs me van a mandar si --> hay algún error o si he hecho alguna trazabilidad con el t igual que fue el caso que hice, --> entonces vamos con el siguiente ejemplo, dígame, --> ok, --> ok, pero bueno, pero te ejecuto bien ahora, --> ah bueno, perfecto, ahí no sé qué pudo haber pasado, ahí en realidad contó algo que faltaba --> por actualizar quizás, bueno, vamos entonces a hacer el siguiente ahora, sí, --> ah, listo, bien, subescribiendo, hay dos formas, listo, vamos a ver un momento, --> en el momento que me cargue aquí, lo cerré sin querer, como el log lo estoy mandando a este --> archivo que es el tfile output, voy a darle doble clic aquí, y aquí yo cogí la opción --> añadir, si esto lo quito, él sobreescribe, como lo dejé, entonces le va añadiendo, --> pero como es log, tengo que añadirlo, porque van a haber muchas ejecuciones ahí, listo, --> perfecto, vamos entonces, esta es una limpieza ahí para entender que todo lo que está después --> del input hacia allá, entonces va a generar un script para ejecutarlo con más produce, --> vamos a hacer entonces ahora clic derecho, aquí otro job, si son tan amables, --> voy a hacer lo siguiente, job --> calcular, vamos a llamarlo job calcular, --> producción por estado y temporada, --> calcula producción por estado y temporada, cierto, el día de ayer me hicieron dos preguntas, --> la primera pregunta era con relación, qué pasaría si yo tengo un job de un tercero y --> no hay una relación de orden de cuál se ejecuta primero, es decir, no está un --> subyoke ok o un component ok, o en su efecto un error pues, ahí pues, ahí sería prueba y error, --> es decir, ejecutar el job y ver para ver qué se ejecuta primero, después segundo, no hay forma, --> la documentación no se refiere a cómo haría en ese caso, de ahí a lo que me hizo la --> pregunta, que me parece interesante, es adoptar buenas prácticas de tal forma en que cuando --> tenga su job le defina un orden, de tal forma que un tercero, cuando lo lea ya sepa de dónde --> empieza, qué sigue y dónde termina, la otra pregunta que me hicieron fue con respecto a --> si podía cambiar los permisos de archivo desde acá, desde un job, cuando migraba, --> cuando ponía un archivo allá en Hadut, no, no podría, ahí lo máximo es que tú tienes eso en --> el clúster de Hadut y en el caso particular como lo tengo en Linus, lo que haría es que se --> define la política de a nivel de grupo y a nivel de archivo cuando se adiciona ese usuario --> en ese elemento, es decir, en pocas palabras, lo hago a nivel del sistema operativo donde --> clúster y no lo podía hacer desde talent, no hay forma en que te hagas, depende directamente de --> cómo tengas configurado tu clúster ahí arriba. Si, hay un, puedes hacer aquí dos cosas, --> si no estoy mal, este señor no sé si lo tiene, pero aquí tienes un TSCH y te conectas --> a terminal, por ejemplo, y ahí le mandas el componente y hay otro componente, --> este por SH y hay otro componente que se llama T, no, espérame y me acuerdo el componente, --> que lo que hace es que me ejecuta un script, pero el script lo ejecuta directamente sobre la --> máquina en que esté, donde tenga el job, por ejemplo, pero déjame ir, recuerdo ahora, --> pero sé que podía con SH conectarme y mandarle el comando, si estoy remoto, si estoy local, --> hay otro componente ahí que me permite ejecutar un script, ahora me acuerdo bien y te lo busco --> bien y ahora se me olvidó. Listo, vamos entonces aquí a crear job, vamos aquí, --> era, ¿cómo se llamaba? Job Calcular, Producción, --> por, muchas gracias, por estado y temporada. Le vamos a dar aquí Finish, --> en este no me voy a poner tan formal, agregando el T-Preyoy y el T-Warp, simplemente lo que --> quería mostrar con esto es que ya sabe cómo puede hacer trazabilidad a nivel de log, ok? --> Vamos en este señor y lo que voy a hacer es lo siguiente, voy a agregar aquí un componente --> de tipo thsinput, es más, no me complico la vida y lo voy a copiar de acá, este, --> porque voy a usar el mismo archivo, copiar y lo voy a pegar en el nuevo, pegar aquí. --> Acto seguido, voy a agregar entonces el señor, voy a hacer una función de grupo, --> esta función de grupo ya no utilizaría el SELECT, bueno, principalmente porque no estoy --> en una base de datos, no tengo el lenguaje de consulta SELECT, pero por ejemplo el caso --> del señor Spark, partiendo de que ya tú has tenido, mucha gente sabe del señor de SQL, --> entonces como te mostré en esta diapositiva que estaba acá, este señor, hay una librería que --> tú generas un punto SQL, o sea, te das un punto SQL, generas una consulta SQL sobre un --> archivo y este señor, esa librería lo que hace es que automáticamente pues la convierte en --> un script, o sea, toma eso y lo convierte en unas funciones propias para sacar lo que tú --> quieres, entonces aclaro que lo que voy a hacer, porque para hacer funciones de grupo hay dos --> elementos, un T-aggregator row y un T-aggregator show row, esos son los dos señores que están --> aquí. A ver, esta fue la pregunta que me habían hecho inicialmente, creo que en el primer curso --> de talent data integration, listo, ¿qué es la diferencia que hay? La diferencia que hay es que --> en primer lugar lo que hace este T-aggregator row, vamos a suponer que yo tenga el siguiente --> listado de registros, voy a crear aquí algo nuevo, tengo por ejemplo department ID y tenga --> salario, listo, aquí este agregador funcionaría igual si viniera de una base de datos o si --> viniera de un archivo, funcionaría igual a excepción de esta parte porque este agregador --> row lo que haría como viene de un THCF input, él mandaría click a mac reduce, pero si no --> lo siguiente, uno por acá, digamos gana cinco pesos, este señor tiene uno, mismo departamento, --> gana dos pesos, este señor aquí, bueno voy a colocar aquí algo intermedio para que se --> vea más fácilmente y no agregar tanto registro, cuatro que está aquí, listo, entonces aquí --> tiene nueve, listo por acá y aquí tiene por ejemplo un dos y aquí gana tres, entonces tú haces, --> bueno voy a hacer un agrupamiento, un group by y le voy a decir department ID, por ejemplo que --> agrupe por departamento, lo mismo que hablamos allá, si en realidad esto viene de una base --> de datos, hay una alta probabilidad que salga más eficiente que haga el group by --> directamente y lo utilices acá a que te haga el group by la herramienta, pero vamos a ver cómo --> funciona, a ver, este group by department ID lo que hace entonces es que toma los registros --> tal cual como vengan de la base de datos, significa en que empieza a ser grupitos, --> entonces dice, bueno en el grupo de uno voy a meter este departamento de aquí, listo, --> voy a meter este señor de aquí, en el grupo de este señor que está aquí no es igual, --> no lo meto, este señor entonces como no lo meto aquí, creo otro grupo acá, --> este grupo lo voy a llamar cuatro y este señor aquí entonces agrega a este señor, --> a este registro aquí, después sigue recorriendo y se da cuenta que hay uno que ya, un grupo --> que ya creó, adiciona este señor aquí y se da cuenta que este elemento no está, --> entonces crea otro grupo y nada más tiene un registro, ya después que él tiene los grupos, --> es claro entonces en que yo puedo hacerle cualquier función de grupo, entonces yo digo --> sum por ejemplo salario, ya se da cuenta entonces internamente que hay tres grupos, --> mandaría el grupo uno y suma este con este, que es salario, daría siete, después tiene el --> cuatro y el cuatro nada más hay uno, daría nueve y viene el dos y nada más hay un registro --> y le daría tres, eso es lo que hace este agregante, a nivel de que cómo hace internamente el señor, --> pues en realidad es una tabla de un diccionario de datos, un diccionario y hashea las claves y --> después busca con los claves hash, cuáles son iguales y con diccionarios es mucho más --> eficiente y haciendo tablas hash, es un más eficiente internamente, claro que este método --> funciona muy bien cuando la tabla, los elementos son muy, que vas a ordenar no es tan grande. --> La otra que es el T-agregate short row, lo que hace es internamente lo siguiente, --> primero antes de agrupar entonces ordeno los datos, entonces ordenar los datos me --> quedaría más o menos el registro es así uno, me quedaría este señor acá, me quedaría después el dos --> y me quedaría después el cuatro, notará que el algoritmo ahora de agrupamiento es sencillo, --> tomo este primer elemento hasta que encuentre uno diferente, recorro, recorro, recorro, --> aquí encuentro el primer diferente, este es un grupo, esto lo meto en un grupo, --> después empiezo otro grupo desde aquí hasta donde hay uno diferente y esto es mucho más rápido, --> claro, habría que analizar algo, cuánto te cuesta el ordenamiento, cuánto te cuesta, --> porque te puede costar. Listo, entonces esa sería la idea, --> si, bueno esta pregunta será interesante, no lo he analizado, es si hay diferencias, --> como yo mando esto a Macreduce, si hay diferencia en el script generado cuando hago este --> ordenamiento, ese lo voy a investigar porque ahora se me ocurrió esa pregunta y no sé, --> es decir, si hay diferencia justamente cuando, como esto lo mando a Macreduce, --> al usar un T-agregate o usar un T-agregate short row, --> ¿qué diferencia habría en el script generado? --> Me lo investigo porque Java, este herramienta no te muestra el script que generó, --> no sé por qué no te muestra ese script, el internamente es un script pero te lo oculta --> y lo manda a ejecutar con Macreduce en tiempo de ejecución, perdón, no que te lo oculte, --> creo que el tiempo de ejecución es que te lo genera y lo manda para Macreduce. --> Son las dos formas, como este archivo es muy pequeño, vamos a usar la primera, --> en verdad hay un poco de datos que es a T-agregate row, ahora voy a usar otro con --> T-shorter row y voy a hacer lo siguiente entonces, voy a hacer aquí un T-HDFS, --> T-HDFS output, este output de aquí me lo voy a llevar --> y me voy a traer, qué pena, la conexión esta del T-Preyoxy para que sea más --> eficiente porque tengo, voy a usar tres componentes que se van a conectar a Hadoop, --> entonces voy a conectar, voy a traerme también el T-Preyoxy. --> Y listo, llego entonces, voy a enlazar los componentes, main aquí y este de acá, --> como esto lo copié, seguramente tiene la configuración del punto y está perfecto, --> este T-HDFS output, lo copié de allá, creo que me va a copiar el esquema anterior, --> no, qué pena, este T-HDFS output, créelo, porque este va a ser nuevo, --> no es el mismo formato, vamos a borrarlo de aquí y agreguemos un T-HDFS output de cero, --> porque la salida va a ser un poco diferente. --> Voy a iniciar con esto y después voy a agregar algo interesante en el T-Aggregate y voy a ver --> dos formas de hacerle lo mismo, usted analizará cuál, hay una que es más fácil pero de pronto --> la otra forma te pueda solucionar algún problema diferente. Vamos a empezar con este que es muy --> sencillo. Voy a conectar el T-Aggregate si al nuevo T-HDFS output, voy a agregar la conexión --> que creo que debe estar aquí ya, esta y el output no debe estar, porque es nuevo, --> voy a usar conexión existente y por favor asegura que me parece un pequeño, bueno, --> no box, no sé si era un box o una pequeña falla en este componente en que si hay una --> conexión solamente una debería aparecer esa conexión ya automáticamente. --> Listo, entonces voy a hacer lo siguiente ahora, voy a configurar este T-Aggregate row, --> nos piden, aquí tengo el enunciado, espérate que es por estado, producción, --> prestado y temporada Listo, entonces vamos aquí a editar el esquema, --> borremos este esquema de salida que me quedó de la vez pasada Listo que hemos todo este --> esquema de salida, borremos todas estas y solamente vamos a mandar la que necesitamos. --> El estado está en el campo state name, la mando para este lado, la temporada está en season, --> y el total de esa temporada va a ser una columna nueva, entonces mejor agrego una nueva columna --> aquí, total, under score, temporada, total temporada, bueno, aunque aquí lo coloque, --> aquí es una mezcolanza de inglés con español, vamos a darle aquí, ok, --> yes, espérate un momento que no lo, ok, dígame, ah perfecto Listo, qué pena, iba a comentar --> algo, se me olvidó, editar esquema, aquí este campo es Float porque este señor viene la --> producción, esta producción no sé por qué está string, esta producción debería ser, --> confirmo el archivo, voy a confirmar el archivo un momento, --> esa producción tiene que ser Float, no sé por qué está de tipo string, la tomo mal, --> voy a cambiar aquí producción a Float, esperamos que no tengamos problemas, Float, --> y el total debería ser como hizo usted Float porque voy a calcular un valor, --> Float aquí y Float acá, esperamos que no tengamos problemas, --> perfecto, entonces listo, damos aquí ok, y aquí ahora es sencillo entonces, --> como nos piden por estado y temporada, la agrupación va a ser primero por estado y --> después por temporada, y acto seguido, vamos a calcular, damos aquí, en la columna salida --> total temporada, vamos a hacer un zoom de la producción e ignora los nulos, por favor, --> porque si hay un nulo, como esto estoy ejecutando es contra Java, si hay un nulo --> va a tener un problema en la suma esa, entonces para evitar cualquier vamos a darle --> ignorar nulos, perfecto, listo, aquí no hay más nada, vamos a la salida, --> confirmemos que el esquema de salida corresponde al de entrada, es decir, --> deberían llegar tres columnas acá, aquí esta sería stay name, season y total temporada, ok, --> voy aquí a abrir nombre archivo, para que sea más sencillo la ruta, voy a coger cualquier --> archivo que está en input aquí y le voy a cambiar el nombre, voy a coger producción --> nuevamente, ok, y lo voy a llamar entonces ahora, producción underscore por estado, --> underscore temporada, --> le voy a decir que el separador es coma y que incluya un header, voy a hacer entonces --> aquí un thdfs input, input y un telokrow para confirmar a ver qué me está dando, --> conecto el input con el telokrow y como buena práctica ya deberíamos para la --> pregunta que me hicieron de los job, vamos a colocarle un disparador para que un tercero --> sepa que la ejecución va a ser en este orden, primero el de arriba y después este que está --> aquí, configuremos lo siguiente, el thdfs input, entonces voy a copiar la salida de este señor, --> es decir, el nombre archivo de salida, control c, lo voy a colocar acá de entrada, --> le digo usar conexión existente, --> tomo la entrada, le digo que es por coma y que tiene un encabezado, --> por último falta el esquema del input 2, ese esquema pues son tres columnas y quizás --> podíamos hacerlo de forma manual, no demoramos menos, pero podíamos aplicar --> lo mismo del día de ayer, partiendo que el esquema de salida va a ser igual a este de entrada, --> vamos aquí al output, vamos aquí a editar esquema y hay una opción que dice exportar, --> es la antepenultima, exportar y le voy a colocar esquema producción por estado, --> se me escapaba, no leí el punto csv o después no lo leí, esquema producción --> con direct core por estado, punto xml que es csv, xml, ok, guardar, ok y ahora lo recupera en --> el input, le da editar esquema, ahí aparece nada más una sola opción y debería aparecer --> y importas entonces el esquema, vamos listo, quiero copiar el esquema de salida a esta --> entrada, ok, vamos primero al output que es el que tiene el esquema, damos click al --> lado de editar esquema, ya hay el botón que está antepenultimo que dice exportar todas --> las filas a un archivo xml, le damos click ahí, listo aquí le coloca un nombre y asegura que --> tenga extensión al final, punto xml, le damos guardar y ahora lo que procedemos a hacer lo --> siguiente ahora, váyase al input, váyase a editar esquema y aparece una opción nada más --> si está vacío, si no le da opción este replace all, escoge aquí y busca el esquema de salida y va a --> copiar exactamente los valores que están ahí, perfecto, listo, creo que aquí no hay más nada --> que hacer, vamos a darle guardar y vamos a intentar ejecutar para ver si no hay ningún error --> vamos a ver que no hay error esperando para ver --> no sé si de pronto la conversión que hicimos a ese flood, esperemos que no nos cause algún --> tipo de error, vamos a ver, sí terminó bien, perfecto --> Eva noto que tienes un error allá, ya llegó a tu --> máquina para ver, bueno en el caso mío creo que me está ejecutando el de limpieza --> y quiero que ejecute es este de producción, si me ejecutó el que no era es el archivo de --> producción por estado --> perfecto, listo --> aquí sabes que vamos a cambiar la entrada porque vamos a tomar archivo curado para que --> no salga ese espacio en blanco, voy a cambiar aquí producción por producción curado a ver --> si dejamos el mismo, pero producción curado lo tengo en cero, ah porque lo ejecuté y lo --> intento ejecutar nuevamente --> Eva voy con el caso tuyo, vamos a ver, dice cuál es el error, que no está que, archivo --> no existe, ah Eva el problema, es un problema complicado, un momento te explico que pasó, --> bueno interesante, Eva vamos, todos estamos en la ventana de mirándolas, si no alcanzan --> a ver la máquina Eva que estoy presentando verdad, Eva el problema es el siguiente, --> fíjate lo siguiente, el primer subyok, el primer subyok que tienes allá arriba lo --> uniste con el subyok de abajo con un component ok, entonces prácticamente estamos uniendo --> tal vez todo un subyok, entonces date cuenta que él empezó a agregar y también ejecutó --> hacia abajo, por qué, porque le colocaste un component ok, al colocarle un component --> ok entonces intenta ejecutar los dos secuencialmente, primero empezó con la parte de la --> sacarla de los archivos y intentó leer un archivo que tuyo está creado, entonces --> cámbiale porque necesito que se ejecute primero el subyok de arriba, cámbiale y borra la --> línea de un component y ahora únela con disparador, click derecho, disparador y --> colócale on subyok ok, de tal forma que termine el subyok primero en la primera --> opción, on subyok ok, la conectas por favor, e intenta ejecutar ahora a ver, --> pues el orden ejecutaría el subyok de arriba primero y después ejecutaría el subyok de abajo --> listo, que decía, que vamos a cambiar, voy a ejecutar nuevamente en el caso mío que --> tengo un problemita aquí, voy a ejecutar nuevamente el de limpieza --> el de limpieza lo voy a ejecutar un momento --> si, ejecutando limpieza --> porque se me borró, cuando lo intenté ejecutarlo cancele y me quedó en cero --> ahora el nuevo subyok no voy a coger ahora en el input, en el primer input --> no voy a coger producción, sino producción curado --> producción curado, no debería porque el mismo formato de archivo no debería causar --> problemas, voy a ejecutar nuevamente aquí y me va a ejecutar nuevamente limpieza --> me espere un momento listo, deja que termine para que no me quede el --> ejecutar el nuevo con el curado para que no me aparezcan los espacios en blanco --> ahí, ejecuto aquí --> listo, vamos a ver qué error me salió --> ah, ya existe, claro, se me escapó la recomendación, aquí le tengo como create, --> debí darle sobrescribir, aquí no es crear, sino sobrescribir, ejecuto --> se cuenta que esta arquitectura de tener una conexión es mucho mejor en el sentido de que --> la puedo aprovechar, aquí ya está el archivo curado, es decir, te va a salir el espacio en blanco --> Ernesto, tienes un error, es porque seguramente vete al tu input y mira a ver si tienes configurado --> que está para crear o para sobrescribir, dale doble clic al thf output y busca la opción, --> ahí cambia la opción de crear por sobrescribir y vuelve a ejecutar por favor, bueno, --> me avisas si alguno no le sale, por favor, o tiene algún error, listo --> Eva, Jasmine, voy con tu máquina, Jasmine, que no la estoy viendo, claro, vete a tu input, --> por favor, a tu input, el primero, el primer input, el primer input, por favor, --> dale doble clic, ese es el input, el input, el input, thf input, ese que está ahí el primero, --> sí, exactamente, vete a tu nombre de archivo y dale al final al botón, al botón, --> vete a tu input y escoge mejor producción curado, --> producción curado, que es más pequeño porque le quitará espacio en blanco, vuelve a ejecutar, --> por favor, si estás amable, perfecto, estoy claro, el archivo, porque ese lo curé en la --> primer job, seguimos entonces, seguimos, voy a alguien que tenga todavía algún error, Catalina, --> bueno, muéstrame el run que ejecutó, muéstrame el run, no sale el error, muéstrame el hdf output, --> hdf output, doble clic, bueno, parece que todo está bien, vamos a ejecutar entonces, a ver, --> qué pasa, ejecutamos para ver eso, ahí está, ok, tenemos un error de codificación, --> ve esa code un momento, ahí esa code para ver dónde marca el error, --> está el punto rojo ahí, dele el punto rojo, por favor, suba, carajo, ahora sí tenemos un --> problema ahí con ese cache, suba a ver, suba un poco para ver, déjeme yo, que este error sí --> está diferente porque está marcando, espérense a su máquina de manera interactiva, que este --> está marcando un punto de listo, permítame descontrolar un momento, este cache cierra, --> aquí hay un telok row, --> ok, permítame montar aquí, editar esquema, --> ah, tiene el esquema vacío, yo te hice el export de la salida del esquema del hdf output, --> ahora sí tome el control usted, Catarina, entre a thdf output, por favor, dele doble clic, --> al dedo, váyase donde dice editar esquema si es tan amable, listo, váyase a la parte izquierda --> de los botones de la parte izquierda y busque el botoncito que hice exportar, al ladito --> del que, ese que está ahí listo, ah no, ya lo tiene, ya lo había hecho ya, faltó --> importarlo, dale cancelar entonces, cancelar, váyase al input, editar esquema, --> y al botón, al último botón que hizo, entonces dale clic ahí por favor, escogemos ese, abrir, --> ok, ah yes, dele ejecutar para ahí, yo creo que ese es el error, porque estaba esperando un --> código ahí, y quizás ese sería el error, hay un problema en el zoom de la salida, --> dele kill, mate ese proceso, mate ese proceso, ve yase al t-aggregator row, porque está sumando --> state temporada, ahí el input column, dale clic ahí, debería ser total, clic ahí, --> de ese producción, producción, ahora sí, intente ejecutar nuevamente, creo que, --> váyase a su HDFS input un momento, al input, el HDFS input por favor, o no, --> o en el t-rrow, creo que lo podemos hacer en el t-rrow, váyase al t-rrow por favor, --> váyase a editar esquema, ahora sí, ah no, qué pena, es un error red de Java, dele ok --> nuevamente, qué pena, ok, váyase al input column, de su cuenta que la cambió, y le --> apreció, recuerda que había cogido producción, dele un enter, que ese es un problema de Java con --> ese table, dele enter ahí, ahora sí, es un problema netamente de ese con el table de Java, --> ese componente yo lo odiaba a nivel cuando hacía interfaces de stock, un componente muy --> complicado de manejar, ahora sí se da cuenta que no, ahora sí está calculando, ahora sí, --> perfecto, listo, entonces ahí está, bueno, listo, bueno, qué tal si hacemos un pequeño break, --> ya pasaron las primeras dos horas, hacemos un break de 10 minutos, y volvemos entonces en 10, --> ok, a tomar algo frío, yo en este caso caliente, a tomar un cafecito, volvemos en 10 entonces, --> bueno, nuevamente continuamos, bueno, nuevamente continuamos entonces, después de --> ese pequeño receso, vamos a agregar otro elemento para comparar lo siguiente, hay unas --> opciones que te ofrece la herramienta, que son opciones de compresión de los datos, es decir, --> partiendo de que vamos a tener sobre un sistema Hadoop, y Hadoop, los nodos que tenga, va a --> replicar los archivos, es claro que vas a consumir bastante almacenamiento secundario, --> pero si uno hace una comparación, el secundario es muchísimo más barato que el primario, lo que --> en realidad vale es ese primario, entre más memoria, pues pagando mucho más. Ahora, --> vamos a hacer lo siguiente para la prueba y hacer la pequeña comparación entonces, --> vamos a darle aquí clic derecho al job, vamos a copiar ese mismo yo, --> el que se llama Job Calcular, producción por estado, vamos a copiarlo, bueno, perdón, --> vamos mejor a duplicarlo, Duplicate, y vamos a llamarlo entonces Job, bueno, --> el mismo nombre, y le coloco el sufijo al final, comprimido, comprimido, claro que, --> de te cuenta, esto que hicimos fue sumar y restar, que es lo mismo, normalmente tú --> llevas a un archivo y ese archivo, pues lo llevas a un Data Warehouse, un Data Lighthouse, --> y ahí lo graficas lo que tú quieres, estamos asumiendo que ese archivo, producción, --> era elevadamente grande, entonces, al ser elevadamente grande, un sistema tradicional, --> pues puede ser un poco más, más tedioso y complicado, evidentemente, ahora vamos a hacer --> el labor, el Join, vamos a ver cómo nos funciona ese Join ahora, vamos a darle aquí OK, --> y cierra, por favor, el de temporada y abre la duplicado, lo que termina en comprimido, --> si es tan amable, --> listo, y ahora a la salida, al THDFC Output, haga lo siguiente, dele doble clic a esta salida --> aquí, y ahora hay una opción que dice comprensión de data, comprensión, comprensión de data, --> y hay diferentes algoritmos de comprensión, solamente, bueno, especifica GSI y BSI, --> que son algoritmos de comprensión, implementaciones de algoritmos de comprensión para Linux, --> GSI, que fue creado en el mundo Linux, más que todo, ahí dejamos por defecto, --> y ahora, como va a estar comprimido, voy a cambiarle el nombre, le voy a quitar el punto --> CSV, y lo voy a dejar, producción por estado, temporada, donde el score comprimido y no va --> a tener extensión, comprimido, sin extensión, listo, entonces, listo, perfecto, y ahora, --> si lo mando a comprimir, para poderlo leer, tengo que decir que lo descomprima, --> por lo tanto, en el HDFS input, dígale que está comprimido, y asegure que el algoritmo --> de comprensión y descomprensión sea el mismo, en este caso sería GSI para los dos lados, --> dele aquí, guardar, y mandelo a ejecutar, por favor, --> ah, claro, no, sí, sí, claro, sí señor, así, perfecto, --> voy a cambiarle el nombre, si no, sale error, si tendría que colocar el mismo archivo acá, --> sí señor, así es, perfectamente, así es, --> voy a ejecutar entonces, ahora sí, comprimido, ejecutar, debería dar lo mismo, pero voy a --> comparar para ver la tasa de comprensión de cómo quedaría el archivo sin comprimir, --> y cuánto quedaría el archivo comprimido, bueno, ahí está, listo, está ejecutando, --> perfecto, ejecutó bien, y voy a mi sistema de ficheros, y voy a ver, --> debió agregarme un nuevo archivo, y ahí está, el comprimido pesa 1.47 y el no comprimido pesa --> 3.8, hay una relación de diferencia, vamos a ver de cuánto, 1.48 entre 3.8, --> la tasa de comprensión fue del 40%, aproximadamente, entonces ahí podías --> reducir pues algún tamaño con respecto a lo que estás haciendo, listo, la tasa de comprensión --> fue del 40%, aproximadamente, bueno, ahí tú decides si deseas mandarlo a comprimir o no, --> lo que tienes que asegurar es que el mismo algoritmo de comprensión es el mismo algoritmo --> de descompresión, listo, paré de contar, seguimos entonces, vamos a hacer el siguiente --> ejercicio, este siguiente ejercicio me va a permitir incluir algunas cosas propias de --> la herramienta, que me facilitan algunas cosas, y este ejercicio lo voy a hacer de --> forma para poder incluir otro componente que no alcanzamos a ver, que es el T-Join, --> habíamos visto el componente T-Map, pero vamos al componente T-Join que no lo habíamos visto, --> vamos a lo siguiente ahora, por favor, vayamos nuevamente a la herramienta, --> y ahora vayamos a lo siguiente, clic derecho y vamos a crear un nuevo job, --> vamos a llamarlo job-calcular-producción-estado-temporada-underscore y anualidad, --> es decir, le voy a agregar un nuevo elemento al Group Byte, ya te digo para qué, --> el mismo nombre que tenía anteriormente, pero le agregué ahora y anualidad, el mismo nombre, --> y le agregué al final y anualidad, vamos aquí a darle Finish, --> listo, entonces, como es parecido, voy a ir al Calcular sin comprimir, para no estar --> chuleando ahí, y voy a copiar el T-Join, y voy a copiar este señor en el nuevo job, --> aquí, esto quedaría así, este es el nuevo job, pego esto aquí, listo, voy a cerrar este está acá, --> y quedaría así, copié el que no comprimí para no estar chuleando la compresión, --> por favor, quite este THS Opus para poner el contexto del problema que queremos resolver, --> coloca aquí un T-Lock Row para que me entienda el contexto de lo que quiero hacer, --> entonces, voy por acá, y conecto el T-Aggregator Row con el T-Lock Row, repito, --> voy a contextualizar el problema que quiero resolver, vayamos al T-Aggregator Row, --> por favor, vamos a editar esquema, y lo único que vamos a hacer es vamos a agregar --> CrocGear, lo pasamos de la entrada a la salida del T-Aggregator Row, CrocGear, --> CrocGear, quedamos aquí, ok, y agrega que vamos a hacer el agrupamiento por estado, --> por temporada, y ahora por año, CrocGear, qué pena, vamos a agregar aquí, --> porque es que después no me va a entender, vamos a agregar aquí un T-Short Row, --> T-Short Row, porque para ver el contexto del problema, pues no se ve tan bien, --> aquí me piden que instale, bajar e instalar, --> si, aquí, entonces, voy a hacer lo siguiente, conecto a este T-Short Row y el T-Short Row al --> T-Lock Row, por favor, instale lo que no es el caso, y también instálalo, por favor, perfecto, --> listo, y entonces vamos a hacer el agrupamiento, vamos a darle, agregamos columna, --> y la siguiente columna, asegúrese que esa columna es alfanumérico, --> la siguiente columna agrega que ordene por temporada, --> también que se es alfanumérico, y quiero lo siguiente, la tercera columna ordena por total --> temporada, ese total temporada sí es numérico y ordenarlo de manera descendente, --> enter, --> vayamos, ahora sí, y aquí no hay más nada, vamos a ejecutar para ver y le voy a mostrar --> qué es lo que quiero resolver, listo, voy a ejecutar aquí, --> vamos a que ejecute ahí, nos muestre, a ver, que no salga, que listo, a ver, vamos a ver, --> debería salir lo mismo, si tenemos la misma configuración del ordenamiento, --> pues debería salir lo mismo, y aquí está, --> aquí me faltó lo siguiente, por qué no mostró el año, aquí faltó el año, --> déjame ver que no me está mostrando el año, por qué no mostró el año, --> te agregué enter row un momento, te reviso para ver, --> bueno, el cross ya está aquí, o sea que no es el problema de él, --> debe ser en el te show row, voy a buscar la salida, editar salida, --> aquí está cross gear y el te low row, a ver qué pasa, editar esquema, --> porque yo no vi el año ahí, yo vi el año ahí, --> no sé, a usted le apareció el año ya, a mí no está apareciendo, voy a cambiar un --> poco la salida para que me lo muestre de tipo table, sé que estoy viendo mal, --> y a mí por qué no me apareció, vamos a ver, --> no sé si fue, porque se está, qué pena, se está ejecutando, qué, --> gracias, gracias, gracias, no he guardado aquí, excelente, --> lo revisé, y abrí el que no era, vamos a ver, ejecutemos aquí, --> ejecutemos aquí, es anualidad, este que está aquí, --> ahora sí ejecuto, --> bueno, vamos a lo siguiente, ahora sí, ejecutando, --> perfecto, listo, entonces aquí va así, gracias, --> bueno, mire lo que quiero resolver aquí, --> note lo siguiente, quiero sacar el año en que más tuve producción en la temporada, --> entonces mire lo siguiente, voy a tomar estos archivos que están aquí, este de aquí, --> por ejemplo estos de acá, y los voy a pegar para verlo mejor aquí, --> significa, aquí no, acá, en el notepad, --> significa lo siguiente entonces, no guardar, perfecto, --> veamos, para este estado, para esta temporada, el mayor es este, 2010, --> hay solo archivo, no hay mucho problema con esto, entonces me debería dar esto de aquí, --> cierto, para el segundo, para la temporada carif, mire lo siguiente, en la temporada carif, --> el mayor producción cuál fue, fue esta, la primera, en el 2000, esta de acá, --> si me equivoco me avisen entonces, si escogí la correcta, para rabis nada más hay una sola, --> o sea que quiero el año en que más produce, y en la temporada que llama año completo, --> la mayor, no, porque es que lo organizé, perdón, es que lo organizé de esta manera, --> el short el organizé, claro que estaba en la primera, estaba allá primero, --> pregunto, si entiende que es lo que quiero sacar, quiero sacar el año en que más tuve --> temporada, esto es muy común cuando tú vas a sacar en un supermercado cuáles son --> cinco productos más vendidos por cliente, entonces es una relación de ese cliente, --> le haces una campaña a ese cliente y lo convences a que compre esos productos que compra --> el más nuevo producto que tú tienes, entendemos el problema, verdad, entonces vamos a lo siguiente, --> yo he visto algunas soluciones que empiezan de esta forma, vamos a te agregué este, --> ahora quitan este crossgear de aquí, y este crossgear lo colocan acá, no, no lo hago usted --> ya para que me entienda, para que me entienda la idea, entonces mira lo que hace, aquí hay una --> función que se llama fers, que saca de la primera registro del grupo saca el primero, --> prácticamente parecido a lo que estoy buscando, verdad, quiero sacar el primero --> porque lo ordené, pero hay un pequeño problema aquí, que este elemento en este --> punto al decir primero no está ordenado, al no está ordenado esa solución no me funciona, --> entonces hay otros que hacen lo siguiente, viene aquí y saca el max, si sacas el max de ahí, --> hay un pequeño problema que no ha sumado todavía, entonces como no ha sumado está --> sacando el máximo de todos, porque de entrada ya te cambió el agrupamiento, entonces ¿qué voy --> a hacer? vamos a hacer este problema de dos formas, vamos a dejarlo como estaba, aquí tengo --> una suma, una suma que tengo aquí, voy a quitar este señor de acá y voy a agregarle --> como estaba originalmente que era crossgear así, mira como hago ahora, en este punto --> ya el elemento sale ordenado, ahora el elemento ordenado voy a hacer lo siguiente, ahora sí --> voy a hacer lo siguiente, voy a agregar otro T-aggregator row, para verificar que todo está --> bien voy a agregar un texor row nuevamente, ese texor es para verificar el texor antes, --> sin el texor antes no me sale la solución al problema, el último texor es para verificar --> que todo esté bien y voy a agregar el texor row para verificar que todo esté bien aquí, texor row --> y voy a unir los componentes entonces, de este señor va aquí, --> de este señor va aquí --> y este señor va acá --> listo, ahora recuerda que la salida en el T-aggregator row me entra esto de acá, --> voy a colocarlo aquí nuevamente en un nuevo archivo, bueno guardar este señor, --> voy a verlo aquí, pues no pate este para que sean dos aquí, --> voy a agregar eso, significa que esto está ordenado ya, entonces voy a decir lo siguiente ahora, --> en el segundo T-aggregator row voy a decirle ahora que me cambio el ordenamiento, ordename --> nada más por, voy aquí a editar esquema, voy a sacar toda la entrada a la salida, --> o sea le doy aquí en el más de acaba en las flechas la segunda fechita para que --> mande toda la entrada hacia salida, toda la entrada a la salida y le doy aquí ok, --> y ahora voy a esto de acá, lo siguiente, entonces voy a agrupar por state name, --> por si son nada más y ahora sí voy a hacer lo siguiente, --> voy a mostrar, voy a agregar aquí las dos columnas restante que es total y cross-gear --> y le voy a decir hazme el favor y saca el primer elemento del grupo, first, --> dile que ignore los nulos por si acaso, por si las dudas, que no creo porque está sacando --> el máximo, creo que hay carecía de sentido, bueno pero puede dar nulo, --> ahora entiende cuál es la idea, el archivo me llega así ya ordenado ¿verdad? entonces con --> el primer elemento no hay problema ¿por qué? porque solamente hay uno solo, pues es el --> primero y el último, pero veamos cómo funcionaría con este grupo de acá, --> mira cómo hace, aquí agrupa por este y por este, significa que todos estos registros están, --> pero como viene ordenado yo voy a decirle oye de este grupo sácame el primero de total --> temporada y sácame el primero de cross-gear, ya está ordenado, sacaría este de aquí, --> de este pasaría lo mismo, entonces aquí está el grupo y le voy a decir perdón, --> está el grupo y le voy a decir oye de ese grupo sácame el primer elemento que sería este y --> sácame el primer elemento que sería este, pregunto para decirme está entendiendo la idea, --> si yo cambio este primero a max, a max será que me da, me daría con el más, será usted que --> cree, será que me da, no no daría, claro me daría este valor de aquí pero me devolvería --> 2010, ahora el max, como el primero es el máximo, ahí podía haber colocado al máximo --> y me hubiera dado, pero bueno vamos a ver, vamos a colocar aquí first a ver si esto da, --> enter, vamos a ejecutar ahora, --> ah para el techo otro, sígame, así, sí, sí, segundo techo va a estar en mi morde, --> stay name, el segunda columna va a ser de bien copiar y pegar, SISO, alfanumérico y el total --> temporada, --> no daría lo mismo, vamos a ordenar mejor por año porque nada más va a haber un solo archivo, --> cross gear, vamos a hacer ascendente, no porque un solo registro, creo que este está de más, --> esta columna estaría de más porque hay un solo registro por este grupo, nada más --> stay name y SISO, alfanumérico, ejecutemos aquí para ver si tengo razón, porque nada --> más hay un registro por grupo, --> vamos a ver que sale, vamos a ver entonces, voy a tomar este señor que es el que estaba --> haciendo las pruebas, control C, voy a pegarlo, en este creo que fue que hice la prueba, vamos a ver, --> ahí está, 2010 corresponde a este de aquí, 2000 corresponde a este que saqué acá, 2010 corresponde --> con el valor y el año entero 2003 y ahí está, el problema es que esa consulta tiene un pequeñito --> problema, así como está, pero si entiende la idea, ese first no está, ese first lo podías --> hacer en versión MySQL antes de la 8.0, después de la 8.0 de MySQL, MySQL decidió ajustarse --> netamente al estándar de SQL y en estándar de SQL no permite mostrar ese primero, --> aquí sería interesante hacer por ejemplo los cinco primeros o los dos primeros que es --> ahora lo hacemos para ver, miren cuál es el problema de la consulta, suponte el caso --> que existen dos registros, así este registro que está aquí y este sea 2010, --> aquí debería de volver dos, porque el máximo lo tiene dos, dos no ha estado, --> pero así como está la consulta devuelve el primero, entonces la consulta sería incompleta ahí, --> no me estaría dando resultado deseado, en caso de que existan dos que cumplan la condición como --> es el que estoy mostrando aquí, aquí qué pasaría, puede que este orden me lo da de esta --> manera, pero él va a sacar el primero y en realidad debería devolverme los dos, --> para esto vamos entonces a agregar otro componente entonces, vamos a hacer lo siguiente, --> vamos a tomar este señor clic derecho, vamos a duplicarlo, hacerlo de otra forma --> diferente y lo vamos a decir, le quito el copy y le agrego segunda forma, --> segunda forma, accedemos entonces a la segunda forma, voy a quitar este señor --> y acceder aquí a la segunda forma y listo, vamos a hacer lo siguiente, entonces borre desde --> claro que el no es necesario para que funcione esta segunda forma, pero es más eficiente si --> no está ordenado, segunda forma la agregué para solucionar el problema cuando son varios y --> segundo para agregar el componente que no lo habíamos visto, entonces vamos por aquí --> y ahora lo que vamos a hacer es lo siguiente, vamos aquí a un T, vamos a hacer aquí un T HDF --> output, une el T short con el T HDF output aquí en este punto y este señor lo que va a hacer --> es lo siguiente, entonces vamos a mandarlo, aquí lo configuramos, usar conexión existente, --> vea que tiene todo el sentido el THF connection porque nada más se conecta una sola vez --> y para mayor facilidad voy a hacer lo siguiente, voy aquí a --> especificar una ruta aquí, voy a escoger el archivo producción, --> voy a llamar a este archivo producción underscore estado, underscore anualidad y --> le voy a colocar el prefijo, el sufijo T de temporal, temporal. Le agregué el nombre, --> cuando tomé uno que ya sabía que era producción y le agregué estado anualidad --> cuando le corté para decir que es un temporal. Ahora tome este mismo suyop, --> tome este mismo suyop, control C, control V y lo coloca acá abajito. --> Dítele el T short row que ya no es necesario, aclaro que el T short de --> arriba es para, es más eficiente, ya te explico por qué y conecta el T agregate con --> el THDFs output. --> Y elimina entonces, vete al T agregate row del segundo componente y dile lo siguiente ahora, --> quítale para que no agrupe por crossgear, elimina crossgear de la salida por favor, --> porque si no te lo va a mandar para aquel lado, nada más va a mandar tres --> componentes y cámbiale este nombre de total temporada a máximo under score total temporada. --> Es decir, cambie el nombre de total temporada a máximo total temporada. --> Dese cuenta que al final en esta parte de vida estamos terminando EGTL, --> porque ya la herramienta automáticamente genera los scripts para ejecutarlo con --> reduce, estamos terminando en herramientas tipo EGTL prácticamente. Vamos a darle aquí OK --> y cambiamos el nombre, dale yes aquí, listo y el nombre de la columna ya lo cambió y mire --> lo que voy a hacer aquí, voy a sacar el máximo de, un momento que aquí, --> no perdón, perdón, aquí me caché, qué pena me caché aquí, me faltó un T agregadito --> row aquí, no me daría, espera un momento, parece que va a salir de esta forma, no me daría, --> espera un momento a ver, ah ya, perdón, sí sí, por favor haga lo siguiente, qué pena, --> el error fue en sí, está bien, ya me ubiqué, ya me ubiqué, ya me ubiqué, listo. Dese cuenta --> que en este archivo de salida me va a quedar toda la anualidad, es decir, me va a quedar este --> archivo de esta manera, da con la subatoria, entonces, qué voy a hacer aquí, lo que voy --> a hacer ahora es que esta entrada de aquí va a ser la del archivo este de acá, entonces --> voy a tomar este archivo de acá y lo voy a colocar aquí como entrada, --> voy a tomar el esquema de salida de este lado, --> editar esquema y lo voy a exportar, voy a exportarlo entonces, lo exporto y le digo --> esquema producción por estado, poranualidad.xml, guardar, ok, y ahora cambio el esquema de este --> señor, borro todo eso que está ahí, aunque yo creo que nada más si doy click, --> salía lo que estaba allá, aparence a mí y me quedaría así. --> En el output, sí señor, gracias, no lo ha cambiado, así, punto y coma, sí señor, --> punto y coma, perdón, cambiar punto y coma por coma e incluir el hider, --> y el override, gracias, este sería también para este, --> el otro, pero aquí todavía no lo configuro, todavía lo configuro para ver. --> Ya voy a explicar cuál es la idea que tengo, gráficamente le explico entonces. --> Si ya agregó el esquema, tuvo que haber cambiado el te agregaste robo, el segundo, --> el de abajo, doble click, y a este señor vamos a agruparlo por este máximo, listo, --> vamos aquí a editar esquema por favor, y pasa total temporada para este lado, --> borra el máximo que teníamos y pasa total temporada, le das ok, --> y vayamos aquí al output, a la salida, a este lo voy a llamar producción estado anualidad máxima --> on the record temporal, y aquí le cambio, así gracias, el cambio aquí del separador a coma, --> y le incluyo el hider, y le doy sobre escribir por si las dudas. --> Mientras va, te voy a ejemplificar que fue lo que hice aquí, lo que estoy haciendo, --> bueno creo que ya la mayoría configuró, preste atención lo que, --> qué es lo que, cuál es la idea, la idea del primer archivo es que me quede de esta forma --> organizado, me quedo organizado entonces por estado, temporada, año y cuál es el máximo --> valor, perfecto, no hay problema, ese fue lo que hicimos inicialmente, ahora este archivo --> que está haciendo lo siguiente, está diciendo agrúpame por estado y agrúpame por temporada --> y sácame el mayor, aquí hay uno solo, no hay problema, saco este señor de aquí, listo, --> me queda este registro de este lado, vamos con el siguiente, estoy diciendo agrúpame por este --> y por este, todos los grupos serían hasta aquí, este rabi no entra, voy a agrupar por este y --> por este, entonces ya de este grupo, sácame el máximo valor que tienes aquí, cuál es el --> máximo valor aquí, qué pena, aquí no guarda años, cuál es el máximo valor aquí, de --> este cuál sería, este de aquí verdad, o sea que guardaría este registro acá, --> de este que está aquí sácame el máximo, hay un solo elemento, me guardaría en este --> archivo, esta parte y de este que está aquí, qué haría, sácame el máximo de aquí, --> el grupo de estos dos, sácame el máximo y el máximo cuál es, este de aquí, --> ahora aquí tengo los máximos y acá tengo todos los elementos, ahora voy a hacer entonces un --> join, voy a agrupar este con este prácticamente para sacar el año, de esta forma es más lenta --> pero podía hacer una consulta en que si hay dos máximos, o sea hay un solo máximo y dos registros --> con ese máximo te devuelve los dos registros, vamos entonces, cómo sería ahora, vamos a lo --> siguiente ahora, ya tengo estos archivos que quedaron en temporal, quedaron allá y ahora --> vamos a hacer lo siguiente, voy a agregar un THDFS input, a THDFS input, este de aquí, --> agrego, bueno son dos que tengo que agregar, --> pego aquí, --> en el primer input voy a tomar el primer temporal, --> lo pego acá, bueno aquí le digo usar conexión existente, component list, --> hdfs, el primero, le digo que es coma, coma y que tiene un header, --> y el segundo input iría con el segundo, el archivo del segundo output, este de acá, --> y sería por coma --> y tendría un header aquí de uno, --> ahí sale, ah listo, me aparece que aquí component list, conexión list, ahora sí, --> voy a copiar el esquema de acá, este esquema de salida, no sé si lo tengo ya, --> ya lo había copiado, no recuerdo si este esquema lo había exportado, --> creo que sí, bueno por si las dudas voy a exportar este esquema, no recuerdo si lo --> había exportado, voy a darle aquí un export y le voy a dar, si creo que se llama esquema estado --> por anualidad, .xml, guardar, sí, y lo exporto aquí en el primero, importo perdón, en el input --> primero, perfecto, y el otro sería, --> y no sé si cambié el nombre de la variable, --> aquí me hizo esto mal porque el máximo de aquí debió ser total temporada, --> total temporada, hay problemas de variable, --> si te da tiempo por favor, cámbiate el nombre del tegregator row del segundo, --> cambia el nombre de la variable a máxima para que sea más sencillo de entender, --> en el tegregator row, en editar el esquema, cambia la variable a máximo, --> con el score total temporada, para que tenga más sentido digamos los nombres, --> ahí te dejo el tegregator row y espero un momento que me adelanté mucho, coloca un tejoin, --> tejoin, coloquemos un telok row para no subir y verificar que todo debía dar el mismo resultado, --> tejoin, son tejoin, tejoin y un telok row, y une ahora lo siguiente, --> hay algunos que todavía están, espero un momento para ver entonces, --> no espero alguno que todavía le hace falta, --> Martina voy a tomar tu pantalla para ver si hay alguno que le hace falta alguna configuración, --> perfecto listo, muéstrame tu tegregator row Martina, si ahí está mal, tegregator row el 2, --> el segundo, perfecto listo, ahora hiciste los inputs, los HDFS inputs, los que están abajo, --> ah están abajo, los de abajo, los que vamos a hacer join ahora, muéstrame el 3, muéstrame --> el esquema, debía haber cuatro columnas en ese esquema, falta, listo, entonces listo, --> a abrir, perfecto, ok, vete al siguiendo output ese que está ahí, dale editar el esquema, --> coge el mismo esquema que es prácticamente el mismo, tómalo ahí por favor, listo, --> y borra la última columna que es crossgear, porque ese esquema nada más tiene tres, --> doble clic, borra la última crossgear, la última columna la borras y cambia el nombre --> a la tercera columna, llámala Máximo también para saber cuando hagamos el join, Máximo total --> columna, ahí tiene el total de aviso, ok, perfecto, por ahí vamos, agrega ahora un T-Join y un T-Lockrow, --> listo, yo creo que el nombre yo no lo cambié acá, Máximo, ah, ahí se me olvidó agregar, --> que fue, se me olvidó agregar esta parte, abrí el, quito crossgear y cambio este señor a Máximo, --> ponder el export total, --> sí, vamos a ver esto, vamos que lo hice muy rápido en realidad, bueno, vuestra vez por --> favor, tu te agregue este row, el segundo, si está mal el segundo, perfecto, ahí hay un --> problema, el input de la columna en las operaciones, ahí tienes producción, vete a la --> configuración de la parte de abajo, ve dónde dice, ahí tiene que ser es, abre y ahí tiene --> que ser es, ah no, tienes un problema ahí, muéstrame tu THDFS input por favor, el segundo, --> muéstrame tu esquema, editar esquema, y ahí está el problema, ese no es, vamos a hacer lo --> siguiente, dale cancelar ahí, vete a tu THDFS output el primero, que es el archivo que va a tomar --> como base, dale doble clic ahí, dale editar esquema, editar esquema y haz lo siguiente, --> exporta este contexto por favor, esa que está ahí, esa que está ahí, exportar y escoge el --> último nombre que tienes ahí, que es ese que está ahí, por si acaso, dale guardar, --> por si acaso no es igual, dale guardar por favor, GGC, ok, ok, dale ok por favor, --> ahora en tu HDFS input 2, dale doble clic y vamos al esquema del 2, el HDFS input, --> editar esquema y escoge ahí el botón para replay, el otro, el de al lado, --> el de replay, ese que está ahí y busca el esquema que hiciste ahora que es el último, --> a abrir, ok, yes, vete ahora a tu T-aggregator row 2 --> y ahora donde dice máximo temporada input column por favor, ve y cambia, debería ser total, --> temporada, perfecto, vete a tu input 3, listo, vete el esquema por favor, dale ahí, --> reemplazar y ese esquema va a ser el de anualidad, ese esquema producción, listo, --> ok, vete ahora a tu input 4, input 4 y la entrada tiene que ser la del input, --> dale ahí, usar, listo, ahí, listo, vete ahora a tu THDFS output 2, no, el output 2, --> ese que está ahí y copia, el nombre del archivo de salida pero ahí te faltó el nombre, --> cambia el nombre, anualidad under score máximo ten, anualidad, under score máximo under score ten, --> listo, copia ese nombre y lo pegas en el output 4, vete al esquema y darle el mismo esquema --> del que tomamos ahora que era el último que está ahí y quítale el crossgear que no tiene --> crossgear, eliminar y cambia el nombre real a máximo under score total, under score total, ok, --> enter ahí, ok, máximo total, under score, bueno eso está bien, ok, no hay problema con eso, --> el nombre es lo de menos, siempre cuando tenga el orden, listo, ahora sí, ojo con las entradas --> por favor los inputs, vete los outputs por favor, el 1 y revisemos la entrada, el output 1 muestra --> el double click, con coma incluye header, el output 2 por favor, para ver cómo tienes la salida, --> cambia la opción a over white, over white, perdón, opción de crear en over white, --> dale separador de campo coma y dale incluir header, vete al input 3 para ver, --> ahí es coma y perfecto y el input 4 muestra para confirmar, el input 4, --> y listo, bueno bien, sí, porque nada más salen tres del target, sí señor, así es, --> bueno, vamos entonces y hacemos el T-Join, aplica lo mismo que el T-MAT, la primera tabla --> subordina a las demás, entonces voy a conectar la primera tabla que está aquí que es el 3 y --> conecto acá y conecto el 4 al join como tal, ahí te aparece lo mismo que te aparecía en el T-MAT, --> tengo main y tengo lookup, conecta el join al telorow y configuremos el join, --> doble clic, ahí estoy, mira que te aparece una opción que dice incluir lookup columnas en output, --> en pocas palabras está diciendo, oye, las columnas que están en output 4, el lookup que --> es este de aquí, quieren que se vean en la salida, aquí carece el sentido porque las --> columnas que están aquí son las mismas de allá, es decir, aquí hay 3 y acá hay más, --> en el principal, o sea que eso carece sentido colocarlo ahí en este caso, --> vamos en el key definition y hagamos el join, el join sería fácil, agrega una nueva columna, --> el stand name del 1 va con el stand name del input 4, cambio aquí el season del input 3 --> iría con el season del input 4 y ahora el total temporada iría con el máximo de temporada --> del input 4, si lo deja hasta ahí lo que se haría sería un left join del input 3 al input --> 4, pero lo que me interesa es un inner join, es el chuleo inner join, todavía no lo ejecuté, --> carece de sentido que deje los temporales allá, coloque un tepos job --> y mande a eliminar los temporales con el thdfs, delete, --> usar conexión existente y vas a copiar aquí la ruta esta del temporal 1, --> si quieres copias de aquí, duplicar y lo haces entonces con, aquí se me olvidó la conexión, --> voy a copiar la salida el temporal 2 que se llama máxima y uno al tepos job los 2 delete, --> iterate aquí listo, aquí sería click derecho, disparador, on component ok, --> y aquí define el orden de ejecución por la buena práctica que deberíamos tener, --> a la pregunta que me hicieron de cuál inicia primero debíamos acostumbrarnos entonces a --> definir este orden aquí, con com on sub job ok, quedaría así, --> bueno voy a disminuir esto aquí, voy a subir esto acá, --> si dígame, --> pero vamos a lo siguiente, en el primer momento, la pregunta creo que me hizo es --> por qué uno este con este aquí, fue así verdad, esa fue la pregunta más que todo, --> bueno bien, lo que pasa es que este segundo recordará que va a tomar el archivo que saque --> de aquí, listo, entonces aquí se está ejecutado secuencia, significa terminado este, --> ejecuto este, o sea que estos dos no lo podría ejecutar en paralelo porque este de aquí --> depende de este de acá, me tocaría ejecutarlo secuencial y este sub job que está aquí depende --> de los dos sub jobs de arriba, entonces me tocaría ejecutarlo secuencial, o sea si quisiera --> colocar este multi trea, bueno pero tampoco funcionaría este extra acá, multi trea que --> secuencio, quitándole evidentemente las líneas, podía usarme un error de ejecución, --> porque terminaría uno sin haber terminado la dependencia del otro, no sé si esa fue su --> pregunta, ya entiendo, lo que pasa es, ya entendí su parte gráfica, disparador aquí, --> si se da cuenta lo que pasa es que para unir su job por orden tengo que coger el primer --> elemento, es una cuestión gráfica, es decir, este último no lo puedo conectar con un sub job --> porque la herramienta le pide que coloque el primer componente del sub job para conectarlo --> al primer sub job de acá, en pocas palabras, aquí no estoy diciendo, la herramienta aquí no --> está haciendo lo siguiente, no está ejecutando este primero y después ejecuta esto, no, aquí --> ejecuta este sub job completo y después ejecuta esto, lo que pasa es que gráficamente y la --> herramienta pide que debe conectarlo con el primer componente del sub job, entonces al final --> terminado esto no significa esto que él vaya conectado aquí sin haber ejecutado esto, --> conectar esto acá, no sé si me entienden la idea, ahora, pero fíjate algo, eso que tú me --> estabas preguntando, si yo llego a conectar este señor, no con un sub job ok, sino un componente --> ok, este señor qué va a pasar, me va a ejecutar este y todavía no ha terminado esta --> parte de aquí, porque ahora sí va a pasar en que dado que este componente se ejecutó bien, --> va a ejecutar esta línea de aquí sin haber ejecutado esto de acá, ahí sí va a tener un --> problema, entonces aquí si necesariamente es que gráficamente tiene que ser acá un --> on-con, un sub job ok, ahora, lo que tú me decías también es válido, ya te entendí la idea, --> pero sí te entendí la idea, sí te entendí la idea, yo podía haber hecho esto de esta --> manera, colocar un on-component ok aquí y ahora terminado esto, se ejecuta este señor y pude --> haber hecho esto de esta manera y daría exactamente lo mismo con la pequeña diferencia que al --> colocar on-component ok, estoy haciendo un solo sub job, esto que estoy haciendo sería --> lo mismo que haber hecho un sub job ok, vamos a probarlo enseguida para ver, debería funcionar, --> sí exactamente, porque terminado este me voy con este y terminado este me voy con este, --> lo mismo que si tuviese este unido el on-sub job ok, y este sabemos que terminado el --> sub job de ejecutar pues se ejecuta, entonces no hay problema, vamos a intentar a ver si no --> tenemos ningún error a ver, este sub job nos costó el tiempo bastante, vamos a ver, --> segunda forma voy a verificar si ejecutar aquí, --> si exactamente tu idea es válida perfectamente, no lo había cantado, también lo pude haber --> un momento aquí, editar esquema, qué pena no mande esto para allá, mande esto para acá, --> ok no me haya mandado salida aquí en el teyoy, tiene que estar aquí en editar esquema y mandar --> todo y ahora sí volvemos a ejecutar y debería exactamente ejecutar así como hubiese colocado un --> job ok también me hubiese funcionado también, gracias por la observación, también es válida la forma, --> ahí lo que cambia es la idea, tendría un solo sub job, aquí me salió desorganizado, --> pero bueno aquí tenemos, vamos a verificar si estos valores son los reales, debió dar --> exactamente lo mismo, dónde tenía ese archivo, bueno me dio esto, vamos a ver, --> el 2010 de autun es uno solo no hay problema, el 2000 fue para carif, está bien saqué el año 2000 --> y el de rabi es uno solo, o sea que sí, si quiere dar usted shorter ahí por favor, --> pero es exactamente lo mismo, Martina tienes un error voy a verificar un momento tu pantalla, --> parece ser que, vamos a ver un momento, muéstrame por favor tu esquema y editar esquema un --> momento, editar esquema y ese esquema está mal porque ese es el de producción, dale --> replace un momento y ese esquema es el primero que sacamos que es, ah no eso lo hicimos --> de otra manera, dale cancelar ahí por favor, salte, dale cancelar ahí también, dale cancelar, --> vete a la parte de configuración del input, vete donde dice esquema, esquema y ahí está --> un combo vos, expande el combo vos por favor, no el combo vos del lado, el del ladito, --> donde dice build in, vete al repositorio, dale yes, vas a buscar el, espera que cargue un --> me viera mejor, entra a file delimited, entra a producción, entra metadata, escoge metadata, --> dale click en metadata, yes, revisemos, editar esquema por si acaso ve si sobre escribió o qué, --> es de al ladito, es de al ladito, ese de ahí, sí, te guste para ver, --> ok, te agregué este row uno, seguramente pasó algo aquí, vayas en el input column, --> en el input column de operaciones, vayas a operaciones y donde tiene la función suma, --> el input column tiene que ser total porque como cambió el esquema de entrada ya le cambia, --> es producción, perdón, producción, ejecute para ver, total temporada, no creo que no lo --> cambió, un momento, entra al te agregué este row, vayase al te agregué este row 2, --> vayase al HDFS input un momento, al 2 ese que está ahí, dele editar esquema un momento, --> editar esquema, ok, esta temporada está bien, está bien, ok, muestre nuevamente el --> run para ver dónde lo está marcando, el run, por favor, run ese que está ahí, dice, --> incompatible input con output, vamos a confirmar, vayase al te HDFS output un momento, --> el output 1, el esquema por favor, eso está bien, ok, vayase al input 1, --> revisamos para ver, ahí está bien, no le veo, dele editar esquema un momento ahí, editar --> tiene que estar ahí, cambio la flow por favor, pero claro, ese equivocó, fue la herramienta, --> porque la herramienta, no sé por qué, le clic ahí, le da flow y le da enter, --> ah perdón, dele cancelar, dele nuevamente editar, que cogimos la opción view nada más, --> chain, vamos ahí donde dice flow ok, yes, intenta ejecutar para ver, vayase al te join por --> favor, dele editar esquema al te join, editar esquema y falta algo, falta una definición ahí, --> vaya, agregue, dele cancelar ahí, cancel y agregue una nueva variable en el key de fiction, --> una nueva y listo y compare el total temporada con máximo temporada, dele click ahí, --> máximo temporada, entra ahí por si acaso, muéstrame el input 3 por favor, input 3 y muéstrame el input 4, --> muéstrame el output 2, para finalizar muéstrame el te join, en teoría, --> si, dele ejecutar nuevamente, en teoría no sé por qué, no le marco, bueno, --> aunque debió hacer, creo que va a hacerlo también, --> está marcando cero, significa que no hay, muéstrame ese, muéstrame ese, el input 2 por favor, --> el input 2 y muéstrame el esquema del input 2, eso está bien ok, muéstrame el target row, --> no, ahí no es suma, ahí es máximo, el max, enter y ejecute para ver, --> pero aún así, cuando no tenía esa variable, debió darle un registro, pero no sé por qué no le dio, --> dice solito como si estuviese, pobrecito, vamos a ver, --> no, hagamos algo, ahora lo reviso porque no sé por qué le está dando cero, es decir, --> ahí el inner join que tienes ahí, es decir, los registros de arriba no cuadran con los de --> abajo, no hay match, ahora revisamos para ver, ahora en el break yo me cuento su máquina y --> eso para ver qué pasó, es raro, bueno, listo, hagamos un pequeño break de 10 minuticos y --> volvemos en 10 entonces, listo, voy aquí a, volvemos en 10 entonces, volvemos a la única, --> bueno, 12 y 40 en cada sollo, ya venimos, bueno, continuamos, en cuanto a error Martina, --> por qué no te estaba dando resultado, no, quite el T-post job, póngalo entre el T-post job, --> si, ese T-post job es el que está, no, te da clic en el centro, clic derecho, desactivar post --> job, listo, que venga, le digo cuanto Z, perdón, cuanto Z, le da clic derecho, desactivar --> world to job, listo, ejecute para ver y vamos a los archivos que nos creó, --> a ver si ejecute para verla a ver, un momento por favor, perfecto, váyase ahora al browser, --> rf5, listo, ahora el que se llama, cuál sería, máximo 10 un momento y veamos el orden que está --> guardando ahí, dale descargar, ándale un momento a ver, --> ahí tiene, listo, el orden está así, está bien, ahora váyase a buscar el otro, el que no es el máximo, --> sino ese que está ahí, descarguenlo un momento a ver, es el primero, ese que está ahí, --> no veo el error todavía, váyase nuevamente al T-Join, al T-Join nuevamente para verificar --> la condición porque los archivos parecen estar bien, váyase al talent bit data un momento y --> le doble clic al T-Join, al T-Join nuevamente, al T-Join, row 7, stain name, --> qué cuestión tan rara, para revisar, déjeme ahora lo intento ver en más detalle a ver si, --> dale clic ahí nuevamente para ver, intento ver, listo, season, con season de acá, --> intento ejecutar para ver, activar current job, ahí está entrando bien, es decir está leyendo --> bien los registros pero el join lo está haciendo mal, lo que está dando 0, muestre el --> output del 2, el esquema, doble clic ahí un momento, voy a editar el esquema un momento, --> listo y el otro también, ya creo que sé cuál es el error, váyase al input 2, --> al editar el esquema, muéstame el esquema ese, ok listo ya, dale ok, váyase al --> aggregator row, voy a editar esquema, no ahí está bien, no está bien, está bien, --> decía que estaba mal, bueno sigamos y vemos para ver, a más tarde verifico para ver en --> detalle a ver qué pasa, bueno sigamos entonces, listo ahora revisamos bien, --> vamos a agregar aquí un componente en este mismo Jot, al final lo vamos a llamar T-STAT --> de Statistic Stack Catcher, ya vimos el T-Lock Catcher, este es T-Stack Catcher, --> este stack es de Statistic, enter, lo voy a colocar acá abajo, --> conecta este señor a un T-Map, --> agrega un T-Lock Row, --> esto lo que voy a hacer es verificar y me va a permitir analizar los tiempos de respuesta --> por componentes, digamos quieres verificar a ver cómo tú y yo y cuál es el tiempo de --> respuesta, de pronto en qué componentes hay cuello de botella, entonces este componente es --> muy bueno para esa parte, vamos a cruzar aquí a unir el T-Catcher con el T-Map, --> aquí con el T-Map y el T-Map lo unimos con el T-Lock Row, también pude haber hecho --> cambiarlo a un T-File delimited, pero en este caso lo voy a dejar en T-Lock Row, --> salida y lo voy a llamar salida estadísticas, estadísticas, --> va al T-Map y vamos a definir las siguientes columnas, estas son las columnas que tiene --> para analizar los tiempos de respuesta, agrega el PID que sería el identificador del proceso, --> entonces lo voy a mandar para este lado, agrega el moment, sería el tiempo en que inicia, --> agrega el mensaje, el mesas tie y el duración, ya digo cuáles son, PID, moment, mesas, --> mesas tie y duration, que sería esos cinco, bueno pude haber agregado más pero simplemente --> para ver, nada más esos cinco elementos, cinco componentes lo vamos a agregar, el PID, --> moment, mesas, mesas tie y duration, perfecto, le damos aquí ok, --> y ahora usted decide qué componentes desea analizar las estadísticas, entonces para cada --> componente en talent, por ejemplo voy a en el input uno, le voy a dar doble clic --> y todos los componentes de talent van a tener, normalmente están en advanced setting, --> una opción que dice te está cache estatística, si usted chulea ese señor significa que él va --> a analizar las estadísticas de ese componente, es cual los componentes que usted quiera, --> yo voy a coger este te agrega el primero, advanced setting y chuleo también, --> te está cache estatística, voy a coger el input dos y le doy te está cache, aquí todos los --> componentes van a tener esa característica en talent, entonces tú le de chuleas y escoge --> los componentes a los cuales tú deseas analizarle las estadísticas, perfecto, --> esto ya hiciste esta configuración ya, listo bien, ahora en el job tú vas a escoger qué --> componentes deseas analizar las estadísticas, vas entonces a cualquier componente, en este --> caso yo coge el input y en la sesión advanced setting todos van a tener un te está cache --> estatística, yo chuleo aquellos componentes a los cuales yo quiero analizar las estadísticas, --> en este caso yo escogí el input, escogí el te agrega este row, advanced setting, --> lo chuleo y el input dos, advanced setting, lo chuleo, significa que para esos tres componentes --> que he chuleado y que he elegido solamente van a usar las estadísticas para esos tres --> perfecto, si está mal, vamos a ejecutar nuevamente --> lo que usted quiera, yo cogí el input uno, el te agrega este row uno y el input dos, --> y listo, aquí le muestro las estadísticas, --> vamos a colocarla acá más o menos, ahí tengo todo eso que está ahí, está en milisegundos, --> cuánto demora, bueno, ahí debí colocar un momento y agrego porque no me alcanza a ver, --> un momento, porque no sé qué componente está hablando, me tocaría agregar --> mesa duración, un momento, creo que es context, un momento para ver porque no sé qué componente --> está hablando, listo, ejecutar, listo, agreguenle, sí señor, al tema le agrega origin, --> en el tema como salida agrega origin para saber quién es el componente que deseo, --> origin y ahí sí me va diciendo a qué componente se refiere, --> porque antes no lo tenía, antes me mostró de manera genérica y ahora debió aparecer acá, --> al principio, las estadísticas, aquí está, --> aquí está, ahí están los nombres de los componentes, entonces cuánto demoró, qué estaba haciendo, --> vamos a ver cómo me salió a mí, --> por ejemplo, el T aggregator row 1 demoró la ejecución en 7 mil 141, o sea, 7 milisegundos, --> 7 segundos, perdón, y así sucesivamente le está mostrando ahí cuánto demoró cada uno, --> eso nada más que todo es para analizar cuellos de botella, cuando tienes un --> yo que de pronto tenga algunos tiempos de respuesta muy altos, te puede servir esas --> estadísticas para analizar cuál es el componente que más está demorando y ver para ver si cambia --> el componente o cambia la arquitectura que tengas de tu yo. --> Bueno, creo que aquí dejamos esta parte y seguimos con otro ejemplo entonces. --> Definamos otro job, vamos a llamarlo job, crear job, job, --> análisis, --> underscore, nba, análisis, underscore, nba, job, análisis, nba. --> Bien, veamos entonces lo que queremos hacer, en primer lugar, los archivos para este --> job se encuentran en S3, vamos a descargar primero los archivos, pero lo vamos a descargar --> siempre y cuando ya el archivo no esté, o sea, si el archivo ya está en Hadoop, no lo descargamos, --> si no está, en ese caso lo descargamos, esa es la idea que vamos a hacer entonces. --> Los archivos a descargar están metidos, ya les voy a decir, en un bucket, están metidos en --> el bucket llamado Noble Pro, dentro del bucket, en un bucket al final viene siendo la carpeta, --> hay una subcarpeta que se llama TIN y dentro de TIN hay tres archivos que se --> llaman exactamente igual de esta manera, un momento que no me copió, --> ah, es que estoy con un brose ahora, bueno, ya le digo los nombres, TIN, --> vamos a buscar un archivo que se llama nba2004shot.csv y aquí tengo entonces 2005 y 2006. --> Claro que con este archivo la nba registra, pero una cantidad de cosas de todos los jugadores, --> este listado tiene los tiros realizados por, bueno, evidentemente ahí es una muestra muy --> pequeña, pero la muestra real es que ellos guardan, por ejemplo, todos los tiros que --> ha llegado alguien en toda su historia. Entonces aquí va a aparecer, por ejemplo, --> Kobe Bryant, ese Kobe Bryant, más de todos los tiros de toda su vida y organizado por año, --> por mes, si falló o no falló, en qué distancia lo hizo, o sea, son unas estadísticas --> sumamente detalladas. Vamos a lo siguiente, ahora el problema que tengo es que los archivos --> no los tengo en Hadoop. Lo primero que voy a hacer es subir los Hadoop, pero con la condición --> de que solamente los voy a subir siempre y cuando el archivo no esté en Hadoop. --> Entonces para esto voy a analizar lo siguiente, vamos aquí a los ejemplos S3, --> S3, y el descargar archivo S3, --> S3, voy a copiar toda la conexión esta que tengo del subir archivo me sirve --> y la voy a pegar en mi nuevo job, en el S3, voy a pegar el que se llama yo descargar archivo --> S3 subido. Los componentes son los siguientes, primero quiero descargar siempre y cuando no esté, --> entonces aquí hay un componente que se llama THDFS, agréguelo por favor, THDFS exist. --> Bien, en este caso voy a hacer tres de este señor porque, bueno, primero hago uno y después --> completo uno, porque queda más fácil completarlo y después copiar y pegar. --> Voy a copiar, agregar un componente que se llama TS3 GET, --> voy a tener un THDFS PUT para colocar el archivo que descargué, --> y voy a tener acá y lo voy a cambiar de forma, aquí un TFILE DELETE, --> o sea que borre el archivo que descargué en la máquina porque ya lo tengo dejado, --> TFILE DELETE, ya los cinco componentes que necesitamos. --> Vamos a conectar el THDFS EXIST, clic derecho, con el disparador RUNIF, --> al S3, disparador, no me digas, el S3 lo conectamos entonces al HDFS PUT, --> con COMPONENT OK, y el PUT lo conectamos al TELI con COMPONENT OK. --> Configuremos las conexiones del S3 primero, vamos aquí al S3 y decimos que usar conexión --> existente, ya la tomamos por defecto. Vamos a las conexiones de los HDFS y le decimos --> usar conexión existente, y esta sí que hay que seleccionarla porque aunque haya una, --> hay que seleccionarla, y la del PUT también, la del PUT usar conexión existente, --> y este señor HDFS conecte. Perfecto, empecemos configuración, vamos con el HDFS EXIST, --> bueno vamos a escoger aquí una ruta para que sea más sencillo, después de cualquier archivo, --> después le cambio el nombre, después de la misma producción, --> ah no, aquí me toca colocar, carece de sentido, --> a primero el directorio, bueno el directorio, aquí perdón, aquí, ya, en el directorio por --> favor vamos a, ya tenemos la ruta, entonces la habíamos definido en un contexto el día de ayer, --> por favor váyase al job, a los contextos e importa por favor el contexto que está --> a nivel del proyecto, ok aquí, vamos ahora si nuevamente al THDFS EXIST y quito las comillas --> dobles que están en el directory porque va a ser referencia a una área de contexto, --> y si es de contexto nos toca definir entre comillas dobles, entonces voy a darle aquí --> control espacio y voy a correr ruta raíz, --> ahora la ruta vamos a buscar este archivo que se llama nba así todo la nba mayúscula --> underscore 2004, underscore shops, underscore .csv, exactamente así como está, --> y la pegamos en el relative.pub o el file name según la ruta relativa, --> vamos a ver cómo quedó esta parte, --> perfecto, listo, bueno, confiaremos la conexión entonces, vamos aquí, --> vamos a la línea que conecta el hdfs con el tsc3, doble clic a línea esa, --> doble clic a la línea, no le irá la línea, --> ahora cuando es condición tiene que ir a la perspectiva online y aquí esto antes del --> si está un hdfs exist, vayas en la perspectiva online y busque ese componente, aquí lo tengo, --> hdfs exist 1, expande por favor ese componente en la perspectiva de online, --> y aquí están varias variables para utilizar, está error mesas, está file exist, --> y está file name relative path, entonces tome ese file exist y lo suelta a este lado, --> la condición se debe cumplir o sea pregunto que debería entrar cuando existe o cuando no --> existe, cuando no existe es para descargarlo, entonces como esto es negativo, para negar en --> java leerás el símbolo que es admiración, dale admiración por favor para decir que va a --> ejecutar eso siempre y cuando sea negativo, o sea que el archivo no exista, perfecto, --> listo, te quedaría de esta forma por si acaso que alguno que están haciendo esta parte, --> no lo ha terminado, quedaría más o menos así, nada más le agregué este símbolo de aquí, --> y eso está así ya, --> vamos al ts3 get y le decimos el bucket donde va a descargar eso se llama noblepro, --> noblepro, de programación, y la key, vamos a copiar el nombre de archivo que lo tengo acá, --> que se llama nba, voy a copiar este archivo y lo voy a pegar aquí en la key y le agrego que --> ese señor está en la carpeta team, debe quedarte más o menos así, ya te lo muestro, --> así debe quedar, --> que lo busque en la carpeta team, bueno su carpeta más que todo, este archivo, bueno parece que ya, --> perfecto, aquí le voy a decir dónde lo va a descargar, entonces borro este señor, --> le doy context, ah todos lo teníamos verdad, se me había definido, sería, --> abro comillas dobles, c2 puntos, slash temporal, y lo voy a llamar exactamente igual como el --> original para no perderme, o sea que aquí la ruta puede variar, puede variar la ruta, --> en el caso mío temporal, o hagamos algo diferente, hagamos algo diferente, --> hagamos algo diferente, desen cuenta que estoy colocando una ruta absoluta, --> deje la ruta nada más sin el temporal, deje la ruta así, le quedaría así y él la va a agregar --> en el rupado que tiene el proyecto y me despreocupo de la ubicación, o sea que déjela así, --> ahí lo coloca ese de una ruta relativa y le va a colocar justamente donde el proyecto se vaya --> a ejecutar, perfecto 2004, ahí lo que va a hacer es eso, --> en el PUT, listo, le voy a decir directorio local, --> ahora me complico la vida, listo, NA 2004, CCV, nada más quedó así, listo, --> cuando que ahora me salga, listo, cuando que me salga error ahora, vamos a lo siguiente, --> vamos a ver si me sale error, voy al PUT, voy a copiar el nombre del archivo que estoy descargando, --> directorio local lo voy a dejar vacío porque va a tomar por referencia la ubicación en --> que esté el job, el directorio HFS, le borro las comillas, le doy context, context ruta raíz, --> este create lo voy a dejar ahí, porque create, porque la idea es que el archivo se descargue --> nada más una sola vez, por lo tanto si se carga una vez y me sale error por create es --> porque hay un error en el sí, algo hice malo, listo y ahora en el file max, la máscara, --> voy a buscar el archivo, voy a agregar aquí un elemento, no le agrego ruta nada más, --> vamos a ver si funciona así y el nuevo archivo se llama también así, --> nba under score 2004, listo y por último en el delete, vamos a pegar nada más el --> nombre del archivo porque supuestamente lo va a buscar en la ruta en que esté el proyecto, --> me preocupa nada más el PUT que el local va vacío, no sé si ese componente me causará --> error, bueno creo que ya nada más hay que ejecutarlo y ya listo, vamos a ejecutarlo --> para ver, estoy en análisis nba, ejecutar, primera vez que voy a ejecutar, debería subir --> el archivo, descargarlo, perdón, primero verificar si está, si no está lo descargo --> y lo pongo en hadut y después borro el archivo como tal, --> bueno está ejecutando, listo, bueno ahí no lo encontró, está descargando, ahí va el true, --> no le encontró el PUT, no lo encontró porque la ruta absoluta de este local --> debió, este no lo encontró aquí, --> no me salió el plan como quería, --> me tocaría colocar un directorio local, --> espere un momento e intento hacer algo aquí para no colocar la ruta absoluta, --> o sea confirmemos algo, este archivo tuvo que haber quedado en la ubicación donde --> ejecuta los jobs, espere un momento a ver, ese big data está metido aquí en archivos de programa, --> talent big data, --> workspace, local project, process, procesamiento, --> listo, no, ahí no, workspace, local project, --> qué raro, --> este archivo debería estar aquí, un momento, está interesante hablar, si no la colocamos, --> la colocamos absoluta y donde creo se descarga, --> bueno no me salió el tiro como lo quería pues, es que vean, es que seguramente lo que pasa es --> que ese TOS está en archivos de programa en Windows y no va a dejar escribir ahí, --> creo que ese es el problema que tiene, qué pena, me va a tocar colocar la ruta completa, --> sería C2 puntos, --> C2 puntos, --> Slash temporal, Slash temporal, Slash NBA, --> sí, aquí tuve un problema que seguramente es por el permiso de donde está la carpeta, --> permítanme y lo pruebo para ver, --> el local directorio lo voy a mandar a temporal, --> voy a ejecutar aquí para ver, --> detectó que no estaba, lo descargó y lo subió, voy a verificar para ver, --> ahí está, NBA 2004 shock y debió borrarlo de acá, es temporal, --> sí, listo, --> en setting, --> bien aclaro, no funcionó, la idea de la ubicación relativa es porque intentaba --> crear un archivo en archivo de programa y por seguridad que en Windows no lo dejó crear ahí, --> a ver, vamos a ver un par de errores, Bernardo veo que tiene errores, vamos a ver, --> bien, veamos por qué no existe, por qué sale ese error, porque intentó borrar un --> archivo que no existía, si no quieres que ese error salga, dale por favor doble clic en --> file deleted y ahí mira donde dice file on error, sí, viste donde dice file on error, --> como está chingado el que hace manda un error, pero por qué no lo borró, --> vete a tu get por favor, a tu TS3 get doble clic, a ver si la ruta ahora, --> cómprate la ruta ahora del ten, cómprate la ruta completa y la pegas en el file deleted, --> cómprate todo, cómprate todo un solo y lo pegas allá en el file deleted, --> todo completo porque sé que quiere borrar, listo, ahora haz lo siguiente, --> vete a tu Hadoop y borrate el archivo nba, borralo, ahí está, sí, ese que está ahí, delete, --> ejecuta, vamos a ver, como es la primera vez, vamos a ver, ok, ok, listo, vete a tu, --> por favor, vete a tu, sí, al Hadoop, dale F5 ahí y ahí está, ok, vamos a lo siguiente, --> ahí seguramente borró el temporal y ahí está, lo borró, vuelve a ejecutar tu job y no --> debería descargarlo, vale, ejecutar nuevamente run, esto ya empezó, date cuenta que ahí está --> false, te marcó false leaf, significa que no siguió el flujo normal hacia arriba porque ya --> lo encontró, bueno, quién más tiene errores, a ver, listo, Alejandro, vamos contigo, --> Alejandro, vamos a ver qué pasó, esto cargó, un momento que no cargó la imagen, ahora sí la --> cargó, veamos el error que tiene, no match file, listo, vete a tu ts3 get, por favor, --> ts3 get, doble clic, por favor, listo, listo, estamos dando temporal, vete a tu thdfs put, --> el put y ahí es donde dice local directory, apúntale a ten, dale clic ahí en el botón que --> está al final, el botón que está en la misma línea, ahí está, no, pero nada más la carpeta, --> la carpeta, nada más la carpeta, tengo, nada más vamos a colocar ahí la carpeta, --> déjalo borrar hasta el slash, ejecuta, bueno, ahí ya está preguntando si está en hadut, --> ahí no está, ok, listo, vete, debería estar ahí, listo, vuelvelo a ejecutar para ver, --> no debería descargarlo, ya voy, un momento, vuelvelo a ejecutar un momento y ya llego ya, --> está accediendo, ahorita ahí está false, no sigue la ejecución normal, --> ¿Quién me habló por ahí? Héctor, vamos contigo Héctor, vamos a ver qué pasó, --> no false, que existiera, veamos la condición, vete la condición por favor, --> ah, porque ahí es negarlo, niégalo, es decir, para negarlo vete a la primera columna antes --> del paréntesis que inicia y colocas un signo de admiración, no, ¿eso es un pipe o --> admiración? ejecuta para ver, sí, te pareció ver, pareció un pipe, déjalo, si no, --> ¿Qué error? Ejecuta para ver, porque a anteriormente estaba preguntando si existía y no existía, --> ahora si no existe, debería entrar en el if, vamos a ver, ahorita ahí está true, --> o sea no existe, ok, lo está descargando, lo está subiendo y listo, vete a, claro, --> tenía la condición invertida, ahí está, nada, porque lo ahorro exactamente, listo seguimos, --> ya es mi vamos a ver qué pasó --> ahora sí ya cargo ahí está diciendo porque tiene un doble comilla en el --> file max ese file más tiene doble comillas tiene dos comillas al inicio --> borre una de las comillas y tiene unas comillas al final doble comilla al --> final de ese mismo file max quito una comilla lo mismo lo tiene del otro lado --> tiene dos comillas que inician listo entra ahí --> ejecute para ver pues nos vamos para ver no listo no está ok y el delete --> vayase al file delete por favor file delete doble clic ahí ahí falla --> porque el archivo doble control vayase a su ts3 get --> y la ruta que va la ruta que va a borrar del es la de file temporal copia la --> ruta de toda la ruta que tiene ahí toda la copia --> y la pega en el file delete pégale ahí porque listo ahora haga lo siguiente --> vayase a su browser de hdud del f5 y borre el archivo nba --> para volver a ocultar para que nos borre todo listo listo delete --> y ejecute para ver perfecto ahora sí debe estar todo bien nos veamos lo --> siguiente ahora me tocaría hacer tres flujos significa que este señor lo --> voy a tomar --> este señor lo voy a copiar --> una vez sí --> ah no me copió con esto a colocar más sí dígame los tres al mismo tiempo no --> porque el componente borra de uno en uno --> es por la forma del componente voy a copiar nuevamente este señor --> que me lo copió también control c control v sí y ahora sí lo toma --> pero es que me está copiando los --> no me está jalando el yo así --> el primero pernesto vamos a ver el mes haya tenido verdad que sí no había --> visto bien --> vamos a ver --> a parece ser que no estás lo guiado al s3 de este momento a ver vete al al --> tse 3 al que es perdón tse 3 que está el doble clic --> al esto ahí en el bóquet en el que es tim porque también tiene la --> carpeta la subcarpeta tim equipo de inglés --> tim después de la comida doble es la exactamente intenta ahora para ver --> perfecto ahora sí bueno copiamos este señor y de --> rapidez vamos a copiar el archivo de entrada se va a llamar vamos a --> cambiar donde dice 2004 a 2005 --> en el get vamos a cambiar nuevamente el 4 por el 5 en los dos lados --> aquí debía ser una verdadera contexto para que sea más sencillo pero ya --> en el puc cambio todo lo que tenga 2004 por 2005 --> y en el file delete cambio todo lo que tenga 2004 por 2005 --> nuevamente copia todos los componentes y va a copiar de 2004 a --> 2006 es intento pegar este señor por acá --> que me devuelve bueno aquí --> aquí le dañé la presentación pero ya bueno aquí voy a coger y cambiar todo --> lo que tenga 2004 por 2006 todo lo que tenga --> 2004 por 2006 --> en el put lo que tenga 2004 por 2006 --> y el delete todo lo que tenga 2004 por 2006 --> aquí pude haber hecho un programita aquí un pequeño script que me leyera --> el archivo y mandaba por parámetro el s3 el valor del archivo que está --> en el s3 pero me quedaba como eran dos archivitos me quedaba creo que --> más fácil de esta forma que está escribiendo el script --> allá donde iba bueno bien en primer lugar para que usted quiera que se --> ejecute para le lo de mi muestro aquí por defecto se ejecutaría secuencial --> que fue la pregunta que me hizo ahí que se me escapó el nombre --> que aquí de la forma tradicional ejecutaría primero este primero después --> ejecutaría este y después ejecutaría este si quisiera que esto se ejecutara --> que es un buen caso para ejecutarlo de forma concurrente entonces yo voy por --> acá le digo esta le digo multiteat pero espera que hay un momento que --> para el caso en particular no me va a servir yo digo por qué --> me parece súper el caso que estamos analizando --> ya terminamos lo hizo imagínese lo siguiente ahora no lo agregué usted --> allá lo voy a hacer yo acá yo necesitaría ahora 3 hdfs no lo usted --> voy a hacerlo acá 3 a t hdfs input uno por cada archivo porque los voy a --> unir ahora es lo siguiente voy a tener este señor acá --> este señor aquí voy a tener entonces 1 2 y 3 --> voy a ver no lo a usted acá porque así voy a unir esto con un te y unir que vivimos --> alguna vez y vamos a poner que vamos a dar aquí un telocrop voy a mandar aquí fila --> a usted y uní que espera para que me entienda la idea de por qué para este --> caso sería interesante analizar pero con esta con esta versión de esta --> revienta no me da para solucionar el caso y lo siguiente supongamos ahora --> que yo le diga a estos señores que se ejecuten de manera concurrente aclaro --> redefino no recuerdo la definición existe concepto de paralelismo significa --> que hay cuatro subyorks si cuando se aplica el concepto paralelismo cuando --> los cuatro subyorks se ejecutan exactamente al mismo tiempo eso --> depende directamente de que tan ocupado esté la máquina cuando hay --> concurrencia cuando de los cuatro se me ejecutan 2 3 no se ejecutan --> al tiempo eso es ese los conceptos pero veamos lo siguiente si si aquí --> aplicamos concurrencia vamos a suponer que él ejecuta primero este subyork --> este subyork que va a pasar que va él espera que estén descargados los --> archivos en hdud y no va a funcionar vamos a suponer que ejecuta este yo --> de aquí y después ejecuta este yo de acá listo va a encontrar este --> pero los demás no va a encontrar entonces que sería interesante --> primero no podría tampoco unir los tres subyorks cuando terminen por --> ejemplo yo nada más puedo hacer lo siguiente este es un subyork aquí --> este es un subyork acá --> ya no me deja porque yo nada más puedo conectar un subyork con un subyork no tres --> subyork al mismo no podría entonces aquí si hay una herramienta --> interesante una bueno no está aquí pero en el en el otro si está me --> recuerda cuando de pronto si lo alcanzamos la caso mostrar yo quisiera --> que estos tres se ejecutan al tiempo y después que se ejecuten los tres al --> tiempo mandar a ejecutar esto entonces aquí hay un componente --> hay un componente --> que se llama así se llama que es súper súper interesante se llama --> para le para le lisaís entonces este para el size conectaría los tres --> elementos esto de aquí y después del té para lisaís conecto este subyork --> o sea que estoy diciendo oye estos tres ejecutarlo en multitarea cuando --> los tres hayan terminado entonces si empieza acá entonces es interesante ese --> ese y me solucionaron el problema este de aquí no lo podía hacer porque este --> componente no está aquí si me toca secuencial ni modo --> secuencial porque este subyork depende de los tres de arriba entonces me --> toca secuencial porque ni modo no tengo herramientas entonces con esto --> este subyork con este de aquí este subyork con este de aquí --> con estos tres por favor y agregue tres input tres HDFS input por favor y les --> coloca la ruta bueno en primer lugar pues usa la conexión existente a --> todos --> y aquí agrega búscalo por favor cada uno de --> ellos perdón es que no están no los va a --> encontrar entonces voy a encontrar voy a buscar cualquier archivo y después lo --> ya había descargado uno entonces voy a tomar ese que descargué y le --> cambió los nombres en el dos lo cambió 2005 --> tome el primero que descargaste es para el primero y después copia la ruta y --> le cambias 2004-2005 --> si en el otro le cambia de 2005-2006 --> bueno permítame y te confirmo --> vamos a descargarlo aquí mismo para ver desde aquí vamos a descargar este que --> no sé cómo está el formato una pregunta de todos modos --> voy a descargar y --> bien sería coma efectivamente y tienen encabezado efectivamente entonces me voy --> al nuevamente al píctata --> al píctata lo voy a hacer entonces --> y en el input le colocó que es separado por coma y tiene un híder de uno separado --> por coma --> híder de uno --> bueno me voy al input 2 --> coma y híder de uno y al input 3 --> me voy entonces hacia coma y híder de uno --> aquí este señor me está marcando algo raro --> no tiene esquema todavía le estoy llevando nos faltan los esquemas de entrada --> los esquemas de entrada no hacen falta entonces aplicamos el truco --> descargase por favor el archivo que ya subió a hadu del primero que ejecutamos que se llama --> nba 2004 shop para tomar la metadata del 2004 que es la misma para 2005 y 2006 es la misma --> la misma columna en pocas palabras descargase por favor entonces de hadu nba 2004 shop --> bueno y entonces ahora vamos al truco vamos aquí y definemos una metadata --> aquí en el delimited crear archivo delimitado vamos a llamarlo nba --> next y buscamos el archivo que tuvo que haber quedado en descarga seguramente descargas --> aquí está nba shop y el señor se encuentra separado por comas y tienen cabezados --> nba llamar al archivo y tienen cabezados y separado por coma --> perfecto listo damos aquí next --> creo que demoro más y exporto el metadata y después lo vuelvo a importar --> vamos a darle aquí finish mejor y lo hacemos de la segunda forma finish --> vayamos a la confesión del input 1 y donde dice esquema le damos click en el combo boss que --> está en build in finish repositorio y darle click ahí en el botoncito que está al --> del text file que genera y busque por favor el archivo delimitado nba y coge la --> metadata nba y automáticamente la agrega nba metadata ok y la agrega yes --> hace exactamente lo mismo con los tres elementos siguientes que sería 2 perdón input --> esquema vamos aquí repositorio --> listo --> file delimited --> nba metadata ok --> y me faltaría el h3 --> esquema repositorio --> nba metadata ok aunque sale el error aliso que la conexión no lo he hecho aquí --> bueno aquí lo voy a guardar si ya la configuró intenté ejecutar para ver si no tenemos ningún error --> y ese archivo está el edad 20 grande si está si todo está bien no tiene error mándelo --> a un a un archivo nba porque si no demoramos más en mostrando esa salida y vamos a mandar --> hdfs output porque si no demora es muy grande el te y un hilo uno con el hdfs output separó por coma --> listo conexión existente con poner list separamos por coma --> y esta vez comprima los datos por favor e incluye un hider porque creo que ese archivo --> a pesar de que no tengo mucho espacio allá en ese y el nombre lo voy a llamar entonces nba underscore --> nba underscore unido --> a ver aquí --> sí para que no pesará tanto gracias bueno voy a darle si después se desconfunde uno --> sin extensión nba unido porque se condenó a pesar yo tengo mucho espacio voy a detenerlo --> un momento y lo voy a volver a ejecutar ya terminó --> bien con esto voy a agregar un nuevo componente que pueda ayudar a solucionar --> un par de problemas en pocas palabras voy a ver cuánto quedó este señor nba unido --> nba unido el original los cuya quisi cumplió bastante --> cumplió bastante porque cada uno pesaba 36 megas y el unido quedó en 9.86 megabytes por segundo --> bueno vamos entonces bueno dejamos hasta aquí un momento y vamos a almorzar y volvemos --> entonces en una horita ok para descansar un momento y volvemos en una hora para terminar --> este ejemplo y agregar un último componente aquí que tengo para el día de hoy entonces --> dejamos hasta aquí y regresamos en una hora listo bueno buen provecho