Tutorial Apache Oozie: o que é, fluxo de trabalho, exemplo – Hadoop

O que é OOZIE?

Apache Oozie é um agendador de fluxo de trabalho para Hadoop. É um sistema que executa o fluxo de trabalho de trabalhos dependentes. Aqui, os usuários têm permissão para criar Gráficos Acíclicos Dirigidos de fluxos de trabalho, que podem ser executados em paralelo e sequencialmente no Hadoop.

Consiste em duas partes:

  • Mecanismo de fluxo de trabalho: A responsabilidade de um mecanismo de fluxo de trabalho é armazenar e executar fluxos de trabalho compostos de trabalhos Hadoop, por exemplo, MapReduce, Pig, Hive.
  • Motor coordenador: executa trabalhos de fluxo de trabalho com base em programações predefinidas e disponibilidade de dados.

Oozie é escalável e pode gerenciar a execução oportuna de milhares de fluxos de trabalho (cada um composto por dezenas de trabalhos) em um cluster Hadoop.

OOZIE

Oozie também é muito flexível. Pode-se facilmente iniciar, parar, suspender e executar novamente trabalhos. Oozie torna muito fácil executar novamente fluxos de trabalho com falha. Pode-se compreender facilmente como pode ser difícil recuperar trabalhos perdidos ou com falha devido a tempo de inatividade ou falha. É até possível ignorar um nó específico com falha.

Como funciona o OOZIE?

Oozie é executado como um serviço no cluster e os clientes enviam definições de fluxo de trabalho para processamento imediato ou posterior.

O fluxo de trabalho do Oozie consiste em nós de ação e nós de fluxo de controle.

An nó de ação representa uma tarefa de fluxo de trabalho, por exemplo, mover arquivos para HDFS, executar um MapReduce, Pig ou Colméia jobs, importando dados usando Sqoop ou executando um script shell de um programa escrito em Java.

A nó de fluxo de controle controla a execução do fluxo de trabalho entre ações, permitindo construções como lógica condicional em que diferentes ramificações podem ser seguidas dependendo do resultado do nó de ação anterior.

Nó inicial, Nó final e Nó de erro se enquadram nesta categoria de nós.

Nó inicial, designa o início do trabalho de fluxo de trabalho.

Nó final, sinaliza o fim do trabalho.

Nó de erro designa a ocorrência de um erro e a mensagem de erro correspondente a ser impressa.

No final da execução de um fluxo de trabalho, o retorno de chamada HTTP é usado pelo Oozie para atualizar o cliente com o status do fluxo de trabalho. A entrada ou saída de um nó de ação também pode acionar o retorno de chamada.

Exemplo de diagrama de fluxo de trabalho

Exemplo de diagrama de fluxo de trabalho

Empacotando e implantando um aplicativo de fluxo de trabalho Oozie

Um aplicativo de fluxo de trabalho consiste na definição de fluxo de trabalho e em todos os recursos associados, como arquivos MapReduce Jar, scripts Pig, etc. Os aplicativos precisam seguir uma estrutura de diretório simples e são implantados em HDFS para que Oozie possa acessá-los.

Um exemplo de estrutura de diretório é mostrado abaixo-

<name of workflow>/</name>
??? lib/
? ??? hadoop-examples.jar
??? workflow.xml

É necessário manter o workflow.xml (um arquivo de definição de fluxo de trabalho) no diretório de nível superior (diretório pai com o nome do fluxo de trabalho). O diretório Lib contém arquivos Jar contendo classes MapReduce. O aplicativo de fluxo de trabalho em conformidade com este layout pode ser construído com qualquer ferramenta de construção, por exemplo, Ant ou Maven.

Tal compilação precisa ser copiada para HDFS usando um comando, por exemplo –

% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow

Etapas para executar um trabalho de fluxo de trabalho do Oozie

Nesta seção, veremos como executar um trabalho de fluxo de trabalho. Para executar isso, usaremos a ferramenta de linha de comando Oozie (um programa cliente que se comunica com o servidor Oozie).

1. Exporte a variável de ambiente OOZIE_URL que informa ao comando oozie qual servidor Oozie usar (aqui estamos usando um em execução localmente):

% export OOZIE_URL="http://localhost:11000/oozie"

2. Execute o trabalho de fluxo de trabalho usando-

% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run

A opção -config refere-se a um local Java arquivo de propriedades contendo definições para os parâmetros no arquivo XML de fluxo de trabalho, bem como oozie.wf.application.path, que informa ao Oozie a localização do aplicativo de fluxo de trabalho no HDFS.

Conteúdo de exemplo do arquivo de propriedades:

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>

3. Obtenha o status do trabalho do fluxo de trabalho

O status do trabalho de fluxo de trabalho pode ser visto usando o subcomando 'job' com a opção '-info' e especificando o ID do trabalho após '-info'.

e.g., % oozie job -info <job id>

A saída mostra o status que é RUNNING, KILLED ou BUCCEEDED.

4. Os resultados da execução bem-sucedida do fluxo de trabalho podem ser vistos usando comandos do Hadoop como-

% hadoop fs -cat <location of result>

Por que usar Oozie?

O principal objetivo do uso do Oozie é gerenciar diferentes tipos de trabalhos processados ​​no sistema Hadoop.

As dependências entre trabalhos são especificadas por um usuário na forma de gráficos acíclicos direcionados. Oozie consome essas informações e cuida de sua execução na ordem correta especificada em um fluxo de trabalho. Dessa forma, o tempo do usuário para gerenciar o fluxo de trabalho completo é economizado. Além disso, Oozie dispõe de uma disposição para especificar a frequência de execução de um determinado trabalho.

Características do Oozie

  • Oozie possui API de cliente e interface de linha de comando que pode ser usada para iniciar, controlar e monitorar trabalhos de Java aplicação.
  • Usando suas APIs de serviço da Web é possível controlar trabalhos de qualquer lugar.
  • Oozie tem provisão para executar trabalhos que estão programados para serem executados periodicamente.
  • Oozie permite enviar notificações por e-mail após a conclusão dos trabalhos.