Provisionar e usar um cluster gerenciado do Hadoop/Spark com o Cloud Dataproc (linha de comando)

1. Visão geral

Com o Cloud Dataproc, um serviço Spark e Hadoop gerenciado, você pode usar ferramentas de dados de código aberto para processamento em lote, consultas, streaming e machine learning. A automação do Cloud Dataproc facilita a criação e o gerenciamento de clusters. Ela também gera economia porque permite desativar os clusters que não estão em uso. Com menos tempo e dinheiro gastos com administração, você pode se concentrar nos jobs e dados.

Este tutorial é uma adaptação de https://cloud.google.com/dataproc/overview

O que você vai aprender

  • Como criar um cluster gerenciado do Cloud Dataproc, com o Apache Spark pré-instalado
  • Como enviar um job do Spark
  • Como redimensionar um cluster
  • Como se conectar via SSH ao nó mestre de um cluster do Dataproc
  • Como usar a gcloud para examinar clusters, jobs e regras de firewall
  • Como encerrar o cluster

O que é necessário

Como você vai usar este tutorial?

Apenas leitura Leitura e exercícios

Como você classificaria sua experiência com o uso dos serviços do Google Cloud Platform?

Iniciante Intermediário Proficiente

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma se você ainda não tiver uma conta do Gmail ou do G Suite.

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID.

  1. Em seguida, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.

A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

3. Ative as APIs Cloud Dataproc e Google Compute Engine

Clique no ícone de menu no canto superior esquerdo da tela.

2bfc27ef9ba2ec7d.png

Selecione "API Manager" no menu suspenso.

408af5f32c4b7c25.png

Clique em Ativar APIs e serviços.

a9c0e84296a7ba5b.png

Pesquise "Compute Engine" na caixa de pesquisa. Clique em "API Google Compute Engine". na lista de resultados que aparece.

b6adf859758d76b3.png

Na página do Google Compute Engine, clique em Ativar.

da5584a1cbc77104.png

Depois de ativado, clique na seta apontando para a esquerda para voltar.

Agora procure "API Google Cloud Dataproc". e também o ativar.

f782195d8e3d732a.png

4. Iniciar o Cloud Shell

O Cloud Shell é uma máquina virtual com base em Debian que contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Isso significa que tudo que você precisa para este codelab é um navegador (sim, funciona em um Chromebook).

  1. Para ativar o Cloud Shell no Console do Cloud, basta clicar em Ativar o Cloud Shell fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q. Leva apenas alguns instantes para provisionar e se conectar ao ambiente.

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 às 10.13.43 PM.png

Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto estará configurado com seu PROJECT_ID.

gcloud auth list

Resposta ao comando

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Resposta ao comando

[core]
project = <PROJECT_ID>

Se, por algum motivo, o projeto não estiver definido, basta emitir o seguinte comando:

gcloud config set project <PROJECT_ID>

Quer encontrar seu PROJECT_ID? Veja qual ID você usou nas etapas de configuração ou procure-o no painel do Console do Cloud:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

O Cloud Shell também define algumas variáveis de ambiente por padrão, o que pode ser útil ao executar comandos futuros.

echo $GOOGLE_CLOUD_PROJECT

Resposta ao comando

<PROJECT_ID>
  1. Defina a zona padrão e a configuração do projeto:
gcloud config set compute/zone us-central1-f

É possível escolher uma variedade de zonas diferentes. Para mais informações, consulte Regiões e zonas.

5. Crie um cluster do Cloud Dataproc

Depois do lançamento do Cloud Shell, use a linha de comando para invocar o comando gcloud do SDK Cloud ou outras ferramentas disponíveis na instância da máquina virtual.

Escolha um nome de cluster para usar neste laboratório:

$ CLUSTERNAME=${USER}-dplab

Vamos começar criando um novo cluster:

$ gcloud dataproc clusters create ${CLUSTERNAME} \
  --region=us-central1 \
  --scopes=cloud-platform \
  --tags codelab \
  --zone=us-central1-c

As configurações padrão do cluster, que incluem dois nós de trabalho, devem ser suficientes para este tutorial. O comando acima inclui a opção --zone para especificar a zona geográfica em que o cluster será criado e duas opções avançadas, --scopes e --tags, que são explicadas a seguir quando você usa os recursos ativados por elas. Consulte o comando gcloud dataproc clusters create do SDK Cloud para informações sobre como usar sinalizações de linha de comando para personalizar configurações de cluster.

6. Envie um job do Spark para o cluster

