Apache Hadoop: Crear aplicaciones YARN. Comunicaciones

Crear aplicaciones YARNEn este artículo se va a mostrar, a un alto nivel, cómo crear aplicaciones YARN de Hadoop. Como comentaba en el artículo de introducción a YARN se trata de una nueva implementación mejorada de la arquitectura MapReduce disponible desde la versión 0.23. Os recomiendo leer la introducción a YARN para entender los conceptos que aquí se tratan.

Antes de entrar en detalle decir que cualquier aplicación que se haya creado anteriormente es perfectamente ejecutable en este entorno y, para nuevas aplicaciones, se pueden usar nuevas funcionalidades como las que se van a ver.

Conceptos y flujo

El concepto general es que un cliente (‘Application Submission Client) envía una aplicación al gestor de recursos de YARN (ResourceManager). De este modo, el cliente se comunica con el ResourceManager, haciendo uso del método ClientRMProtocol#getNewApplication como se verá más adelante, para adquirir una nueva aplicación (si es necesario) con su correspondiente identificador único (ApplicationId) y posteriormente enviar dicha aplicación para se ejecutada mediante el método submitApplication de la misma interfaz.

Como parte de la llamada submitApplication, el cliente debe proporcionar suficiente información para que el ResourceManager pueda cargar el contenedor o entorno de ejecución de la aplicación (ApplicationMaster). Se tiene que especificar diversa información como los archivos ejecutables (jars que contengan la lógica de negocio) que tienen que estar disponibles para que la aplicación se ejecute correctamente, sus correspondientes parámetros por línea de comandos en caso de ser necesarios o incluso las variables de entorno Unix que se deben establecer entre otras cosas.  Esto, efectivamente, es necesario para describir el comando Unix del proceso  que debe ser puesto en marcha por el ApplicationMaster.

Una vez se hayan realizado los pasos anteriores, el ResourceManager pondrá en marcha, según lo especificado, el ApplicationMaster en el contenedor asignado. A continuación, el ApplicationMaster esperará hasta comunicarse con el ResourceManager. Primero, necesita registrarse con el ResourceManager y, para completar la tarea asignada, tiene que solicitar y recibir los contenedores de ejecución. Después de esto, el ApplicationMaster comunica al NodeManager que ponga en marcha el contenedor para esta tarea haciendo uso del ContainerManager#startContainer. Como parte de esta puesta en marcha, el ApplicationMaster tiene que especificar el contexto (Container Launch Context) con el que tiene que cargar la información que el contenedor posee (detalles de los jars, variables de entorno, etc.). Cuando esta tarea esta completa el ApplicationMaster se lo hace saber al  ResourceManager enviando la correspondiente señal (AMRMProtocol#finishApplicationMaster).

Mientras todo lo anterior se lleva a cabo, el cliente puede monitorizar el estado de la aplicación preguntando al ResourceManager o directamente al ApplicationMaster si este soporta dicho servicio. Además de esto, el cliente puede matar la aplicación a voluntad en caso de ser necesario haciendo uso de ClientRMProtocol#forceKillApplication.

Protocolos de comunicación

Los protocolos que hacen posible las comunicaciones descritas en el apartado anterior son las siguientes:

  • ClientRMProtocol: Comunicación entre cliente y ResourceManager. Este protocolo sirve para que el cliente pueda comunicarse con el RM para realizar distintas operaciones como obtener el estado de la aplicación o cancelarla.
  • AMRMProtocol: Comunicación entre ApplicationMaster y ResourceManager. Este protocolo es usado para las operaciones de registro entre el AM y el RM así como para solicitar al Scheduler los recursos necesarios para completar la tarea.
  • ContainerManager: Comunicación entre ApplicationMaster y NodeManager. Este es usado para que el AM pueda comunicarse con el NM para realizar diversas operaciones como arrancar y parar los contenedores u obtener las  actualizaciones de estado que estas puedan sufrir.

Crear aplicaciones YARN

Para poner en práctica lo descrito se va a crear una simple aplicación YARN que realice el proceso descrito en este artículo. Los códigos fuente se van a separar según los elementos y roles que participan. Esto se verá en un tutorial separado (el siguiente) para que éste no resulte demasiado extenso.

Happy Minds!!!

Share on FacebookTweet about this on TwitterShare on LinkedInShare on RedditShare on Google+Digg thisShare on TumblrPin on PinterestBuffer this pagePrint this pageEmail this to someone