Interfaces Web de clusters

Certains des principaux composants Open Source inclus dans les clusters Dataproc, tels que Apache Hadoop et Apache Spark, fournissent des interfaces Web. Ces interfaces peuvent être utilisées pour gérer et surveiller les ressources et les installations du cluster, telles que le gestionnaire de ressources YARN, le système de fichiers HDFS (Hadoop Distributed File System), MapReduce et Spark. D'autres composants ou applications que vous installez sur votre cluster peuvent également fournir des interfaces Web (par exemple, consultez la section Installer et exécuter un notebook Jupyter sur un cluster Dataproc).

Interfaces disponibles

Les interfaces suivantes sont disponibles sur un nœud maître de cluster Dataproc (remplacez master-host-name par le nom de votre nœud maître).

UI Web Port URL
Gestionnaire de ressources YARN 8088 http://master-host-name:8088
Composant NameNode HDFS 98701 http://master-host-name:9870

1  Dans les versions précédentes de Dataproc (antérieures à 1.2), le port de l'interface utilisateur Web NameNode HDFS était "50070".

Le gestionnaire de ressources YARN dispose de liens pour toutes les interfaces Web des applications MapReduce et Spark en cours d'exécution et terminées dans la colonne "Tracking UI" (Interface de suivi).

API REST autorisées du gestionnaire de ressources YARN

Lorsque vous créez un cluster, Dataproc définit la propriété yarn.resourcemanager.webapp.methods-allowed du fichier yarn-site.xml sur "GET,HEAD", ce qui limite les méthodes HTTP pouvant être appelées sur l'interface utilisateur Web et les API REST du gestionnaire de ressources YARN aux méthodes GET et HEAD. Ce paramètre par défaut désactive également la modification et l'envoi de tâches via l'API REST YARN.

Vous pouvez ignorer les valeurs par défaut afin d'activer des méthodes HTTP spécifiques sur le port 8088. Pour ce faire, définissez cette propriété sur un ou plusieurs noms de méthodes HTTP en les séparant par des virgules. La valeur ALL autorise toutes les méthodes HTTP sur le port.

Exemple :

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

Recommandation : Si vous définissez cette propriété pour autoriser les méthodes HTTP non définies par défaut, veillez à configurer les règles de pare-feu et les autres paramètres de sécurité pour limiter l'accès au port 8088.

Se connecter à des interfaces Web

Vous pouvez vous connecter à des interfaces Web exécutées sur un cluster Dataproc à l'aide de la passerelle des composants Dataproc, de l'environnement Cloud Shell de votre projet ou de l'outil de ligne de commande gcloud du SDK Cloud :

  • Passerelle des composants : connectez-vous en un clic à Hadoop, Spark et aux autres interfaces utilisateur Web des composants depuis Cloud Console. Vous activez la passerelle des composants lorsque vous créez votre cluster.

  • Cloud Shell : les commandes et les utilitaires du SDK Cloud sont préinstallés dans Cloud Shell dans Google Cloud Console. Il fournit une fonctionnalité d'aperçu sur le Web qui vous permet de vous connecter rapidement via un tunnel SSH au port d'interface Web d'un cluster. Cependant, une connexion au cluster à partir de Cloud Shell utilise le transfert de port local, ce qui ouvre la connexion à un seul port de l'interface Web du cluster. Plusieurs commandes sont nécessaires pour se connecter à plusieurs ports. De plus, les sessions Cloud Shell se ferment automatiquement après une période d'inactivité (30 minutes).

  • Outil de ligne de commande gcloud : la commande gcloud compute ssh avec le transfert de port dynamique vous permet d'établir un tunnel SSH et d'exécuter un serveur proxy SOCKS via le tunnel. Après avoir émis cette commande, vous devez configurer votre navigateur local pour utiliser le proxy SOCKS. Cette méthode de connexion vous permet de vous connecter à plusieurs ports sur l'interface Web d'un cluster. Consultez la réponse à la question Puis-je utiliser le transfert de port local au lieu d'un proxy SOCKS ? pour en savoir plus.

Définir les variables de commande couramment utilisées

