Interfaces web de clústeres

Algunos de los componentes principales de código abierto incluidos en los clústeres de Google Dataproc, como Apache Hadoop y Apache Spark, proporcionan interfaces web. Estas interfaces se pueden usar para administrar y supervisar los recursos y las instalaciones del clúster, como el administrador de recursos YARN, el sistema de archivos distribuidos de Hadoop (HDFS), MapReduce y Spark. Otros componentes o aplicaciones que instales en tu clúster también pueden proporcionar interfaces web (consulta, por ejemplo, Instala y ejecuta un notebook de Jupyter en un clúster de Dataproc).

Interfaces disponibles.

Las siguientes interfaces están disponibles en un nodo de la instancia principal del clúster de Dataproc (reemplaza master-host-name por el nombre de tu nodo de instancia principal).

IU web Puerto URL
YARN ResourceManager 8088 http://master-host-name:8088
HDFS NameNode 98701 http://master-host-name:9870

1 En versiones anteriores de Dataproc (anteriores a 1.2), el puerto de IU web de HDFS Namenode era 50070.

El YARN ResourceManager tiene vínculos para todas las interfaces web actualmente ejecutadas y completadas de las aplicaciones MapReduce y Spark en la columna “IU de seguimiento”.

API de REST del administrador de recursos YARN permitidas

Cuando creas un clúster, Dataproc establece la propiedad yarn.resourcemanager.webapp.methods-allowed de yarn-site.xml en "GET,HEAD" que restringe los métodos HTTP que se pueden llamar en la IU web de YARN Resource Manager y las API de REST a los métodos GET y HEAD. Esta configuración predeterminada también inhabilita el envío de trabajos y las modificaciones a través de la API de REST de YARN.

Puedes anular los valores predeterminados para habilitar métodos HTTP específicos en el puerto 8088 si configuras esta propiedad en uno o más nombres de métodos HTTP separados por comas. Un valor ALL permitirá todos los métodos HTTP en el puerto.

Ejemplo:

gcloud dataproc clusters create --properties='yarn:yarn.resourcemanager.webapp.methods-allowed=GET,POST,DELETE'

Recomendación: Si estableces esta propiedad para permitir métodos HTTP no predeterminados, asegúrate de configurar reglas de firewall y otras configuraciones de seguridad para restringir el acceso al puerto 8088.

Conéctate a interfaces web

Puedes conectarte a interfaces web que se ejecutan en un clúster de Dataproc mediante la puerta de enlace de componentes de Dataproc, Cloud Shell de tu proyecto o la herramienta de línea de comandos de gcloud del SDK de Cloud:

  • Puerta de enlace de componentes: conéctate con un clic a Hadoop, Spark y otras interfaces de IU web de componentes desde Cloud Console. Habilitas la puerta de enlace de componentes cuando creas tu clúster.

  • Cloud Shell: Cloud Shell en Google Cloud Console tiene los comandos y utilidades del SDK de Cloud preinstalados, y proporciona una función de vista previa en la Web que te permite conectarte rápidamente a través de un túnel SSH a un puerto de la interfaz web en un clúster. Sin embargo, una conexión al clúster desde Cloud Shell usa la redirección de puertos local, lo que abre una conexión a un solo puerto en una interfaz web de clúster. Se necesitan múltiples comandos para conectarse a múltiples puertos. Además, las sesiones de Cloud Shell terminan de forma automática después de un período de inactividad (30 minutos).

  • Herramienta de línea de comandos de gcloud: el comando gcloud compute ssh con redirección de puertos dinámica te permite establecer un túnel SSH y ejecutar un servidor proxy SOCKS sobre el túnel. Después de emitir este comando, debes configurar tu navegador local para que use el proxy SOCKS. Este método de conexión te permite conectarte a varios puertos en una interfaz web de clúster. Consulta ¿Puedo usar la redirección de puertos local de un proxy SOCKS? para obtener más información.

Establece variables de comando de uso común

Para facilitar la copia y ejecución de ejemplos de línea de comandos en tu máquina local o en Cloud Shell, configura las variables del comando gcloud dataproc. Es posible que sea necesario configurar variables adicionales para algunos de los ejemplos de comandos que se muestran en esta página.

Linux/mac/Shell

export PROJECT=project;export HOSTNAME=hostname;export ZONE=zone

Windows

