Tutorial Oozie: Aprenda como agendar seus trabalhos do Hadoop



Tutorial do Apache Oozie: Oozie é um sistema de agendador de fluxo de trabalho para gerenciar trabalhos do Hadoop. É um sistema escalonável, confiável e extensível.

Antes de iniciar este tutorial do Apache Oozie, vamos entender onde o sistema do planejador é usado. Em cenários de tempo real, um trabalho depende de outros trabalhos, como a saída de uma tarefa MapReduce pode ser passada para o trabalho do Hive para processamento posterior. O próximo cenário pode ser agendar um conjunto de tarefas com base no tempo, como diário, semanal, mensal ou com base na disponibilidade de dados. O Apache Oozie fornece a capacidade de lidar facilmente com esses tipos de cenários. É por isso que o Apache Oozie é uma parte importante do .

Neste blog de tutorial do Apache Oozie, estaremos cobrindo:





  • Introdução ao Apache Oozie
  • Fluxo de Trabalho Oozie
  • Coordenador Oozie
  • Pacote Oozie
  • Trabalho de fluxo de trabalho de contagem de palavras
  • Trabalho de Coordenador de Contagem de Palavras com Base no Tempo

Começaremos este tutorial do Oozie apresentando o Apache Oozie. Em seguida, indo em frente, entenderemos os tipos de trabalhos que podem ser criados e executados usando o Apache Oozie.

Tutorial do Apache Oozie: Introdução ao Apache Oozie

Apache Oozie - Tutorial Oozie - EdurekaApache Oozie é um sistema de agendamento para gerenciar e executar tarefas do Hadoop em um ambiente distribuído. Podemos criar um pipeline desejado combinando diferentes tipos de tarefas. Pode ser sua tarefa Hive, Pig, Sqoop ou MapReduce. Usando o Apache Oozie, você também pode agendar seus trabalhos. Dentro de uma sequência da tarefa, dois ou mais trabalhos também podem ser programados para serem executados paralelamente. É um sistema escalonável, confiável e extensível.



O Oozie é um aplicativo da web Java de código aberto, que é responsável por acionar as ações do fluxo de trabalho. Ele, por sua vez, usa o mecanismo de execução Hadoop para executar as tarefas.

O Apache Oozie detecta a conclusão de tarefas por meio de callback e polling. Quando o Oozie inicia uma tarefa, ele fornece um URL HTTP de retorno de chamada exclusivo para a tarefa e notifica esse URL quando a tarefa é concluída. Se a tarefa falhar em chamar o URL de retorno de chamada, o Oozie pode pesquisar a tarefa para conclusão.

como implantar um aplicativo java em aws

Existem três tipos de trabalhos no Apache Oozie:



  • Trabalhos de fluxo de trabalho Oozie & minus Estes são gráficos acíclicos direcionados (DAGs) que especificam uma sequência de ações a serem executadas.
  • Empregos de coordenador Oozie & minus Consistem em trabalhos de fluxo de trabalho acionados por tempo e disponibilidade de dados.
  • Pacotes Oozie & minus Isso pode ser referido como um pacote de vários coordenadores e trabalhos de fluxo de trabalho.

Agora, vamos entender todos esses trabalhos um por um.

Tutorial do Apache Oozie: Fluxo de trabalho do Oozie

O fluxo de trabalho é uma sequência de ações organizadas em um gráfico acíclico direto (DAG). As ações são dependentes umas das outras, pois a próxima ação só pode ser executada após a saída da ação atual. Uma ação de fluxo de trabalho pode ser uma ação Pig, ação Hive, ação MapReduce, ação Shell, ação Java etc. Pode haver árvores de decisão para decidir como e em qual condição um trabalho deve ser executado.

Podemos criar diferentes tipos de ações com base no trabalho e cada tipo de ação pode ter seu próprio tipo de tags.O fluxo de trabalho e os scripts ou jars devem ser colocados no caminho HDFS antes de executar o fluxo de trabalho.

Comando: oozie job –oozie http: // localhost: 11000 / oozie -config job.properties -run

Para verificar o status do trabalho, você pode acessar o console da web do Oozie, ou seja, http: // host_name: 11000 . Ao clicar no trabalho, você verá o status do trabalho.