Pour faciliter la copie et l'exécution d'exemples de ligne de commande sur votre machine locale ou dans Cloud Shell, définissez les variables de commande gcloud dataproc. Des variables supplémentaires devront peut-être être définies pour certains exemples de commandes présentés sur cette page.

Linux/mac/Shell

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

Windows

set PROJECT=project && set HOSTNAME=hostname && set ZONE=zone
  • Définissez PROJECT sur l'ID de votre projet Google Cloud.
  • Définissez HOSTNAME sur le nom du nœud maître dans votre cluster Dataproc (le nom du nœud maître se termine par un suffixe -m).
  • Définissez ZONE sur la zone des VM de votre cluster Dataproc (par exemple, "us-central1-b").

Créer un tunnel SSH

Commande gcloud

Exécutez la commande gcloud suivante sur votre ordinateur local pour configurer un tunnel SSH à partir d'un port ouvert de votre ordinateur local vers l'instance maître de votre cluster, puis exécutez un serveur proxy SOCKS local à l'écoute sur le port.

Avant d'exécuter la commande sur votre ordinateur local, procédez comme suit :

  1. Définir les variables de commande couramment utilisées
  2. Définissez une variable PORT sur un port ouvert de votre ordinateur local. Le port 1080 est un choix arbitraire, mais typique puisqu'il est susceptible d'être ouvert.
    PORT=number
    

Linux/macOS

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

Windows

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

Le séparateur -- vous permet d'ajouter des arguments SSH à la commande gcloud compute ssh, comme suit :

  • -D spécifie le transfert de port dynamique au niveau de l'application.
  • -N indique à gcloud de ne pas ouvrir une interface système à distance.

Cette commande gcloud crée un tunnel SSH qui fonctionne indépendamment des autres sessions d'interface système SSH, évite que des erreurs liées au tunnel ne surviennent dans la sortie de l'interface système et empêche les fermetures accidentelles du tunnel.

Si la commande SSH échoue avec le message d'erreur bind: Cannot assign requested address, il est probable que le port demandé soit utilisé. Essayez d'exécuter la commande avec une autre valeur de variable PORT.

La commande ci-dessus s'exécute au premier plan et doit continuer à s'exécuter pour maintenir le tunnel actif. La commande doit se fermer automatiquement lorsque vous supprimez le cluster.

Cloud Shell

  1. Ouvrez Cloud Shell dans Google Cloud.
  2. Exécutez la commande gcloud ci-dessous dans Cloud Shell pour configurer un tunnel SSH à partir d'un port d'aperçu Cloud Shell vers un port d'interface Web sur le nœud maître du cluster. Avant d'exécuter la commande dans Cloud Shell, procédez comme suit :

    1. Définir les variables de commande couramment utilisées
    2. Définissez une variable PORT1 pour un port Cloud Shell dans la plage de ports 8080 – 8084. Définissez une variable PORT2 pour le port d'interface Web sur le nœud maître du cluster Dataproc.
      PORT1=number
      PORT2=number
      
    gcloud compute ssh ${HOSTNAME} \
        --region=region \
        --project=${PROJECT} --zone=${ZONE}  -- \
        -4 -N -L ${PORT1}:${HOSTNAME}:${PORT2}
    

    Le séparateur -- vous permet d'ajouter des arguments SSH à la commande gcloud compute ssh, comme suit :

    • -4 indique à SSH de n'utiliser que IPv4.
    • -N indique à gcloud de ne pas ouvrir une interface système à distance.
    • -L ${PORT1}:${HOSTNAME}:${PORT2} spécifie le transfert de port local depuis le port PORT1 Cloud Shell spécifié vers le port HOSTNAME:PORT2 du cluster.

    Cette commande gcloud crée un tunnel SSH qui fonctionne indépendamment des autres sessions d'interface système SSH, évite que des erreurs liées au tunnel ne surviennent dans la sortie de l'interface système et empêche les fermetures accidentelles du tunnel.

Configurer le navigateur

Commande gcloud

