Interfacce web del cluster

Alcuni dei componenti open source principali inclusi nei cluster Dataproc, come Apache Hadoop e Apache Spark, forniscono interfacce web. Queste interfacce possono essere utilizzate per gestire e monitorare le risorse e le funzionalità del cluster, come YARN Resource Manager, Hadoop Distributed File System (HDFS), MapReduce e Spark. Altri componenti o applicazioni che installi sul cluster potrebbero fornire anche interfacce web (vedi, ad esempio, Installazione ed esecuzione di un notebook Jupyter su un cluster Dataproc).

Interfacce disponibili

Le seguenti interfacce sono disponibili su un nodo master del cluster Dataproc (sostituisci master-host-name con il nome del nodo master).

UI web Porta URL
ResourceManager YARN 80881 http://master-host-name:8088
NameNode HDFS 98702,3 http://master-host-name:9870

1 Nei cluster abilitati a Kerberos, la porta della UI web di YARN ResourceManager è 8090 e viene eseguita su HTTPS.

2 Nei cluster abilitati a Kerberos, la porta dell'interfaccia utente web di HDFS Namenode è 9871 e viene eseguita su HTTPS.

3 Nelle versioni precedenti di Dataproc (precedenti alla 1.2), la porta dell'interfaccia utente web di HDFS Namenode era 50070.

YARN ResourceManager ha link per tutte le interfacce web delle applicazioni MapReduce e Spark attualmente in esecuzione e completate nella colonna "Interfaccia utente di monitoraggio".

API REST YARN ResourceManager consentite

Quando crei un cluster, Dataproc imposta la proprietà yarn-site.xml yarn.resourcemanager.webapp.methods-allowed su "GET,HEAD", il che limita i metodi HTTP che possono essere chiamati sull'interfaccia utente web di YARN Resource Manager e sulle API REST ai metodi GET e HEAD. Questa impostazione predefinita disattiva anche l'invio e le modifiche dei job tramite l'API REST YARN.

Puoi eseguire l'override dei valori predefiniti per attivare metodi HTTP specifici sulla porta 8088 impostando questa proprietà su uno o più nomi di metodi HTTP separati da virgole. Un valore ALL consentirà tutti i metodi HTTP sulla porta.

Esempio:

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

Consiglio:se imposti questa proprietà in modo da consentire metodi HTTP non predefiniti, assicurati di configurare le regole firewall e altre impostazioni di sicurezza per limitare l'accesso alla porta 8088.

Connessione a interfacce web

Puoi connetterti alle interfacce web in esecuzione su un cluster Dataproc utilizzando il gateway dei componenti di Dataproc, Cloud Shell del tuo progetto o lo strumento a riga di comando gcloud di Google Cloud CLI:

  • Gateway dei componenti: connettiti con un solo clic a Hadoop, Spark e ad altre interfacce web dei componenti dalla console Google Cloud . Abiliti il Component Gateway quando crei il cluster.

  • Cloud Shell: Cloud Shell nella console Google Cloud ha i comandi e le utilità di gcloud CLI preinstallati e fornisce una funzionalità di anteprima web che ti consente di connetterti rapidamente tramite un tunnel SSH a una porta dell'interfaccia web su un cluster. Tuttavia, una connessione al cluster da Cloud Shell utilizza il port forwarding locale, che apre una connessione a una sola porta su un'interfaccia web del cluster. Per connettersi a più porte sono necessari più comandi. Inoltre, le sessioni Cloud Shell terminano automaticamente dopo un periodo di inattività (30 minuti).

  • Google Cloud CLI: il comando gcloud compute ssh con l'inoltro dinamico delle porte consente di stabilire un tunnel SSH ed eseguire un server proxy SOCKS sopra il tunnel. Dopo aver eseguito questo comando, devi configurare il browser locale in modo che utilizzi il proxy SOCKS. Questo metodo di connessione ti consente di connetterti a più porte su un'interfaccia web del cluster. Consulta Posso utilizzare l'inoltro delle porte locali anziché un proxy SOCKS? per ulteriori informazioni.

