Interfaces da Web do cluster

Alguns dos principais componentes de código aberto incluídos com os clusters do Dataproc, como o Apache Hadoop e o Apache Spark, fornecem interfaces da Web. Essas interfaces podem ser usadas para gerenciar e monitorar recursos de cluster e instalações, como o gerenciador de recursos YARN, o Hadoop Distributed File System (HDFS), o MapReduce e o Spark. Outros componentes ou aplicativos instalados no cluster também podem fornecer interfaces da Web. Consulte, por exemplo, Instalar e executar um notebook do Jupyter em um cluster do Dataproc.

Interfaces disponíveis

As interfaces a seguir estão disponíveis em um nó mestre do cluster do Dataproc. Substitua master-host-name pelo nome do nó mestre.

IU da Web Porta URL
YARN ResourceManager1 80882 http://master-host-name:8088
HDFS NameNode 98703,4 http://master-host-name:9870

1 A IU do Yarn ResourceManager não é compatível com clusters de alta disponibilidade (HA, na sigla em inglês) do Dataproc.

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

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

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

O YARN ResourceManager tem links para todas as interfaces da Web MapReduce e Spark Applications atualmente em execução e concluídas na coluna "IU de rastreamento".

Permitir APIs REST do YARN ResourceManager

Ao criar um cluster, o Dataproc define a propriedade do yarn-site.xml yarn.resourcemanager.webapp.methods-allowed para "GET,HEAD". Isso que restringe os métodos HTTP que podem ser chamados na IU da Web do Yarn Resource Manager e APIs REST para os métodos GET e HEAD. Essa configuração padrão também desativa o envio e as modificações do job por meio da API REST do YARN.

Você pode substituir os valores padrão para ativar métodos HTTP específicos na porta 8088 definindo essa propriedade como um ou mais nomes de métodos HTTP separados por vírgula. Um valor ALL permitirá 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 você definir essa propriedade para permitir métodos HTTP não padrão, configure regras de firewall e outras configurações de segurança para restringir o acesso à porta 8088.

Como se conectar a interfaces da Web

É possível se conectar a interfaces da Web em execução em um cluster do Dataproc usando o Gateway de componentes do Dataproc, o Cloud Shell do seu projeto ou a ferramenta de linha de comando gcloud da Google Cloud CLI:

  • Gateway de componentes: conecte-se com um clique às interfaces do Hadoop, do Spark e de outros componentes da IU da Web pelo console do Google Cloud. O Gateway de componentes é ativado ao criar o cluster.

  • Cloud Shell: o Cloud Shell no console do Google Cloud tem os comandos e os utilitários da CLI gcloud pré-instalados e um recurso Visualização da Web que permite se conectar rapidamente por meio de um túnel SSH a uma porta da interface da Web em um cluster. No entanto, uma conexão com o cluster do Cloud Shell usa o encaminhamento de portas local, que abre uma conexão com apenas uma porta em uma interface da Web do cluster. Vários comandos são necessários para se conectar a diversas portas. Além disso, as sessões do Cloud Shell serão encerradas automaticamente depois de um período de inatividade (30 minutos).

  • Google Cloud CLI: o comando gcloud compute ssh com encaminhamento de portas dinâmico permite estabelecer um túnel SSH e executar um servidor proxy SOCKS na parte superior do túnel. Depois de emitir esse comando, configure o navegador local para usar o proxy SOCKS. Esse método de conexão permite se conectar a várias portas em uma interface da Web do cluster. Consulte Posso usar o encaminhamento de portas local em vez de um proxy SOCKS? para mais informações.

Definir variáveis de comando mais usadas

Para criar exemplos de linha de comando de cópia e execução na máquina local ou no Cloud Shell mais facilmente, defina variáveis de comando gcloud dataproc. As variáveis adicionais podem precisar ser definidas para alguns dos exemplos de comando mostrados 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 seu ID do projeto do Google Cloud
  • Definir HOSTNAME como o nome do nó mestre no cluster do Dataproc (o nome do mestre termina com um sufixo -m)
  • Definir ZONE como a zona das VMs no cluster do Dataproc (por exemplo, "us-central1-b")

Criar um túnel SSH

Comando gcloud

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

Antes de executar o comando, na máquina local, siga estas etapas:

  1. Definir variáveis de comando mais usadas
  2. Defina uma variável PORT como uma porta aberta na máquina local. A porta 1080 é uma escolha arbitrária, mas típica, porque provavelmente está 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 adicionar argumentos SSH ao comando gcloud compute ssh da seguinte maneira:

  • -D especifica o encaminhamento de porta dinâmico no nível do aplicativo.
  • -N instrui gcloud a não abrir um shell remoto.