Em cenários, onde queremos executar vários trabalhos paralelamente, podemos usar Garfo . Sempre que usamos fork, temos que usar Join como um nó final para fork. Para cada bifurcação, deve haver uma junção. Join assume que todos os nós em execução paralela são filhos de um único fork. Por exemplo, podemos criar duas tabelas ao mesmo tempo paralelamente.

Se quisermos executar uma ação com base na saída de decisão, podemos adicionar tags de decisão. Por exemplo, se já temos a mesa da colmeia, não precisaremos criá-la novamente. Nessa situação, podemos adicionar uma tag de decisão para não executar as etapas de criação da tabela se a tabela já existir. Os nós de decisão têm uma tag de switch semelhante ao switch case.

O valor de job-tracker, name-node, script e param podem ser passados ​​diretamente. Mas, isso se torna difícil de gerenciar. É aqui que um arquivo de configuração (ou seja, arquivo .property) se torna útil.

Tutorial do Apache Oozie: Coordenador do Oozie

Você pode agendar fluxos de trabalho complexos, bem como fluxos de trabalho que são agendados regularmente usando o Coordenador. O Oozie Coordinators aciona os trabalhos de fluxo de trabalho com base em tempo, dados ou predicados de evento. Os fluxos de trabalho dentro do coordenador de trabalho começam quando a condição fornecida é satisfeita.

As definições necessárias para os trabalhos de coordenador são:

  • começar & menos Data e hora de início para o trabalho.
  • fim & menos Data e hora de término do trabalho.
  • fuso horário & menos Fuso horário do aplicativo do coordenador.
  • frequência & menos A frequência, em minutos, para executar as tarefas.

Mais algumas propriedades estão disponíveis para informações de controle:

  • tempo esgotado & menos O tempo máximo, em minutos, pelo qual uma ação aguardará para satisfazer as condições adicionais, antes de ser descartada. 0 indica que, se todos os eventos de entrada não forem satisfeitos no momento da materialização da ação, o tempo limite da ação deve ser atingido imediatamente. -1 indica que não há tempo limite, a ação esperará para sempre. O valor padrão é -1.
  • simultaneidade & menos O número máximo de ações para um trabalho que pode ser executado paralelamente. O valor padrão é 1.
  • execução - Especifica a ordem de execução se várias instâncias do trabalho do coordenador atenderam aos critérios de execução. Pode ser:
    • FIFO (padrão)
    • UEPS
    • LAST_ONLY

Comando: oozie job –oozie http: // localhost: 11000 / oozie -config -run

Se uma propriedade de configuração usada na definição não for fornecida com a configuração da tarefa ao enviar a tarefa do coordenador, o envio da tarefa falhará.

Tutorial do Apache Oozie: Pacote Oozie

Sistema Oozie Bundlepermite definir e executar um conjunto de aplicativos de coordenador, geralmente chamado de pipeline de dados. Em um pacote configurável Oozie, não há dependência explícita entre os aplicativos do coordenador. No entanto, você pode usar a dependência de dados dos aplicativos do coordenador para criar um pipeline de aplicativo de dados implícito.Você pode iniciar / parar / suspender / retomar / executar novamente o pacote. Proporciona um controle operacional melhor e mais fácil.

Hora do pontapé inicial & menos A hora em que um bundle deve iniciar e enviar inscrições de coordenador.

Avançando neste tutorial do Apache Oozie, entenderemos como criar uma tarefa de fluxo de trabalho.

Tutorial do Apache Oozie: Trabalho de fluxo de trabalho de contagem de palavras

Neste exemplo, vamos executar uma tarefa de contagem de palavras usando o Apache Oozie. Não discutiremos aqui como escrever um programa de contagem de palavras MapReduce. Portanto, antes de seguir este tutorial do Apache Oozie, você precisa baixar este jarra de contagem de palavras Arquivo. Agora, crie um diretório WordCountTest onde colocaremos todos os arquivos. Crie um diretório lib onde colocaremos o jar de contagem de palavras, conforme mostrado nas imagens abaixo.

Agora, vamos seguir em frente e criar job.properties E workflow.xml arquivos, onde especificaremos o trabalho e os parâmetros associados a ele.

job.properties

