Nesta
postagem, mostramos como usar o fluxo de trabalho(workflow) parametrizado do
Cloud Dataproc, dentro do Google Cloud. |
É 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 - Linha de comando
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 usaremos nos outros passos:
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:
--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 usaremos no
cluster.
gcloud dataproc workflow-templates create meu_template --region $REGION
Observação:
·
Na propriedade “create” definimos o valor do nosso template_id.
11. Crie um bucket no Cloud Storage com a finalidade de colocar os
scripts a serem usados no Dataproc:
gsutil mb -l $REGION gs://$PROJECT-scripts
12. Utilize o comando nano para gerar o arquivo create.sql com o seguinte
conteúdo:
CREATE EXTERNAL TABLE tb_test (TestDate DATE, TestType STRING)
STORED AS PARQUET LOCATION '${hivevar:meu_bucket}';"
13. Copie seu arquivo para o seu bucket:
gsutil cp create.sql gs://$PROJECT-scripts/
14. Neste passo vamos adicionar um job de Hive no nosso template, esse
job vai usar nosso arquivo do passo anterior:
gcloud dataproc workflow-templates add-job hive \
--step-id cria_tabela \
--region us-central1 \
--file
gs://$PROJECT-scripts/create.sql \
--workflow-template meu_template
\
--params meu_bucket=gs://$PROJECT-scripts/tb_test
Observações:
·
A propriedade “step-id” é o id do nosso job.
·
A propriedade “workflow-template” faz referência ao template_id do
nosso template.
·
A propriedade “params” contêm os parâmetros a ser passados para a
query, nesse cenário definimos o parâmetro meu_bucket que será o diretório
da nossa external table.
·
A propriedade “file” contêm o comando a ser executado dentro do
arquivo no nosso diretório, nesse caso a instrução de create.
15. Exporte o template como um arquivo de configuração .yaml:
gcloud dataproc workflow-templates export meu_template
--destination=hive-template.yaml --region us-central1
Observação:
·
Esse arquivo será gerado na sua pasta atual do Cloud Shell, para visualizar
use o comando ls
13. Edite o arquivo gerado, vou usar o nano como exemplo:
nano hive-template.yaml
14. Após o StepId adicione o trecho abaixo:
parameters:
- name:
meu_bucket
fields:
- jobs['
cria_tabela'].hiveJob.scriptVariables['
meu_bucket']
15. Atualize seu template:
gcloud dataproc workflow-templates import meu_template \
--source=hive-template.yaml --region us-central1
16. Adicione um cluster ao seu 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á.
17. Execute o template passando o valor do parâmetro:
gcloud dataproc workflow-templates instantiate meu-template \
--parameters="meu_bucket=${meu_bucket}"
18. Use o comando abaixo para remover um job do seu template:
gcloud dataproc workflow-templates remove-job meu_template --step-id cria_tabela --region $REGION
19. Use o comando abaixo para deletar seu template:
gcloud dataproc workflow-templates delete meu_template --region $REGION
Referências
·
Using Apache Hive on Cloud Dataproc
https://cloud.google.com/solutions/using-apache-hive-on-cloud-dataproc
·
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
·
passing parameters via dataproc workflow-templates
https://stackoverflow.com/questions/46820897/passing-parameters-via-dataproc-workflow-templates