Nesta postagem, mostramos como podemos setar o parâmetro de timeout no fluxo de trabalho(workflow) do Cloud Dataproc, dentro do Google Cloud.
O que é Cloud Dataproc?
É a plataforma de big data totalmente gerenciado, para processar grandes quantidades de dados com rapidez, de forma econômica e em grande escala. Usando ferramentas de código aberto como o Apache Spark, o Apache Hive, o Apache Hadoop e o Apache Pig combinadas à escalabilidade dinâmica do Compute Engine e ao armazenamento escalável do Cloud Storage, o Dataproc oferece à s equipes analÃticas os mecanismos e a elasticidade para executar análises na escala de petabytes por uma fração do custo dos clusters locais tradicional, além de ser facilmente incorporado a outros serviços do Google Cloud Platform (GCP).
O que é um Job?
Dentro do Dataproc, o Job seria um código que é executado dentro de um cluster, atualmente são aceitos diversos tipos, entre eles os principais são:
· Hadoop;
· Spark;
· SparkR;
· PySpark;
· Hive;
· SparkSql;
· Pig;
· Presto.
O que é um Workflow?
O fluxo de trabalho do Dataproc é um conjunto de Jobs que podem ter ou não uma dependência/sequência entre si, de certa forma, é executada um grafo acÃclico dirigido (DAG).
O uso de Workflow é recomendado para processos complexos que tenham dependências entre os Jobs.
O que é um Workflow Template?
O modelo de fluxo de trabalho permite utilizar os fluxos de trabalho de forma reutilizável.
É possÃvel criar ou selecionar um cluster para execução, permite criação de parâmetros.
Possui quatro tipos:
· Cluster gerenciado:
Permite usar um cluster gerenciado para execução dos Jobs.
Com essa opção o Workflow vai criar esse cluster “efêmero” e após a conclusão do processo, exclui-lo
· Seletor do cluster:
Permite selecionar um cluster que já exista e ao final do processo ele não será excluÃdo.
· Parametrizado:
Permite o uso parâmetros de execução, é recomendado caso o workflow execute várias vezes com valores diferentes.
· Inline:
Permite criar o cluster através de arquivos YAML.
Passo a Passo
1. O primeiro passo a fazer é o login em sua conta do GCP, para este tutorial você vai precisar de uma conta que possua um projeto.

2. Vá até a barra superior e clique no Ãcone do Cloud Shell, igual a imagem abaixo.

