Interfaces Web de clusters

Alguns dos componentes de código aberto principais incluídos nos clusters do Dataproc, como o Apache Hadoop e o Apache Spark, oferecem interfaces Web. Estas interfaces podem ser usadas para gerir e monitorizar recursos e instalações de clusters, como o gestor de recursos YARN, o sistema de ficheiros distribuídos Hadoop (HDFS), o MapReduce e o Spark. Outros componentes ou aplicações que instala no cluster também podem fornecer interfaces Web (consulte, por exemplo, Instale e execute um bloco de notas do Jupyter num cluster do Dataproc).

Interfaces disponíveis

As seguintes interfaces estão disponíveis num nó principal do cluster do Dataproc (substitua master-host-name pelo nome do seu nó principal).

IU da Web Porta URL
YARN ResourceManager 80881 http://master-host-name:8088
HDFS NameNode 98702,3 http://master-host-name:9870

1 Em clusters com o Kerberos ativado, a porta da IU Web do YARN ResourceManager é 8090 e é executada em HTTPS.

2 Em clusters com Kerberos ativado, a porta da IU Web do HDFS Namenode é 9871 e é executada em HTTPS.

3 Em versões anteriores do Dataproc (anteriores à 1.2), a porta da IU Web do HDFS Namenode era 50070.

O YARN ResourceManager tem links para todas as interfaces Web de aplicações MapReduce e Spark atualmente em execução e concluídas na coluna "Tracking UI" (IU de acompanhamento).

APIs REST do YARN ResourceManager permitidas

Quando cria um cluster, o Dataproc define a yarn.resourcemanager.webapp.methods-allowedpropriedade yarn-site.xml como "GET,HEAD", o que restringe os métodos HTTP que podem ser chamados na IU Web do gestor de recursos do YARN e nas APIs REST aos métodos GET e HEAD. Esta definição predefinida também desativa o envio de tarefas e as modificações através da API REST do YARN.

Pode substituir os valores predefinidos para ativar métodos HTTP específicos na porta 8088 definindo esta propriedade para um ou mais nomes de métodos HTTP separados por vírgulas. Um valor ALL permite todos os métodos HTTP na porta.

Exemplo:

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

Recomendação: se definir esta propriedade para permitir métodos HTTP não predefinidos, certifique-se de que configura regras de firewall e outras definições de segurança para restringir o acesso à porta 8088.

Estabelecer ligação a interfaces Web

Pode estabelecer ligação a interfaces Web executadas num cluster do Dataproc através do gateway de componentes do Dataproc, do Cloud Shell do seu projeto ou da ferramenta de linha de comandos gcloud da CLI do Google Cloud:

  • Component Gateway: ligue-se com um clique ao Hadoop, ao Spark e a outras interfaces da IU da Web de componentes a partir da Google Cloud consola. Ativa o Component Gateway quando cria o cluster.

  • Cloud Shell: o Cloud Shell na consola tem os comandos e as utilidades da CLI gcloud pré-instalados e oferece uma funcionalidade de pré-visualização na Web que lhe permite estabelecer rapidamente ligação através de um túnel SSH a uma porta de interface Web num cluster. Google Cloud No entanto, uma ligação ao cluster a partir do Cloud Shell usa o encaminhamento de porta local, que abre uma ligação a apenas uma porta numa interface Web do cluster. São necessários vários comandos para estabelecer ligação a várias portas. Além disso, as sessões do Cloud Shell terminam automaticamente após um período de inatividade (30 minutos).

  • CLI Google Cloud: o comando gcloud compute ssh com o encaminhamento dinâmico de portas permite-lhe estabelecer um túnel SSH e executar um servidor proxy SOCKS no túnel. Depois de emitir este comando, tem de configurar o navegador local para usar o proxy SOCKS. Este método de ligação permite-lhe ligar-se a várias portas numa interface Web de cluster. Consulte o artigo Posso usar o encaminhamento de portas local em vez de um proxy SOCKS? para mais informações.

Defina variáveis de comando usadas frequentemente

Para facilitar a cópia e a execução de exemplos de linhas de comandos na sua máquina local ou no Cloud Shell, defina gcloud dataproc variáveis de comando. Podem ter de ser definidas variáveis adicionais para alguns dos exemplos de comandos apresentados nesta página.

Linux/mac/Shell

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

Windows

set PROJECT=project && set HOSTNAME=hostname && set ZONE=zone
  • Defina PROJECT para o seu Google Cloud ID do projeto
  • Defina HOSTNAME para o nome do nó principal no seu cluster do Dataproc (o nome principal termina com o sufixo -m)
  • Defina ZONE para a zona das VMs no seu cluster do Dataproc (por exemplo, "us-central1-b")

Crie um túnel SSH

Comando gcloud

Execute o seguinte gcloud comando na sua máquina local para configurar um túnel SSH a partir de uma porta aberta na sua máquina local para a instância principal do cluster e executar um servidor proxy SOCKS local a escutar na porta.

Antes de executar o comando, na sua máquina local:

  1. Defina variáveis de comando usadas frequentemente
  2. Defina uma variável PORT para uma porta aberta na sua máquina local. A porta 1080 é uma escolha arbitrária, mas típica, uma vez que é provável que esteja aberta.
    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

O separador -- permite-lhe adicionar argumentos SSH ao comando gcloud compute ssh, da seguinte forma:

  • -Despecifica o encaminhamento de portas dinâmico ao nível da aplicação.
  • -N indica a gcloud para não abrir uma shell remota.

Este comando gcloud cria um túnel SSH que funciona independentemente de outras sessões de shell SSH, mantém os erros relacionados com o túnel fora da saída do shell e ajuda a evitar encerramentos inadvertidos do túnel.