Le tunnel SSH est compatible avec la fonction proxy du trafic à l'aide du protocole SOCKS. Pour configurer votre navigateur afin qu'il utilise le proxy, démarrez une nouvelle session de navigateur avec les paramètres du serveur proxy. Voici un exemple qui utilise le navigateur Google Chrome. HOSTNAME est le nom du nœud maître du cluster (consultez la section Définir les variables de commande couramment utilisées).

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%"

Cette commande utilise les options du navigateur Chrome suivantes :

  • -proxy-server="socks5://localhost:1080" indique à Chrome d'envoyer toutes les requêtes d'URL http:// et https:// via le serveur proxy SOCKS localhost:${PORT} à l'aide de la version 5 du protocole SOCKS. ${PORT} est la variable de port que vous avez définie dans la section Créer un tunnel SSH. Les noms d'hôte pour les URL sont résolus par le serveur proxy, et non localement par Chrome.
  • --user-data-dir=/tmp/${HOSTNAME} oblige Chrome à ouvrir une nouvelle fenêtre qui n'est pas associée à une session Chrome existante. Sans cette option, Chrome peut ouvrir une nouvelle fenêtre associée à une session Chrome existante en ignorant le paramètre --proxy-server. La valeur définie pour --user-data-dir peut être n'importe quel chemin inexistant.

Cloud Shell

Vous n'avez pas besoin de configurer votre navigateur local lorsque vous utilisez Cloud Shell. Une fois que vous avez créé un tunnel SSH, utilisez l'aperçu sur le Web de Cloud Shell pour vous connecter à l'interface du cluster.

Se connecter à l'interface du cluster

Commande gcloud

Une fois que votre navigateur local est configuré pour utiliser le proxy, vous pouvez accéder à l'URL de l'interface Web de votre cluster Dataproc (consultez la section Interfaces disponibles). Le format et le contenu de l'URL du navigateur sont les suivants : http://cluster-name-m:port (port d'interface du cluster).

Cloud Shell

Cliquez sur le bouton Aperçu sur le Web de Cloud Shell web-preview-button, puis sélectionnez l'une des options suivantes :

  • "Preview on port 8080" (Prévisualiser sur le port 8080), ou
  • "Change port" (Modifier le port) en insérant le numéro de port dans la boîte de dialogue
en fonction du numéro de PORT1 Cloud Shell (port 8080 – 8084) que vous avez transmis à la commande gcloud compute ssh dans la section Créer un tunnel SSH.

Une fenêtre de navigateur s'ouvre et permet de se connecter au port d'interface Web sur le nœud maître du cluster.

Questions fréquentes et conseils de débogage

Que faire si l'interface utilisateur ne s'affiche pas dans mon navigateur ?

Si les interfaces utilisateur ne s'affichent pas dans votre navigateur, les deux raisons les plus courantes sont les suivantes :

  1. Un problème de connectivité réseau est survenu, probablement à cause d'un pare-feu. Exécutez la commande suivante (après avoir défini les variables locales) pour voir si vous pouvez vous connecter en SSH à l'instance maître. Si la connexion échoue, il s'agit d'un problème de connectivité.

    Linux/macOS

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

    Windows

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

  2. Un autre proxy interfère avec le proxy SOCKS. Pour vérifier le proxy, exécutez la commande curl suivante (disponible sous Linux et 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 une réponse HTTP s'affiche, le proxy fonctionne ; il est donc possible que le proxy SOCKS soit interrompu par un autre proxy ou une extension de navigateur.

Puis-je utiliser le transfert de port local au lieu d'un proxy SOCKS ?

Au lieu du proxy SOCKS, il est possible d'accéder à des interfaces utilisateur d'applications Web s'exécutant sur l'instance maître avec un transfert de port local SSH qui permet de transférer le port maître vers un port local. Par exemple, la commande suivante vous permet d'accéder à localhost:1080 pour atteindre cluster-name-m:8088 sans SOCKS (consultez la section Définir les variables de commande couramment utilisées) :

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

L'utilisation d'un proxy SOCKS peut être préférable à un transfert de port local, car le proxy :

  • vous permet d'accéder à tous les ports des applications Web sans avoir à configurer un tunnel de transfert de port pour chaque port d'interface utilisateur ;
  • permet aux interfaces utilisateur Web Spark et Hadoop de résoudre correctement les hôtes DNS.