É possível enviar um job por meio de uma solicitação jobs.submit da API Cloud Dataproc, usando a ferramenta de linha de comando gcloud ou pelo Console do Google Cloud Platform. Você também pode se conectar a uma instância de máquina no cluster usando SSH e depois executar um job a partir dessa instância.

Envie um job usando a ferramenta gcloud na linha de comando do Cloud Shell:

$ gcloud dataproc jobs submit spark --cluster ${CLUSTERNAME} \
  --class org.apache.spark.examples.SparkPi \
  --jars file:///usr/lib/spark/examples/jars/spark-examples.jar -- 1000

Durante a execução do job, a saída vai aparecer na janela do Cloud Shell.

Interrompa a saída inserindo Ctrl+C. Isso interromperá o comando gcloud, mas o job ainda estará em execução no cluster do Dataproc.

7. Listar jobs e reconectar

Imprimir uma lista de tarefas:

$ gcloud dataproc jobs list --cluster ${CLUSTERNAME}

O job enviado mais recentemente fica no topo da lista. Copie o ID do job e cole no lugar de "jobId" no comando abaixo. O comando vai se reconectar ao job especificado e exibir a saída dele:

$ gcloud dataproc jobs wait jobId

Quando o job terminar, a saída incluirá uma aproximação do valor de Pi.

493928df54f61386.png

8. Redimensionar cluster

Para executar cálculos maiores, adicione mais nós ao cluster para acelerá-lo. O Dataproc permite adicionar e remover nós do cluster a qualquer momento.

Examine a configuração do cluster:

$ gcloud dataproc clusters describe ${CLUSTERNAME}

Aumente o cluster adicionando alguns nós preemptivos:

$ gcloud dataproc clusters update ${CLUSTERNAME} --num-secondary-workers=2

Examine o cluster novamente:

$ gcloud dataproc clusters describe ${CLUSTERNAME}

Além do workerConfig da descrição original do cluster, agora há também um secondaryWorkerConfig que inclui dois instanceNames para os workers preemptivos. O Dataproc mostra o status do cluster como "Pronto" enquanto os novos nós estão sendo inicializados.

Como você começou com dois nós e agora tem quatro, os jobs do Spark serão executados duas vezes mais rápido.

9. SSH no cluster

Conecte-se via SSH ao nó mestre, cujo nome da instância é sempre o nome do cluster com -m anexado:

$ gcloud compute ssh ${CLUSTERNAME}-m --zone=us-central1-c

Na primeira vez que você executar um comando SSH no Cloud Shell, ele vai gerar chaves SSH para sua conta. Você pode escolher uma senha longa ou usar uma em branco por enquanto e mudar mais tarde com ssh-keygen, se quiser.

Na instância, verifique o nome do host:

$ hostname

Como você especificou --scopes=cloud-platform quando criou o cluster, é possível executar comandos gcloud nele. Liste os clusters no seu projeto:

$ gcloud dataproc clusters list

Saia da conexão SSH quando terminar:

$ logout

10. Examinar tags

Ao criar o cluster, você incluiu uma opção --tags para adicionar uma tag a cada nó no cluster. As tags são usadas para anexar regras de firewall a cada nó. Você não criou regras de firewall correspondentes neste codelab, mas ainda é possível examinar as tags em um nó e as regras de firewall na rede.

Imprima a descrição do nó mestre:

$ gcloud compute instances describe ${CLUSTERNAME}-m --zone us-central1-c

Procure tags: no final da saída e veja se ele inclui codelab.

Imprima as regras de firewall:

$ gcloud compute firewall-rules list

Observe as colunas SRC_TAGS e TARGET_TAGS. Ao anexar uma tag a uma regra de firewall, é possível especificar que ela seja usada em todos os nós que a têm.

11. Encerrar o cluster

Para encerrar um cluster, envie uma solicitação clusters.delete da API Cloud Dataproc, na linha de comando usando o executável gcloud dataproc clusters delete ou no Console do Google Cloud Platform.

Vamos encerrar o cluster usando a linha de comando do Cloud Shell:

$ gcloud dataproc clusters delete ${CLUSTERNAME} --region us-central1

12. Parabéns!

Você aprendeu a criar um cluster do Dataproc, enviar um job do Spark, redimensionar um cluster, usar SSH para fazer login no nó mestre, usar a gcloud para examinar clusters, jobs e regras de firewall e encerrar seu cluster usando a gcloud.

Saiba mais

Licença

Este trabalho está sob a licença Atribuição 3.0 Genérica da Creative Commons e a licença Apache 2.0.