Impostare le variabili dei comandi più utilizzate

Per semplificare la copia e l'esecuzione di esempi di riga di comando sulla tua macchina locale o in Cloud Shell, imposta le variabili di comando gcloud dataproc. Per alcuni degli esempi di comandi mostrati in questa pagina potrebbe essere necessario impostare variabili aggiuntive.

Linux/mac/Shell

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

Windows

set PROJECT=project && set HOSTNAME=hostname && set ZONE=zone
  • Imposta PROJECT sull' Google Cloud ID progetto.
  • Imposta HOSTNAME sul nome del nodo master nel tuo cluster Dataproc (il nome master termina con il suffisso -m)
  • Imposta ZONE sulla zona delle VM nel cluster Dataproc (ad esempio "us-central1-b")

Crea un tunnel SSH

Comando gcloud

Esegui il seguente comando gcloud sulla tua macchina locale per configurare un tunnel SSH da una porta aperta sulla tua macchina locale all'istanza master del cluster ed esegui un server proxy SOCKS locale in ascolto sulla porta.

Prima di eseguire il comando, sulla macchina locale:

  1. Impostare le variabili dei comandi di uso comune
  2. Imposta una variabile PORT su una porta aperta sulla tua macchina locale. La porta 1080 è una scelta arbitraria ma tipica, in quanto è probabile che sia aperta.
    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

Il separatore -- ti consente di aggiungere argomenti SSH al comando gcloud compute ssh, come segue:

  • -D specifica l'inoltro dinamico delle porte a livello di applicazione.
  • -N indica a gcloud di non aprire una shell remota.

Questo comando gcloud crea un tunnel SSH che funziona indipendentemente dalle altre sessioni della shell SSH, mantiene gli errori relativi al tunnel fuori dall'output della shell e contribuisce a evitare chiusure involontarie del tunnel.

Se il comando ssh non va a buon fine e viene visualizzato il messaggio di errore bind: Cannot assign requested address, una causa probabile è che la porta richiesta è in uso. Prova a eseguire il comando con un valore diverso per la variabile PORT.

Il comando precedente viene eseguito in primo piano e deve continuare a essere eseguito per mantenere attivo il tunnel. Il comando deve uscire automaticamente se e quando elimini il cluster.

Cloud Shell

  1. Apri Google Cloud Cloud Shell.
  2. Esegui il comando gcloud riportato di seguito in Cloud Shell per configurare un tunnel SSH da una porta di anteprima di Cloud Shell a una porta dell'interfaccia web sul nodo master del tuo cluster. Prima di eseguire il comando, in Cloud Shell :

    1. Impostare le variabili dei comandi di uso comune
    2. Imposta una variabile PORT1 su una porta Cloud Shell nell'intervallo di porte 8080 - 8084 e imposta una variabile PORT2 sulla porta dell'interfaccia web sul nodo master del tuo cluster Dataproc.
      PORT1=number
      PORT2=number
      
    gcloud compute ssh ${HOSTNAME} \
        --project=${PROJECT} --zone=${ZONE}  -- \
        -4 -N -L ${PORT1}:${HOSTNAME}:${PORT2}
    

    Il separatore -- ti consente di aggiungere argomenti SSH al comando gcloud compute ssh, come segue:

    • -4 indica a ssh di utilizzare solo IPv4.
    • -N indica a gcloud di non aprire una shell remota.
    • -L ${PORT1}:${HOSTNAME}:${PORT2} specifica il port forwarding locale dalla Cloud Shell specificata PORT1 al cluster HOSTNAME:PORT2.

    Questo comando gcloud crea un tunnel SSH che funziona indipendentemente dalle altre sessioni della shell SSH, mantiene gli errori relativi al tunnel fuori dall'output della shell e aiuta a prevenire chiusure involontarie del tunnel.

Configurare il browser

Comando gcloud