Primeiro, estamos criando um job.properties arquivo, onde estamos definindo o caminho de NameNode & ResourceManager. O caminho NameNode é necessário para resolver o caminho do diretório do fluxo de trabalho e o caminho do jobTracker ajudará no envio do trabalho ao YARN. Precisamos fornecer o caminho do workflow.xml arquivo, que deve ser armazenado no HDFS.

workflow.xml

Em seguida, precisamos criar o workflow.xml arquivo, onde definiremos todas as nossas ações e as executaremos. Primeiro, precisamos especificar o nome do aplicativo de fluxo de trabalho, ou seja, WorkflowRunnerTest . Então, estamos especificando o nó inicial . O nó inicial ( dentro a começar a etiqueta ) é o ponto de entrada para um trabalho de fluxo de trabalho. Ele aponta para o primeiro nó do fluxo de trabalho de onde o trabalho deve começar. Como você pode ver na imagem abaixo, o próximo nó é intersection0 de onde o trabalho começará.

A seguir, estamos especificando a tarefa a ser executada, no nó de ação. Estamos executando uma tarefa MapReduce WordCount aqui. Precisamos especificar as configurações necessárias para executar esta tarefa MapReduce. Estamos definindo o rastreador de trabalho e o endereço NameNode.

A seguir está o elemento preparado, que é usado exclusivamente para limpeza de diretório, antes de executar a ação. Aqui, estamos executando a operação de exclusão no HDFS para excluir o out1 pasta se já tiver sido criada. A tag Prepare é usada para criar ou excluir uma pasta antes de executar o trabalho. Em seguida, estamos especificando as propriedades MapReduce, como nome da fila de trabalho, classe do mapeador, classe do redutor, classe da chave de saída e classe do valor de saída.

A última configuração de tarefa MapReduce é o diretório de entrada e saída no HDFS. O diretório de entrada é dados diretório, que é armazenado no caminho raiz de NameNode . Por fim, especificaremos o elemento kill se o trabalho falhar.

Agora precisamos mover o WordCountTest pasta no HDFS, como especificamos em oozie.wf.application.path propriedade em job.properties Arquivo. Então, estamos copiando o WordCountTest pasta no diretório raiz do Hadoop.

Comando: hadoop fs -put WordCountTest /

como iniciar o aws cli

Para verificar, você pode ir para NameNode Web UI e verificar se a pasta foi carregada no diretório raiz HDFS ou não.

Agora, estamos prontos para seguir em frente e executar o trabalho de fluxo de trabalho.

Comando: oozie job –oozie http: // localhost: 11000 / oozie -config job.properties -run

Assim que tivermos executado nosso trabalho, obteremos o id do trabalho (ou seja, 0000009-171219160449620-oozie-edur-W ) conforme mostrado na imagem acima. Você pode ir e verificar o trabalho que enviou na IU da Web do Oozie, ou seja, localhost: 11000 . Você pode ver na imagem abaixo, o trabalho que enviamos está listado abaixo.

Se você observar na imagem acima, verá o ID do trabalho, o nome do trabalho, o status do trabalho, o usuário que enviou o trabalho, hora de criação, início e última modificação. Você pode clicar na tarefa para obter mais detalhes, como:

  • Informações do trabalho

  • Definição de Trabalho

  • Configuração de Trabalho

Como o status da tarefa é bem-sucedido, precisamos ir ao diretório raiz do HDFS e verificar se o diretório de saída foi criado ou não.

Como você pode ver que o oozieout foi criado no HDFS, então agora vamos dar uma olhada no arquivo de saída que foi criado.

Como vimos como criar um trabalho de fluxo de trabalho Oozie, agora avançaremos neste blog do Tutorial do Apache Oozie e entenderemos como criar um trabalho de coordenador.

Tutorial do Apache Oozie: Trabalho de coordenador de contagem de palavras com base no tempo

Neste exemplo, estaremos criando um trabalho de coordenador de contagem de palavras baseado em tempo que será executado após um intervalo de tempo específico. Você pode criar e agendar um trabalho usando o Apache Oozie que precisa ser executado diariamente ou periodicamente.

Vamos avançar rapidamente neste tutorial do Apache Oozie e criar um trabalho de coordenador. Aqui estaremos criando três arquivos, ou seja, coordinator.properties , coordinator.xml E workflow.xml Arquivo. Novamente, aqui vamos colocar o w contagem de ordens jarra dentro do lib diretório conforme mostrado na imagem abaixo.

