Alguns dos componentes de código aberto padrão incluídos nos clusters do Serviço Gerenciado para Apache Spark do Google, como Apache Hadoop e Apache Spark, fornecem interfaces da Web. Elas podem ser usadas para gerenciar e monitorar diferentes recursos e instalações do cluster, como o gerenciador de recursos YARN, o Sistema de arquivos distribuídos Hadoop (HDFS, na sigla em inglês), o MapReduce e o Spark. O Gateway de componentes fornece acesso seguro a endpoints da Web para componentes padrão e opcionais do Serviço Gerenciado para Apache Spark.
Os clusters criados com versões de imagem compatíveis do Serviço Gerenciado para Apache Spark podem ativar o acesso a interfaces de componentes na Web sem depender do uso de túneis SSH ou modificação de regras de firewall para permitir o tráfego de entrada.
Considerações
- Os usuários precisam ter a permissão dataproc.clusters.use Identity and Access Management para acessar interfaces de componentes ativadas na Web. Consulte Papéis do Serviço Gerenciado para Apache Spark.
- O Gateway de componentes pode ser usado para acessar APIs REST, como Apache Hadoop YARN e Apache Livy, e servidores de histórico.
- Quando o Gateway de componentes está ativado, o Serviço Gerenciado para Apache Spark adiciona os seguintes serviços ao primeiro nó mestre do cluster:
- Apache Knox. O certificado SSL do gateway Knox padrão é válido por 13 meses a partir da data de criação do cluster. Se ele expirar, todos os URLs da interface da Web do Gateway de componentes ficarão inativos. Para receber um novo certificado, consulte Regenerar o certificado SSL do Gateway de componentes.
- Inverting Proxy (em inglês)
- O Gateway de componentes não permite acesso direto a interfaces
node:port, mas faz proxy de um subconjunto específico de serviços automaticamente. Se você quer acessar serviços em nós (node:port), use um proxy SSH SOCKS.
Criar um cluster com o Gateway de componentes
Console
O Gateway de componentes do Serviço Gerenciado para Apache Spark é ativado por padrão quando você cria um cluster usando o Google Cloud console. É possível desativar essa configuração desmarcando a caixa de seleção Ativar o Gateway de componentes na seção Componentes do painel Configurar cluster na página do Serviço Gerenciado para Apache Spark Criar um cluster do Serviço Gerenciado para Apache Spark no Compute Engine.
Comando gcloud
Execute o comando gcloud dataproc clusters create da CLI gcloud localmente em uma janela do terminal ou no Cloud Shell.
gcloud dataproc clusters create cluster-name \ --enable-component-gateway \ --region=region \ other args ...
API REST
Defina a propriedade EndpointConfig.enableHttpPortAccess como true como parte de uma solicitação clusters.create.
Usar URLs do Gateway de componentes para acessar interfaces da Web
Quando o Gateway de componentes está ativado em um cluster, você pode se conectar a interfaces de componentes
na Web em execução no primeiro nó mestre do cluster clicando em links
fornecidos no Google Cloud console. O Gateway de componentes também define
endpointConfig.httpPorts
com um mapa de nomes de portas para URLs. Como alternativa ao uso do console,
você pode usar a ferramenta de linha de comando gcloud
ou a API REST do Serviço Gerenciado para Apache Spark para visualizar essas informações de mapeamento e copiar e colar o URL no navegador para se conectar à interface do componente.
Console
Navegue até o formulário Clusters do Serviço Gerenciado para Apache Spark no Google Cloud console e selecione o cluster para abrir o formulário Detalhes do cluster. Clique na guia Interfaces da Web para exibir uma lista de links do Gateway de componentes para as interfaces da Web dos componentes padrão e opcionais instalados no cluster. Clique em um link para abrir a interface da Web em execução no nó principal do cluster em seu navegador local.
Comando gcloud
Execute o comando da CLI gcloud
gcloud dataproc clusters describe
localmente em uma janela de terminal ou no
Cloud Shell.
gcloud dataproc clusters describe cluster-name \ --region=region
Exemplo de saída
...
config:
endpointConfig:
enableHttpPortAccess: true
httpPorts:
HDFS NameNode:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/hdfs/
MapReduce Job History:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/jobhistory/
Spark HistoryServer:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/sparkhistory/
YARN ResourceManager:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/yarn/
YARN Application Timeline:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/apphistory/
...
API REST
Chame clusters.get para receber o endpointConfig.httpPorts de nomes de portas para URLs.Usar o Gateway de componentes com o VPC-SC
O Gateway de componentes é compatível com
o VPC Service Controls.
Para a aplicação do perímetro de serviço, as solicitações a interfaces por meio do Gateway de componentes são tratadas como parte da superfície de API do Serviço Gerenciado para Apache Spark, e qualquer política de acesso que controle permissões para dataproc.googleapis.com também controlará o acesso às interfaces de usuário do Gateway de componentes.
O Gateway de componentes também é compatível com configurações do VPC-SC que dependem de
conectividade particular do Google
para clusters do Serviço Gerenciado para Apache Spark sem endereços IP externo, mas você deve configurar manualmente
sua rede para permitir o acesso da VM mestre do Serviço Gerenciado para Apache Spark
a *.dataproc.cloud.google.com por meio do intervalo de IP virtual restrito do Google
199.36.153.4/30
fazendo o seguinte:
- Siga as instruções para configurar a conectividade privada do Google para todas as APIs do Google.
- Configure o DNS com o Cloud DNS ou configure o DNS localmente no nó mestre do Serviço Gerenciado para Apache Spark para permitir o acesso a
*.dataproc.cloud.google.com.
Configurar DNS com o Cloud DNS
Crie uma zona do Cloud DNS que mapeie o tráfego destinado a *.dataproc.cloud.google.com ao intervalo de IP virtual restrito de API do Google.
Crie uma zona privada gerenciada para sua rede VPC.
gcloud dns managed-zones create ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \ --description=DESCRIPTION \ --dns-name=dataproc.cloud.google.com \ --project=PROJECT_ID
ZONE_NAME é um nome para a zona que você está criando. Por exemplo,
vpc. Esse nome será utilizado em todas as etapas a seguir.PROJECT_ID é o código do projeto que hospeda sua rede VPC.
NETWORK_NAME é o nome da sua rede VPC.
DESCRIPTION é uma descrição opcional, legível por humanos, da zona gerenciada.
Inicie uma transação.
gcloud dns record-sets transaction start --zone=ZONE_NAME
- ZONE_NAME é o nome da zona.
Adicione registros de DNS.
gcloud dns record-sets transaction add --name=*.dataproc.cloud.google.com. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=ZONE_NAME \ --ttl=300- ZONE_NAME é o nome da zona.
gcloud dns record-sets transaction add --name=dataproc.cloud.google.com. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=ZONE_NAME \ --ttl=300- ZONE_NAME é o nome da zona.
Execute a transação.
gcloud dns record-sets transaction execute --zone=ZONE_NAME --project=PROJECT_ID
ZONE_NAME é o nome da zona.
PROJECT_ID é o ID do projeto que hospeda sua rede VPC.
Configurar o DNS localmente no nó mestre do Serviço Gerenciado para Apache Spark com uma ação de inicialização
Você pode configurar o DNS localmente nos nós mestres do Serviço Gerenciado para Apache Spark para permitir conectividade privada a dataproc.cloud.google.com. Esse procedimento destina-se a testes e desenvolvimento de curto prazo. Ele não é recomendado para uso em cargas de trabalho de produção.
Estabeleça a ação de inicialização no Cloud Storage.
cat <<EOF >component-gateway-vpc-sc-dns-init-action.sh #!/bin/bash readonly ROLE="$(/usr/share/google/get_metadata_value attributes/dataproc-role)" if [[ "${ROLE}" == 'Master' ]]; then readonly PROXY_ENDPOINT=$(grep "^dataproc.proxy.agent.endpoint=" \ "/etc/google-dataproc/dataproc.properties" | \ tail -n 1 | cut -d '=' -f 2- | sed -r 's/\\([#!=:])/\1/g') readonly HOSTNAME=$(echo ${PROXY_ENDPOINT} | \ sed -n -E 's;^https://([^/?#]*).*;\1;p') echo "199.36.153.4 ${HOSTNAME} # Component Gateway VPC-SC" >> "/etc/hosts" fi EOF gcloud storage cp component-gateway-vpc-sc-dns-init-action.sh gs://BUCKET/- BUCKET é um bucket do Cloud Storage acessível a partir do cluster do Serviço Gerenciado para Apache Spark.
Crie um cluster do Serviço Gerenciado para Apache Spark com a ação de inicialização estabelecida e o Gateway de componentes ativado.
gcloud dataproc clusters create cluster-name \ --region=region \ --initialization-actions=gs://BUCKET/component-gateway-vpc-sc-dns-init-action.sh \ --enable-component-gateway \ other args ...
- BUCKET é o bucket do Cloud Storage usado na etapa 1.
Usar APIs HTTP de maneira programática por meio do Gateway de componentes
O Gateway de componentes é um proxy que incorpora o Apache Knox. Os endpoints expostos pelo Apache Knox estão disponíveis por meio do https://component-gateway-base-url/component-path.
Para autenticar de maneira programática com o Gateway de componentes, passe o cabeçalho Proxy-Authorization com um token do portador OAuth 2.0.
$ ACCESS_TOKEN="$(gcloud auth print-access-token)"
$ curl -H "Proxy-Authorization: Bearer ${ACCESS_TOKEN}" "https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/yarn/jmx"
{
"beans" : [ {
"name" : "Hadoop:service=ResourceManager,name=RpcActivityForPort8031",
"modelerType" : "RpcActivityForPort8031",
"tag.port" : "8031",
"tag.Context" : "rpc",
"tag.NumOpenConnectionsPerUser" : "{\"yarn\":2}",
"tag.Hostname" : "demo-cluster-m",
"ReceivedBytes" : 1928581096,
"SentBytes" : 316939850,
"RpcQueueTimeNumOps" : 7230574,
"RpcQueueTimeAvgTime" : 0.09090909090909091,
"RpcProcessingTimeNumOps" : 7230574,
"RpcProcessingTimeAvgTime" : 0.045454545454545456,
...
O Gateway de componentes remove o cabeçalho Proxy-Authorization antes de encaminhar solicitações para o Apache Knox.
Para encontrar o URL base do Gateway de componentes, execute:
gcloud dataproc clusters describe:
$ gcloud dataproc clusters describe <var>cluster-name</var> \
--region=<var>region</var>
...
endpointConfig:
enableHttpPortAccess: true
httpPorts:
HDFS NameNode: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/hdfs/dfshealth.html
MapReduce Job History: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/jobhistory/
Spark History Server: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/sparkhistory/
Tez: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/apphistory/tez-ui/
YARN Application Timeline: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/apphistory/
YARN ResourceManager: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/yarn/
...
O URL base é as partes do esquema e da autoridade dos URLs em httpPorts. Neste exemplo, é https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/.
Regenerar o certificado SSL do Gateway de componentes
O certificado SSL do gateway Knox padrão do Gateway de componentes é válido por:
5 anos a partir da data de criação do cluster do Serviço Gerenciado para Apache Spark em clusters criados com as versões de imagem 2.0.93, 2.1.41, 2.2.7 e mais recentes.
13 meses a partir da data de criação do cluster do Serviço Gerenciado para Apache Spark em clusters criados usando versões de imagem anteriores.
Se o certificado expirar, todos os URLs da interface da Web do Gateway de componentes ficarão inativos.
Se sua organização forneceu o certificado SSL, receba um novo certificado da organização e substitua o antigo pelo novo.
Se você estiver usando o certificado SSL autoassinado padrão, renove-o da seguinte maneira:
Use SSH para se conectar ao nó mestre do cluster do Serviço Gerenciado para Apache Spark com o
m-0sufixo de nome.Localize
gateway.jksno/var/lib/knox/security/keystores/gateway.jkscaminho.keytool -list -v -keystore /var/lib/knox/security/keystores/gateway.jks
Mova o arquivo
gateway.jkspara um diretório de backup.mv /var/lib/knox/security/keystores/gateway.jks /tmp/backup/gateway.jks
Crie um novo certificado autoassinado reiniciando o serviço Knox.
systemctl restart knox
Verifique o status do Gateway de componentes e do Knox.
systemctl status google-dataproc-component-gateway systemctl status knox
A seguir
- Criar um cluster com componentes do Serviço Gerenciado para Apache Spark.