Il tunnel SSH supporta il proxy del traffico utilizzando il protocollo SOCKS. Per configurare il browser in modo che utilizzi il proxy, avvia una nuova sessione del browser con i parametri del server proxy. Ecco un esempio che utilizza il browser Google Chrome. HOSTNAME è il nome del nodo master del cluster (vedi Impostare le variabili dei comandi di uso comune).

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

Questo comando utilizza i seguenti flag del browser Chrome:

  • -proxy-server="socks5://localhost:1080" indica a Chrome di inviare tutte le richieste di URL http:// e https:// tramite il server proxy SOCKS localhost:${PORT}, utilizzando la versione 5 del protocollo SOCKS. ${PORT} è la variabile porta che hai impostato in Crea un tunnel SSH. I nomi host per gli URL vengono risolti dal server proxy, non localmente da Chrome.
  • --user-data-dir=/tmp/${HOSTNAME} impone a Chrome di aprire una nuova finestra non collegata a una sessione di Chrome esistente. Senza questo flag, Chrome potrebbe aprire una nuova finestra collegata a una sessione di Chrome esistente, ignorando l'impostazione --proxy-server. Il valore impostato per --user-data-dir può essere un percorso inesistente.

Cloud Shell

Quando utilizzi Cloud Shell, non devi configurare il browser locale. Dopo aver creato un tunnel SSH, utilizza l'anteprima web di Cloud Shell per connetterti all'interfaccia del cluster.

Connettiti all'interfaccia del cluster

Comando gcloud

Una volta configurato il browser locale per l'utilizzo del proxy, puoi passare all'URL dell'interfaccia web sul cluster Dataproc (vedi Interfacce disponibili). L'URL del browser ha il seguente formato e contenuti: http://cluster-name-m:port (porta dell'interfaccia del cluster)

Cloud Shell

Fai clic sul pulsante Anteprima web di Cloud Shell web-preview-button, quindi seleziona una delle seguenti opzioni:

  • "Anteprima sulla porta 8080" oppure
  • "Change port" (Cambia porta) e inserisci il numero di porta nella finestra di dialogo.
in base al numero PORT1 di Cloud Shell (porta 8080 - 8084) che hai passato al comando gcloud compute ssh in Crea un tunnel SSH.

Si apre una finestra del browser che si connette alla porta dell'interfaccia web sul nodo master del cluster.

Domande frequenti e suggerimenti per il debug

Cosa succede se non vedo la UI nel mio browser?

Se non vedi le UI nel browser, i due motivi più comuni sono:

  1. Hai un problema di connettività di rete, probabilmente dovuto a un firewall. Esegui il seguente comando (dopo aver impostato le variabili locali) per verificare se puoi accedere tramite SSH all'istanza master. Se non riesci, significa che c'è un problema di connettività.

    Linux/macOS

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

    Windows

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

  2. Un altro proxy interferisce con il proxy SOCKS. Per controllare il proxy, esegui questo comando curl (disponibile su Linux e 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
    
    Se vedi una risposta HTTP, il proxy funziona, quindi è possibile che il proxy SOCKS venga interrotto da un altro proxy o da un'estensione del browser.

Posso utilizzare l'inoltro delle porte locale anziché un proxy SOCKS?

Anziché il proxy SOCKS, è possibile accedere alle UI delle applicazioni web in esecuzione sull'istanza master con il port forwarding SSH locale, che inoltra la porta del master a una porta locale. Ad esempio, il seguente comando ti consente di accedere a localhost:1080 per raggiungere cluster-name-m:8088 senza SOCKS (vedi Impostare le variabili dei comandi di uso comune):

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'utilizzo di un proxy SOCKS potrebbe essere preferibile all'utilizzo dell'inoltro delle porte locali in quanto il proxy:

  • ti consente di accedere a tutte le porte dell'applicazione web senza dover configurare un tunnel di port forwarding per ogni porta della UI
  • consente alle UI web di Spark e Hadoop di risolvere correttamente gli host DNS