Hace poco explicaba que es y cómo crear nuestro primer cluster en Amazon AWS EMR. En este post, quiero explicar como poder trabajar con nuestro cluster ya sea desde los Jupyter Notebooks en EMR o desde aplicaciones como Zeppelin.
Jupyter Notebooks
Quizás las primera herramienta con la que podemos trabajar en EMR una vez tenemos lanzado un cluster, son las notebooks de Jupypter y Jupyter Lab. Son unas herramientas que vienen por defecto, y que tienen la ventaja de que los notebooks que desarrollemos, se almacenan en S3, por lo que podemos trabajar con ellos desde diferentes clusters.
Cuando estamos dentro de nuestro dashboard de EMR, podemos ver a la izquiera un menú con diferentes herramientas, entre ellas apaece la opción Notebooks, a pesar de que me he encontrado que no en todas las regiones. Es por ello que después de hacer algunas pruebas decidí trabajar con la región de Irlanda eu-west-1.
Tal como decia anteriormente, los notebooks de EMR se almacenan en S3 y cuando queremos trabajar con ellos es necesario escoger con que cluster queremos ejecutarlo. Por tanto es imprescindible tener 2 cosas:
- Un bucket de S3
- Un cluster de EMR
Con estas dos cosas ya podemos crear nuestro notebook, y como se puede comprobar, es bastante sencillo e intuitivo.
Ahora ya solo falta definir el nombre del Notebook que queramos y escoger un cluster de los que tengamos activos.
Esta claro que este paso tiene más opciones, pero las dejaremos para más adelante ya que intención de tratar este tema en un post dedicado.
Una vez seleccionado el cluster con el que queremos trabajar, solo nos queda escoger si queremos utilizar el editor Jupyter o Jupyterlab.
Tal y como se puede apreciar facilmente en la comparativa anterior, JupyterLab, es una evolución del editor Jpyter, que entre otras ventajas incluye un entrono de trabajo más cómodo, por lo que suelo inclinarme por esta opción.
Application user interfaces
O dicho de otra manera, poder trabajar con otras aplicaciones dentro de nuestro cluster EMR.
Cuando hablamos de crear nuestro cluster EMR, comentamos que se pueden seleccionar qué aplicaciones queremos que se incluyan dentro del software que tendrá nuestro cluster.
Ahora, si queremos poder trabajar con alguna de las herramientas que tienen UI propia, en AWS, es necesario abrir una conexión SSH con enrutamiento de puertos dinámico, por lo que también se tendrán que controlar los ajustes de proxy en el navegador. Para ello se recomienda utilizar FoxyProxy.
Instalación y configuración de FoxyProxy
Ahora, una vez instalado FoxyProxy, con un editor de texto plano como SublimeText, tenemos que crear un archivo con el nombre foxyproxy-settings.xml con el siguiente código:
<?xml version="1.0" encoding="UTF-8"?>
<foxyproxy>
<proxies>
<proxy name="emr-socks-proxy" id="2322596116" notes="" fromSubscription="false" enabled="true" mode="manual" selectedTabIndex="2" lastresort="false" animatedIcons="true" includeInCycle="true" color="#0055E5" proxyDNS="true" noInternalIPs="false" autoconfMode="pac" clearCacheBeforeUse="false" disableCache="false" clearCookiesBeforeUse="false" rejectCookies="false">
<matches>
<match enabled="true" name="*ec2*.amazonaws.com*" pattern="*ec2*.amazonaws.com*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" />
<match enabled="true" name="*ec2*.compute*" pattern="*ec2*.compute*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" />
<match enabled="true" name="10.*" pattern="http://10.*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" />
<match enabled="true" name="*10*.amazonaws.com*" pattern="*10*.amazonaws.com*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" />
<match enabled="true" name="*10*.compute*" pattern="*10*.compute*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" />
<match enabled="true" name="*.compute.internal*" pattern="*.compute.internal*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" />
<match enabled="true" name="*.ec2.internal*" pattern="*.ec2.internal*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" />
</matches>
<manualconf host="localhost" port="8157" socksversion="5" isSocks="true" username="" password="" domain="" />
</proxy>
</proxies>
</foxyproxy>
Donde:
- El puesto 8157, els el puerto local utilizado para establecer la conexión SSH con el nodo maestro. Tiene que coincidir con el puerto que se utiliza en la conexión SSH en PuTTY o terminal.
- El patron *ec2*.amazonaws.com*, coincide con la DNS pública de los clusters de EMR de tu región.
- El patrón *ec2*.compute*, coincide con las DNS públicas de todas las otras regiones.
- El patrón 10.*, proporciona acceso al log del gestor de tareas de Hadoop. Si se generan conflictos con tu red, se puede modificar o eliminar este filtro.
Ahora, con el archivo foxyproxy-settings.xml creado, vamos al foxyProxy y lo importamos.
De modo que el listado de proxies tiene que quedarnos algo similar a esto:
Y finalmente, bien desde la barra de tareas del navegador o bien desde el propio plugin, se debe seleccionar la opción «Use proxies based on their pre-defined patterns and priorities«.
Acceder a la aplicaciones en EMR
Todo esto que hemos hecho hasta ahora, se tiene que realizar la primera vez, a partir de ahora, para poder acceder a nuestras aplicaciones dentro de EMR, sólo nos queda abrir un tunel SSH con el puerto que hemos definido (8157) y automáticamente EMR nos mostrará el listado de aplicaciones a las que podemos acceder en el própio dashboard.
Debe estar conectado para enviar un comentario.