set PROJECT=project && set HOSTNAME=hostname && set ZONE=zone
  • Configura PROYECTO en tu ID del proyecto de Google Cloud.
  • Configura el NOMBRE DE HOST en el nombre de nodo de instancia principal en tu clúster de Dataproc (el nombre de la instancia principal termina con un sufijo -m).
  • Establece ZONA en la zona de las VM de su clúster de Dataproc (por ejemplo, "us-central1-b").

Crea un túnel SSH

Comando de gcloud

Ejecuta el siguiente comando de gcloud en tu máquina local para configurar un túnel SSH desde un puerto abierto de tu máquina local a la instancia principal de tu clúster y ejecuta un servidor proxy SOCKS local que escuche en el puerto.

Antes de ejecutar el comando, haz lo siguiente en tu máquina local:

  1. Establece variables de comando de uso común
  2. Configura una variable de PUERTO en un puerto abierto en tu máquina local. El puerto 1080 es una opción arbitraria, pero típica, ya que es probable que esté abierto.
    PORT=number
    

Linux/macOS

gcloud compute ssh ${HOSTNAME} \
    --project=${PROJECT} --zone=${ZONE}  -- \
    -D ${PORT} -N

Windows

gcloud compute ssh %HOSTNAME% ^
    --project=%PROJECT% --zone=%ZONE%  -- ^
    -D %PORT% -N

El separador -- te permite agregar argumentos SSH al comando gcloud compute ssh de la siguiente manera:

  • -D especifica la redirección de puertos dinámica a nivel de aplicación.
  • -N le indica a gcloud que no abra una shell remota.

Este comando de gcloud crea un túnel SSH que opera independientemente de otras sesiones de shell de SSH, mantiene los errores relacionados con el túnel de los resultados de shell y ayuda a evitar cierres involuntarios del túnel.

Si el comando ssh falla con el mensaje de error bind: Cannot assign requested address, es probable que el puerto solicitado esté en uso. Intenta ejecutar el comando con otro valor de variable PUERTO.

El comando anterior se ejecuta en primer plano y debe seguir en ejecución para mantener el túnel activo. El comando debe finalizar de forma automática, siempre y cuando se borre el clúster.

Cloud Shell

  1. Abre Cloud Shell.de Google Cloud.
  2. Ejecuta el comando gcloud a continuación en Cloud Shell para configurar un túnel SSH desde un puerto de vista previa de Cloud Shell a un puerto de interfaz web en el nodo principal de tu clúster. Antes de ejecutar el comando, haz lo siguiente en Cloud Shell:

    1. Establece variables de comando de uso común
    2. Establece una variable de PORT1 en un puerto de Cloud Shell en el rango de puerto 8080 - 8084 y establece una variable PORT2 en el puerto de interfaz web en el nodo principal de tu clúster de Dataproc.
      PORT1=number
      PORT2=number
      
    gcloud compute ssh ${HOSTNAME} \
        --project=${PROJECT} --zone=${ZONE}  -- \
        -4 -N -L ${PORT1}:${HOSTNAME}:${PORT2}
    

    El separador -- te permite agregar argumentos SSH al comando gcloud compute ssh de la siguiente manera:

    • -4 indica a ssh que solo use IPv4.
    • -N le indica a gcloud que no abra una shell remota.
    • -L ${PORT1}:${HOSTNAME}:${PORT2} especifica la redirección de puertos locales desde el PORT1 de Cloud Shell al clúster HOSTNAME:PORT2.

    Este comando de gcloud crea un túnel SSH que opera independientemente de otras sesiones de shell de SSH, mantiene los errores relacionados con el túnel de los resultados de shell y ayuda a evitar cierres involuntarios del túnel.

Configura tu navegador

Comando de gcloud

Tu túnel SSH es compatible con el proxy de tráfico mediante el protocolo SOCKS. Para configurar tu navegador a fin de que use el proxy, inicia una nueva sesión de navegador con los parámetros del servidor proxy. A continuación, verás un ejemplo que usa el navegador Google Chrome. HOSTNAME es el nombre del nodo principal del clúster (consulta Establece variables de comando de uso común).

Linux

/usr/bin/google-chrome \
    --proxy-server="socks5://localhost:${PORT}" \
    --user-data-dir=/tmp/${HOSTNAME}

macOS

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
    --proxy-server="socks5://localhost:${PORT}" \
    --user-data-dir=/tmp/${HOSTNAME}

Windows