Agora, vamos examinar esses arquivos individualmente. Primeiro, começaremos com o arquivo coordinator.properties.

Aqui, estamos especificando a frequência com que o fluxo de trabalho será executado. A frequência é sempre expressa em minutos. No nosso caso, este trabalho de coordenador será executado uma vez a cada hora entre o horário especificado. A frequência é usada para capturar os intervalos periódicos nos quais os conjuntos de dados são produzidos e os aplicativos do coordenador são planejados para execução.

Para definir a frequência em minutos, horas, dias e meses, use o seguinte formato:

$ {coord: minutos (int n)} n $ {coord: minutos (45)} -> 45
$ {coord: horas (int n)} n * 60 $ {coord: horas (3)} -> 180
$ {coord: dias (int n)} variável $ {coord: days (2)} -> minutos em 2 dias completos a partir da data atual
$ {coord: meses (int n)} variável $ {coord: months (1)} -> minutos em 1 mês completo a partir da data atual

Em seguida, estamos definindo o horário de início e término do trabalho, conforme mostrado na imagem acima. startTime é a data e hora de início para o trabalho e Fim do tempo é a data e hora de término do trabalho.

Em seguida, estamos especificando o url NameNode e ResourceManager, que será usado para consultar o arquivo workflow.xml no HDFS e enviar trabalhos para o YARN, respectivamente. Por fim, estamos especificando o caminho workflow.xml, que armazenaremos no HDFS. Também especificaremos o caminho do aplicativo onde todos os arquivos e o diretório lib serão armazenados.

O segundo arquivo é coordinator.xml onde usaremos todas as propriedades que especificamos no coordinator.properties Arquivo. Agora, primeiro, especificaremos as propriedades do aplicativo do coordenador, ou seja, nome, frequência e fuso horário. A seguir, especificaremos os fluxos de trabalho um por um. Aqui, temos apenas um fluxo de trabalho. Portanto, dentro do elemento de ação, criaremos o elemento de fluxo de trabalho, onde especificaremos o caminho do aplicativo.

diferença entre css e css3

Em seguida, avançando, temos que criar workflow.xml arquivo onde especificaremos a tarefa. É semelhante ao workflow.xml arquivo, que criamos no trabalho de fluxo de trabalho.

Agora, novamente, vamos mover isso WordCountTest_TimedBased diretório para HDFS.

Comando : hadoop fs -put WordCountTest_TimeBased /

Agora, estamos prontos para seguir em frente e executar este trabalho de coordenador neste Tutorial Oozie. Vamos prosseguir e executá-lo.

Comando : oozie job –oozie http: // localhost: 11000 / oozie -config coordinator.properties -run

Anote este ID de trabalho do coordenador (ou seja, 0000010-171219160449620-oozie-edur-C). Isso o ajudará a rastrear seu trabalho na IU da Web do Oozie.

Você pode ver o trabalho listado na guia Trabalhos do coordenador na IU da Web do Oozie. Semelhante ao trabalho de fluxo de trabalho, temos nome, status, usuário, frequência, hora de início e término do trabalho. Ao clicar em um determinado trabalho, você verá os detalhes do trabalho, conforme mostrado nas imagens abaixo.

  • Informações do trabalho do coordenador

  • Definição do cargo de coordenador

  • Configuração do trabalho do coordenador

Agora, conforme examinamos as diferentes guias. Voltaremos ao diretório raiz HDFS onde a pasta de saída será criada. Como você pode ver na imagem abaixo, oozieTimeBasedout diretório foi criado, conforme especificamos em workflow.xml Arquivo.

Agora, vamos dar uma olhada no arquivo de saída que foi criado.

Espero que você tenha achado este blog do tutorial do Apache Oozie informativo. Se você estiver interessado em aprender mais, pode passar por este que fala sobre Big Data e como o Hadoop está resolvendo desafios relacionados a Big Data.

Agora que você entendeu o Apache Oozie, verifique o pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo. O curso Edureka Big Data Hadoop Certification Training ajuda os alunos a se tornarem especialistas em HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume e Sqoop usando casos de uso em tempo real no varejo, mídia social, aviação, turismo, domínio financeiro.

Tem alguma questão para nós? Mencione isso na seção de comentários e entraremos em contato com você.