Se o comando ssh falhar com a mensagem de erro bind: Cannot assign requested address, é provável que a causa seja que a porta pedida está em uso. Experimente executar o comando com um valor de variável PORT diferente.

O comando acima é executado em primeiro plano e tem de continuar a ser executado para manter o túnel ativo. O comando deve terminar automaticamente se e quando eliminar o cluster.

Cloud Shell

  1. Abra o Google Cloud Cloud Shell.
  2. Execute o comando gcloud abaixo no Cloud Shell para configurar um túnel SSH a partir de uma porta de pré-visualização do Cloud Shell para uma porta de interface Web no nó principal no seu cluster. Antes de executar o comando, no Cloud Shell :

    1. Defina variáveis de comando usadas frequentemente
    2. Defina uma variável PORT1 para uma porta do Cloud Shell no intervalo de portas 8080 a 8084 e defina uma variável PORT2 para a porta da interface Web no nó principal no seu cluster do Dataproc.
      PORT1=number
      PORT2=number
      
    gcloud compute ssh ${HOSTNAME} \
        --project=${PROJECT} --zone=${ZONE}  -- \
        -4 -N -L ${PORT1}:${HOSTNAME}:${PORT2}
    

    O separador -- permite-lhe adicionar argumentos SSH ao comando gcloud compute ssh, da seguinte forma:

    • -4 instrui o ssh a usar apenas IPv4.
    • -N indica a gcloud para não abrir uma shell remota.
    • -L ${PORT1}:${HOSTNAME}:${PORT2} especifica o encaminhamento de porta local da porta PORT1 especificada do Cloud Shell para o cluster HOSTNAME:PORT2.

    Este comando gcloud cria um túnel SSH que funciona independentemente de outras sessões de shell SSH, mantém os erros relacionados com o túnel fora da saída do shell e ajuda a evitar encerramentos inadvertidos do túnel.

Configure o seu navegador

Comando gcloud

O seu túnel SSH suporta o encaminhamento de tráfego através do protocolo SOCKS. Para configurar o navegador para usar o proxy, inicie uma nova sessão do navegador com os parâmetros do servidor proxy. Segue-se um exemplo que usa o navegador Google Chrome. HOSTNAME é o nome do nó principal do cluster (consulte a secção Defina variáveis de comando usadas frequentemente).

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 as seguintes flags do navegador Chrome:

  • -proxy-server="socks5://localhost:1080" indica ao Chrome que envie todos os pedidos de URL http:// e https:// através do servidor proxy SOCKS localhost:${PORT}, usando a versão 5 do protocolo SOCKS. ${PORT} é a variável de porta que definiu em Crie um túnel SSH. Os nomes de anfitrião dos URLs são resolvidos pelo servidor proxy e não localmente pelo Chrome.
  • --user-data-dir=/tmp/${HOSTNAME} força o Chrome a abrir uma nova janela que não está associada a uma sessão do Chrome existente. Sem esta flag, o Chrome pode abrir uma nova janela anexada a uma sessão do Chrome existente, ignorando a sua definição --proxy-server. O valor definido para --user-data-dir pode ser qualquer caminho inexistente.

Cloud Shell

Não precisa de configurar o navegador local quando usa o Cloud Shell. Depois de criar um túnel SSH, use a pré-visualização na Web do Cloud Shell para ligar à interface do cluster.

Estabeleça ligação à interface do cluster

Comando gcloud

Depois de configurar o navegador local para usar o proxy, pode navegar para o URL da interface Web no cluster do Dataproc (consulte Interfaces disponíveis). O URL do navegador tem o seguinte formato e conteúdo: http://cluster-name-m:port (porta da interface do cluster)

Cloud Shell

Clique no botão Pré-visualização Web do Cloud Shell web-preview-button e, de seguida, selecione uma das seguintes opções:

  • "Pré-visualizar na porta 8080" ou
  • "Alterar porta" e inserir o número da porta na caixa de diálogo
de acordo com o número PORT1 do Cloud Shell (porta 8080 a 8084) que transmitiu ao comando gcloud compute ssh em Crie um túnel SSH.

É aberta uma janela do navegador que se liga à porta da interface Web no nó principal do cluster.

Perguntas frequentes e sugestões de depuração

O que acontece se não vir a IU no meu navegador?

Se não vir as IU no navegador, os dois motivos mais comuns são:

  1. Tem um problema de conetividade de rede, possivelmente devido a uma firewall. Execute o seguinte comando (depois de definir variáveis locais) para ver se consegue estabelecer ligação SSH à instância principal. Se não conseguir, significa que existe um problema de conetividade.

    Linux/macOS

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

    Windows

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

  2. Outro proxy está a interferir com o proxy SOCKS. Para verificar o proxy, execute o seguinte comando curl (disponível no 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 vir uma resposta HTTP, o proxy está a funcionar. Por isso, é possível que o proxy SOCKS esteja a ser interrompido por outro proxy ou extensão do navegador.

Posso usar o encaminhamento de portas local em vez de um proxy SOCKS?

Em vez do proxy SOCKS, é possível aceder às IUs da aplicação Web em execução na instância principal com o encaminhamento de porta local SSH, que encaminha a porta da instância principal para uma porta local. Por exemplo, o seguinte comando permite-lhe aceder a localhost:1080 para alcançar cluster-name-m:8088 sem SOCKS (consulte Defina variáveis de comando usadas frequentemente):

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

A utilização de um proxy SOCKS pode ser preferível à utilização do encaminhamento de portas local, uma vez que o proxy:

  • permite-lhe aceder a todas as portas de aplicações Web sem ter de configurar um túnel de encaminhamento de porta para cada porta da IU
  • permite que as IU Web do Spark e do Hadoop resolvam corretamente os anfitriões DNS