3. Agora temos que preparar as variáveis de ambiente que vamos usar nos outros passos:
a) Para definir a variável de região usaremos o código abaixo:
export REGION=us-central1
b) Para definir a variável de Zona usaremos o código abaixo:
export ZONE=us-central1-a
4. Nesse passo vamos definir o projeto a ser usado dentro do cloud shell, no campo [PROJECT_ID], insira o id do seu projeto:
gcloud config set project [PROJECT_ID]
5. Neste passo vamos definir a Zona a ser usada dentro do cloud shell com base na variável que definimos antes:
gcloud config set compute/zone $ZONE
6. Nesse passo vamos definir a Região a ser usada dentro do cloud shell com base na variável que definimos antes:
gcloud config set compute/region $REGION
7. Após isso vamos definir a variável PROJECT com o id do projeto:
export PROJECT=$(gcloud info --format='value(config.project)')
8. Com o código abaixo a api do dataproc será habilitada, caso já esteja pode desconsiderar:
gcloud services enable dataproc.googleapis.com sqladmin.googleapis.com
9. Caso não exista, crie um cluster do dataproc com o comando abaixo:
gcloud dataproc clusters create meu-cluster \
--image-version 1.3 \
--region $REGION \
--subnet default \
--master-machine-type n1-standard-1 \
--master-boot-disk-size 500 \
--num-workers 2 \
--worker-machine-type n1-standard-1 \
--worker-boot-disk-size 500 \
--project $PROJECT
Observações:
· A propriedade “subnet” faz referência a sub-rede que usamos no cluster.
· A propriedade “master-machine-type” permite selecionar o tipo de máquina a ser usado pelo master.
· A propriedade “worker-machine-type” permite selecionar o tipo de máquina a ser usado pelos workers.
· A propriedade “project” especifica em qual projeto será criado o cluster.
10. Neste passo vamos gerar um Workflow template, com o parametro "dag-timeout":
gcloud beta dataproc workflow-templates create meu_template \
--region $REGION \
--dag-timeout="10m"
Observação:
· Na propriedade “create” definimos um valor/nome do nosso template, o template_id no caso.
· Na propriedade “region” definimos a região em que nosso fluxo de trabalho está.
· Na propriedade “dag-timeout” definimos o tempo limite para cancelar o fluxo de trabalho se os jobs dentro dele não terminarem dentro do perÃodo especificado.
Esse tempo se aplica somente ao tempo de execução dos jobs, não é incluÃdo o tempo de criação um cluster(quando o fluxo de trabalho cria o cluster).
Ao chegar o fim do tempo se tiver algum job em execução, ele será interrompido e o fluxo de trabalho será encerrado, no caso em que o fluxo de trabalho que criou o cluster, o mesmo será apagado.
Os valores aceitos são:"s" (duração de segundo), "m" (duração de minuto), "h" (duração de hora) e "d" (duração de dia).
Exemplos:
- Segundo:
--dag-timeout="10s"
- Minuto:
--dag-timeout="10m"
- Hora:
--dag-timeout="10h"
- Dia:
--dag-timeout="1d"
Importante: Existe uma limitação para tempo limite, o valor precisa estar entre 10 minutos ("10m") e 24 horas ("24h" ou "1d").
11. Neste passo vamos selecionar um cluster para execução do Workflow template:
gcloud dataproc workflow-templates set-cluster-selector meu_template \
--cluster-labels goog-dataproc-cluster-name=meu-cluster \
--region $REGION
Observações
· Na propriedade “set-cluster-selector” colocamos o template_id.
· A propriedade “cluster-labels goog-dataproc-cluster-name” se refere ao nome do cluster que usaremos.
· A propriedade “region” se refere a região em que nosso cluster está.
12. Neste passo vamos adicionar um job de Hive no nosso template, esse job irá retornar a hora atual em que foi disparado o job:
gcloud dataproc workflow-templates add-job hive \
--step-id data_atual \
--region $REGION \
--execute "select current_timestamp" \
--workflow-template meu_template
Observações:
· A propriedade “step-id” é o id/nome do nosso job.
· A propriedade “workflow-template” faz referência ao template_id do nosso template.
· A propriedade “execute” contém o comando a ser executado, nesse caso a instrução de select.
13. Para executar nosso template, use o comando instantiate com o parametro timeout:
gcloud dataproc workflow-templates instantiate meu_template \
--region $REGION \
--timeout=2h
Observações:
· A propriedade “timeout” permite alterar o tempo limite da chamada, caso ela tenha sido feita via google-cloud-sdk, atualmente o tempo padrão é 35 minutos. Esse tempo inclui tanto a execução do job como criação de cluster, sendo assim, o tempo da execução de um fluxo de trabalho como um todo.
14. Ao abrir a aba Jobs no menu do dataproc no console do GCP, aparecerá a execução do Job:

15. Use o comando abaixo para deletar seu template:
gcloud dataproc workflow-templates delete meu_template --region $REGION
Referências
· gcloud alpha dataproc workflow-templates set-dag-timeout
· Dataproc documentation
https://cloud.google.com/dataproc/docs
· Submit a job
https://cloud.google.com/dataproc/docs/guides/submit-job
· Overview of Dataproc Workflow Templates
https://cloud.google.com/dataproc/docs/concepts/workflows/overview
· Using workflows
https://cloud.google.com/dataproc/docs/concepts/workflows/using-workflows
· Monitoring and debugging workflows
https://cloud.google.com/dataproc/docs/concepts/workflows/debugging