Esse comando gcloud cria um túnel SSH que funciona independentemente de outras sessões do shell SSH, mantém erros relacionados ao túnel fora da saída do shell e ajuda a evitar fechamentos acidentais do túnel.

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

O comando acima é executado em primeiro plano e precisa continuar em execução para manter o túnel ativo. O comando será encerrado automaticamente quando você excluir o cluster.

Cloud Shell

  1. Abra o Cloud Shell do Google Cloud.
  2. Execute o comando gcloud abaixo no Cloud Shell para configurar um túnel SSH de uma porta de visualização do Cloud Shell para uma porta de interface da Web no nó mestre do cluster. Antes de executar o comando, realize estas etapas no Cloud Shell:

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

    O separador -- permite adicionar argumentos SSH ao comando gcloud compute ssh da seguinte maneira:

    • -4 instrui o SSH a usar apenas o IPv4.
    • -N instrui gcloud a não abrir um shell remoto.
    • -L ${PORT1}:${HOSTNAME}:${PORT2} especifica o encaminhamento de portas local de PORT1 do Cloud Shell especificado para HOSTNAME:PORT2 do cluster.

    Esse comando gcloud cria um túnel SSH que funciona independentemente de outras sessões do shell SSH, mantém erros relacionados ao túnel fora da saída do shell e ajuda a evitar fechamentos acidentais do túnel.

Configurar o navegador

Comando gcloud

O túnel SSH é compatível com o proxy de tráfego que usa o protocolo SOCKS. Para configurar o navegador para usar o proxy, inicie uma nova sessão do navegador com os parâmetros do servidor proxy. Aqui está um exemplo que usa o navegador Google Chrome: HOSTNAME é o nome do nó mestre do cluster. Consulte Definir variáveis de comando mais usadas.

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

Esse comando usa as seguintes sinalizações do navegador Chrome:

  • -proxy-server="socks5://localhost:1080" informa ao Chrome para enviar todas as solicitações de URL http:// e https:// por meio do servidor proxy SOCKS localhost:${PORT}, usando a versão 5 do protocolo SOCKS. ${PORT} é a variável de porta definida em Criar um túnel SSH. Os nomes do host desses 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 esteja relacionada a uma sessão atual do Chrome. Sem essa sinalização, o Chrome pode abrir uma nova janela anexada a uma sessão atual do Chrome, ignorando a configuração --proxy-server. O valor definido para --user-data-dir pode ser qualquer caminho inexistente.

Cloud Shell

Você não precisa configurar o navegador local ao usar o Cloud Shell. Depois de criar um túnel SSH, use a visualização da Web do Cloud Shell para se conectar à interface do cluster.

Conectar-se à interface do cluster

Comando gcloud

Depois que o navegador local estiver configurado para usar o proxy, navegue até o URL da interface da 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 Visualização da Web do Cloud Shell web-preview-button e selecione uma destas opções:

  • "Visualizar na porta 8080", ou
  • "Alterar porta", inserindo o número da porta na caixa de diálogo
de acordo com o número da PORT1 do Cloud Shell (porta 8080-8084) que você transmitiu para o comando gcloud compute ssh em Criar um túnel SSH.

Uma janela do navegador que se conecta à porta da interface da Web no nó mestre do cluster é aberta.

Perguntas frequentes e dicas de depuração

E se eu não vejo a IU no navegador?

Se você não vê as IUs no navegador, veja abaixo os dois motivos mais comuns:

  1. Há um problema de conectividade de rede, possivelmente devido a um firewall. Execute o comando a seguir (depois de configurar variáveis locais) para ver se é possível executar SSH na instância mestre. Se não conseguir, há um problema de conectividade.

    Linux/MacOS

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

    Windows

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

  2. Outro proxy está interferindo no proxy SOCKS. Para verificar o proxy, execute o seguinte comando curl (disponível no Linux e no 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 você vir uma resposta HTTP, o proxy está funcionando. Portanto, é possível que o proxy SOCKS esteja sendo interrompido por outro proxy ou uma extensão do navegador.

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

Em vez do proxy SOCKS, é possível acessar IUs de aplicativos da Web em execução na instância mestre com o encaminhamento de portas local SSH, que encaminha a porta do mestre para uma porta local. Por exemplo, o comando a seguir permite acessar localhost:1080 para alcançar cluster-name-m:8088 sem SOCKS. Consulte Definir variáveis de comando mais usadas:

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

Usar um proxy SOCKS pode ser preferível a usar o encaminhamento de portas local, porque o proxy:

  • permite acessar todas as portas de aplicativo da Web sem precisar configurar um túnel de encaminhamento de cada porta da IU;
  • permita que as IUs da Web Spark e Hadoop solucionem corretamente os hosts DNS.