"%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" ^
    --proxy-server="socks5://localhost:%PORT%" ^
    --user-data-dir="%Temp%\%HOSTNAME%"

Este comando usa las siguientes marcas del navegador Google Chrome:

  • -proxy-server="socks5://localhost:1080" le indica a Chrome que envíe todas las solicitudes de URL http:// y https:// a través del servidor proxy SOCKS localhost:${PORT} mediante la versión 5 del protocolo SOCKS. ${PORT} es la variable de puerto que estableces en Crea un túnel SSH. Los nombres de host para las URL se resuelven mediante el servidor proxy, no lo hace Chrome de manera local.
  • --user-data-dir=/tmp/${HOSTNAME} obliga a Chrome a abrir una ventana nueva que no está vinculada a una sesión de Chrome existente. Sin esta marca, Chrome puede ignorar la configuración --proxy-server y abrir una nueva ventana adjunta a una sesión de Chrome existente. El valor establecido para --user-data-dir puede ser cualquier ruta no existente.

Cloud Shell

No es necesario que configures tu navegador local cuando uses Cloud Shell. Después de crear un túnel SSH, usa la vista previa web de Cloud Shell para conectarte a la interfaz del clúster.

Conéctate a la interfaz del clúster

Comando de gcloud

Una vez que tu navegador local esté configurado para usar el proxy, puedes navegar a la URL de la interfaz web en tu clúster de Dataproc (consulta Interfaces disponibles). La URL del navegador tiene el siguiente formato y contenido: http://cluster-name-m:port (puerto de interfaz del clúster)

Cloud Shell

Haz clic en el botón Vista previa web web-preview-button de Cloud Shell y, luego, selecciona una de las siguientes opciones:

  • "Vista previa en el puerto 8080" o
  • "Cambiar puerto" e insertar el número de puerto en el cuadro de diálogo
según el número PORT1 de Cloud Shell (puerto 8080 - 8084) que pasaste al comando gcloud compute ssh en Crear un túnel SSH.

Se abre una ventana del navegador que se conecta al puerto de la interfaz web en el nodo principal del clúster.

Preguntas frecuentes y sugerencias de depuración

¿Qué pasa si no veo la IU en mi navegador?

Si no ves las IU en tu navegador, las siguientes son las dos razones más comunes:

  1. Tienes un problema de conectividad de red, que probablemente se deba a un firewall. Ejecuta el siguiente comando (después de configurar las variables locales) para comprobar si puedes conectarte a la instancia principal mediante SSH. Si no puedes hacerlo, entonces hay un problema de conectividad.

    Linux/macOS

    gcloud compute ssh ${HOSTNAME}-m \
        --project=${PROJECT}
    

    Windows

    gcloud compute ssh %HOSTNAME%-m ^
        --project=%PROJECT%
    

  2. Otro proxy está interfiriendo en el proxy SOCKS. Para verificar el proxy, ejecuta el siguiente comando curl (disponible en Linux y macOS):

    Linux/macOS

    curl -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
    

    Windows

    curl.exe -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
    
    Si ves una respuesta HTTP, el proxy está funcionando, por lo que es posible que otro proxy o una extensión del navegador interrumpa el proxy SOCKS.

¿Puedo usar la redirección de puertos local en lugar de un proxy SOCKS?

En lugar del proxy SOCKS, es posible acceder a las IU de la aplicación web que se ejecutan en tu instancia principal con la redirección de puertos local SSH, que redirecciona el puerto principal a un puerto local. Por ejemplo, el siguiente comando te permite acceder a localhost:1080 para llegar a cluster-name-m:8088 sin SOCKS (consulta Establece variables de comando de uso común):

Linux/macOS

gcloud compute ssh ${HOSTNAME}-m \
    --project=${PROJECT} -- \
    -L 1080:${HOSTNAME}-m:8088 -N -n

Windows

gcloud compute ssh %HOSTNAME%-m ^
    --project=%PROJECT% -- ^
    -L 1080:%HOSTNAME%-m:8088 -N -n

El uso de un proxy SOCKS puede ser preferible al uso de la redirección de puertos local, ya que el proxy tiene las siguientes características:

  • te permite acceder a todos los puertos de aplicaciones web sin tener que configurar un túnel de redirección de puertos para cada puerto de IU.
  • permite que las interfaces de usuario web de Spark y Hadoop resuelvan los hosts DNS de forma correcta.