Tutorial Oozie: scopri come programmare i tuoi lavori Hadoop



Apache Oozie Tutorial: Oozie è un sistema di pianificazione del flusso di lavoro per gestire i lavori Hadoop. È un sistema scalabile, affidabile ed estensibile.

Prima di iniziare questo tutorial su Apache Oozie, capiamo dove viene utilizzato il sistema di pianificazione. In scenari in tempo reale, un lavoro dipende da altri lavori, ad esempio l'output di un'attività MapReduce può essere passato a un lavoro Hive per un'ulteriore elaborazione. Lo scenario successivo può essere la pianificazione di una serie di attività sulla base del tempo come giornaliero, settimanale, mensile o in base alla disponibilità dei dati. Apache Oozie ti fornisce il potere di gestire facilmente questi tipi di scenari. Questo è il motivo per cui Apache Oozie è una parte importante di .

come aggiungere in java

In questo blog tutorial di Apache Oozie, tratteremo:





  • Introduzione di Apache Oozie
  • Flusso di lavoro di Oozie
  • Coordinatore Oozie
  • Pacchetto Oozie
  • Lavoro flusso di lavoro conteggio parole
  • Lavoro di coordinatore del conteggio delle parole basato sul tempo

Inizieremo questo tutorial su Oozie introducendo Apache Oozie. Quindi andando avanti, capiremo i tipi di lavori che possono essere creati ed eseguiti utilizzando Apache Oozie.

Esercitazione su Apache Oozie: Introduzione ad Apache Oozie

Apache Oozie - Tutorial Oozie - EdurekaApache Oozie è un sistema di pianificazione per gestire ed eseguire lavori Hadoop in un ambiente distribuito. Possiamo creare una pipeline desiderata combinando un diverso tipo di attività. Può essere il tuo compito Hive, Pig, Sqoop o MapReduce. Usando Apache Oozie puoi anche programmare i tuoi lavori. All'interno di una sequenza dell'attività, è anche possibile programmare due o più lavori per essere eseguiti parallelamente l'uno all'altro. È un sistema scalabile, affidabile ed estensibile.



Oozie è un'applicazione Web Java open source, responsabile dell'attivazione delle azioni del flusso di lavoro. A sua volta, utilizza il motore di esecuzione Hadoop per eseguire le attività.

Apache Oozie rileva il completamento delle attività tramite callback e polling. Quando Oozie avvia un'attività, fornisce un URL HTTP di callback univoco all'attività e notifica quell'URL quando l'attività è completata. Se l'attività non riesce a richiamare l'URL di richiamata, Oozie può eseguire il polling dell'attività per il completamento.

Esistono tre tipi di lavori in Apache Oozie:



  • Oozie Workflow Jobs & meno Questi sono DAG (Directed Acyclic Graphs) che specifica una sequenza di azioni da eseguire.
  • Oozie Coordinator Jobs & meno Consistono in processi del flusso di lavoro attivati ​​dalla disponibilità di tempo e dati.
  • Pacchetti Oozie & meno Questi possono essere indicati come un pacchetto di più coordinatori e lavori del flusso di lavoro.

Ora, vediamo di capire tutti questi lavori uno per uno.

Esercitazione su Apache Oozie: flusso di lavoro Oozie

Il flusso di lavoro è una sequenza di azioni disposte in un grafico aciclico diretto (DAG). Le azioni dipendono l'una dall'altra, poiché l'azione successiva può essere eseguita solo dopo l'output dell'azione corrente. Un'azione del flusso di lavoro può essere un'azione Pig, un'azione Hive, un'azione MapReduce, un'azione Shell, un'azione Java ecc. Possono essere presenti alberi decisionali per decidere come e in quale condizione eseguire un lavoro.

Possiamo creare diversi tipi di azioni in base al lavoro e ogni tipo di azione può avere il proprio tipo di tag.Il flusso di lavoro e gli script o i file jar devono essere inseriti nel percorso HDFS prima di eseguire il flusso di lavoro.

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

Per controllare lo stato del lavoro, puoi andare alla console web di Oozie, ad es. http: // nome_host: 11000 . Cliccando sul lavoro vedrai lo stato del lavoro.

Negli scenari in cui vogliamo eseguire più lavori parallelamente, possiamo usare Forchetta . Ogni volta che usiamo fork, dobbiamo usare Join come nodo finale per fork. Per ogni fork dovrebbe esserci un join. Join presuppone che tutti i nodi eseguiti parallelamente, siano figli di un singolo fork. Ad esempio, possiamo creare due tabelle contemporaneamente in parallelo.

Se vogliamo eseguire un'azione in base all'output della decisione, possiamo aggiungere tag decisionali. Ad esempio, se abbiamo già la tabella hive non avremo bisogno di crearla di nuovo. In questa situazione, possiamo aggiungere un tag di decisione per non eseguire i passaggi di creazione della tabella se la tabella esiste già. I nodi decisionali hanno un tag switch simile a switch case.

Il valore di job-tracker, name-node, script e param può essere passato direttamente. Ma questo diventa difficile da gestire. È qui che torna utile un file di configurazione (ad es. File .property).

Esercitazione su Apache Oozie: coordinatore Oozie

È possibile pianificare flussi di lavoro complessi nonché flussi di lavoro pianificati regolarmente utilizzando Coordinator. I coordinatori di Oozie attivano i lavori dei flussi di lavoro in base a tempo, dati o predicati di eventi. I flussi di lavoro all'interno del coordinatore del lavoro iniziano quando la condizione data è soddisfatta.

Le definizioni richieste per i lavori di coordinatore sono:

  • inizio & meno Avvia data e ora per il lavoro.
  • fine & meno Data e ora di fine per il lavoro.
  • fuso orario & meno il fuso orario dell'applicazione coordinatore.
  • frequenza & meno La frequenza, in minuti, per l'esecuzione dei lavori.

Alcune altre proprietà sono disponibili per le informazioni di controllo:

  • tempo scaduto & meno Il tempo massimo, in minuti, durante il quale un'azione attenderà per soddisfare le condizioni aggiuntive, prima di essere scartata. 0 indica che se tutti gli eventi di input non sono soddisfatti al momento della materializzazione dell'azione, l'azione dovrebbe scadere immediatamente. -1 indica nessun timeout, l'azione aspetterà per sempre. Il valore predefinito è -1.
  • concorrenza & meno Il numero massimo di azioni per un lavoro che può essere eseguito parallelamente. Il valore predefinito è 1.
  • esecuzione - Specifica l'ordine di esecuzione se più istanze del lavoro del coordinatore hanno soddisfatto i propri criteri di esecuzione. Può essere:
    • FIFO (predefinito)
    • LIFO
    • LAST_ONLY

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

Se una proprietà di configurazione utilizzata nella definizione non viene fornita con la configurazione del lavoro durante l'inoltro del lavoro del coordinatore, l'invio del lavoro fallirà.

Esercitazione su Apache Oozie: pacchetto Oozie

Sistema di bundle Oozieconsente di definire ed eseguire una serie di applicazioni di coordinamento, spesso denominate pipeline di dati. In un pacchetto Oozie, non esiste una dipendenza esplicita tra le applicazioni del coordinatore. Tuttavia, è possibile utilizzare la dipendenza dai dati delle applicazioni del coordinatore per creare una pipeline dell'applicazione dati implicita.È possibile avviare / interrompere / sospendere / riprendere / rieseguire il pacchetto. Offre un migliore e facile controllo operativo.

Ora di inizio & meno L'ora in cui un pacchetto deve iniziare e inviare le domande del coordinatore.

Avanzando in questo tutorial di Apache Oozie, capiremo come creare un lavoro di flusso di lavoro.

Esercitazione su Apache Oozie: flusso di lavoro conteggio parole

In questo esempio, eseguiremo un lavoro di conteggio parole utilizzando Apache Oozie. Qui non discuteremo su come scrivere un programma di conteggio parole MapReduce. Quindi, prima di seguire questo tutorial su Apache Oozie, devi scaricarlo vaso di conteggio parole file. Ora, crea una directory WordCountTest in cui collocheremo tutti i file. Crea una directory lib in cui inseriremo il jar del conteggio delle parole come mostrato nelle immagini sottostanti.

Ora, andiamo avanti e creiamo job.properties & workflow.xml file, dove specificheremo il lavoro ei parametri ad esso associati.

job.properties

Innanzitutto, stiamo creando un file job.properties file, dove stiamo definendo il percorso di NameNode e ResourceManager. Il percorso NameNode è richiesto per risolvere il percorso della directory del flusso di lavoro e il percorso jobTracker aiuterà a inviare il lavoro a YARN. Dobbiamo fornire il percorso del file workflow.xml file, che dovrebbe essere archiviato in HDFS.

workflow.xml

Successivamente, dobbiamo creare il file workflow.xml file, dove definiremo tutte le nostre azioni e le eseguiremo. Innanzitutto, dobbiamo specificare il nome dell'app del flusso di lavoro, ad es. WorkflowRunnerTest . Quindi, stiamo specificando il avviare il nodo . Il nodo di partenza ( nel il iniziare a etichetta ) è il punto di ingresso per un lavoro del flusso di lavoro. Punta verso il primo nodo del flusso di lavoro da cui dovrebbe iniziare il lavoro. Come puoi vedere nell'immagine qui sotto, il nodo successivo è intersezione0 da dove inizierà il lavoro.

Successivamente, stiamo specificando l'attività da eseguire, nel nodo azione. Stiamo eseguendo un'attività MapReduce WordCount qui. Dobbiamo specificare le configurazioni richieste per eseguire questa attività MapReduce. Stiamo definendo il job tracker e l'indirizzo NameNode.

Il prossimo è l'elemento preparato, che viene utilizzato esclusivamente per la pulizia della directory, prima di eseguire l'azione. Qui stiamo eseguendo l'operazione di eliminazione in HDFS per eliminare il file out1 cartella se è già stata creata. Il tag Prepare viene utilizzato per creare o eliminare una cartella prima di eseguire il lavoro. Quindi stiamo specificando le proprietà MapReduce come il nome della coda dei lavori, la classe mapper, la classe del riduttore, la classe della chiave di output e la classe del valore di output.

L'ultima configurazione dell'attività MapReduce è la directory di input e output in HDFS. La directory di input è dati directory, che è memorizzata nel percorso radice di NameNode . Infine, specificheremo l'elemento kill se il lavoro fallisce.

Ora dobbiamo spostare il file WordCountTest cartella in HDFS, come specificato in oozie.wf.application.path proprietà in job.properties file. Quindi, stiamo copiando il file WordCountTest cartella nella directory principale di Hadoop.

Comando: hadoop fs -put WordCountTest /

Per verificare, puoi andare all'interfaccia utente Web NameNode e controllare se la cartella è stata caricata nella directory principale HDFS o meno.

Ora siamo tutti pronti per andare avanti ed eseguire il lavoro del flusso di lavoro.

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

Una volta che avremo eseguito il nostro lavoro, riceveremo l'ID lavoro (ad es. 0000009-171219160449620-oozie-edur-W ) come mostrato nell'immagine sopra. Puoi andare a controllare il lavoro che hai inviato nell'interfaccia utente Web di Oozie, ad es. localhost: 11000 . Puoi vedere nell'immagine qui sotto, il lavoro che abbiamo inviato è elencato in basso.

Se osserverai nell'immagine sopra, vedrai l'ID lavoro, il nome del lavoro, lo stato del lavoro, l'utente che ha inviato il lavoro, l'ora di creazione, inizio e ultima modifica. Puoi fare clic sul lavoro per ottenere maggiori dettagli come:

  • Informazioni sul lavoro

  • Definizione del lavoro

  • Configurazione del lavoro

Poiché lo stato del lavoro è riuscito, è necessario andare alla directory principale di HDFS e verificare se la directory di output è stata creata o meno.

Come puoi vedere, il file oozieout è stata creata nell'HDFS, quindi ora diamo un'occhiata al file di output che è stato creato.

Come abbiamo visto come creare un lavoro di flusso di lavoro Oozie, ora avanzeremo in questo blog Tutorial di Apache Oozie e capiremo come creare un lavoro di coordinatore.

Esercitazione su Apache Oozie: lavoro di coordinatore del conteggio parole basato sul tempo

In questo esempio, creeremo un lavoro di coordinamento del conteggio delle parole basato sul tempo che verrà eseguito dopo un intervallo di tempo specifico. Puoi creare e pianificare un lavoro usando Apache Oozie che deve essere eseguito giornalmente o periodicamente.

numeri di fibonacci c ++

Avanziamo rapidamente in questo tutorial di Apache Oozie e creiamo un lavoro di coordinatore. Qui creeremo tre file, ad es. coordinator.properties , coordinator.xml & workflow.xml file. Di nuovo, qui collocheremo w ordcount vaso all'interno del lib directory come mostrato nell'immagine sottostante.

Ora esaminiamo questi file individualmente. Innanzitutto, inizieremo con il file coordinator.properties.

Qui stiamo specificando la frequenza con cui verrà eseguito il flusso di lavoro. La frequenza è sempre espressa in minuti. Nel nostro caso, questo lavoro di coordinatore verrà eseguito una volta ogni ora nell'intervallo di tempo specificato. La frequenza viene utilizzata per acquisire gli intervalli periodici in cui vengono prodotti i set di dati e l'esecuzione delle applicazioni del coordinatore è pianificata.

Per definire la frequenza in minuti, ore, giorni e mesi utilizzare il seguente formato:

$ {coord: minutes (int n)} n $ {coord: minutes (45)} -> 45
$ {coord: hours (int n)} n * 60 $ {coord: hours (3)} -> 180
$ {coord: days (int n)} variabile $ {coord: days (2)} -> minuti in 2 giorni interi dalla data corrente
$ {coord: months (int n)} variabile $ {coord: months (1)} -> minuti in un mese intero dalla data corrente

Successivamente, stiamo definendo l'ora di inizio e di fine del lavoro come mostrato nell'immagine sopra. Ora di inizio è l'ora di inizio del lavoro e Tempo scaduto è la data e l'ora di fine del lavoro.

Successivamente, stiamo specificando l'URL NameNode e ResourceManager, che verranno utilizzati rispettivamente per fare riferimento al file workflow.xml in HDFS e inviare i lavori a YARN. Infine, stiamo specificando il percorso workflow.xml, che memorizzeremo in HDFS. Specificheremo anche il percorso dell'applicazione in cui verranno archiviati tutti i file e la directory lib.

Il secondo file è coordinator.xml dove useremo tutte le proprietà che abbiamo specificato nel file coordinator.properties file. Ora, per prima cosa, specificheremo le proprietà dell'applicazione coordinatore, ovvero nome, frequenza e fuso orario. Successivamente, specificheremo i flussi di lavoro uno per uno. Qui abbiamo solo un flusso di lavoro. Quindi, all'interno dell'elemento azione creeremo l'elemento del flusso di lavoro, dove specificheremo il percorso dell'applicazione.

Successivamente, andando avanti dobbiamo creare workflow.xml file in cui specificheremo l'attività. È simile al file workflow.xml file, che abbiamo creato nel lavoro del flusso di lavoro.

Ora di nuovo, lo sposteremo WordCountTest_TimedBased directory in HDFS.

Comando : hadoop fs -put WordCountTest_TimeBased /

Ora, siamo tutti pronti per andare avanti ed eseguire questo lavoro di coordinatore in questo tutorial di Oozie. Andiamo avanti ed eseguiamolo.

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

Annota questo ID lavoro del coordinatore (ad esempio 0000010-171219160449620-oozie-edur-C). Ti aiuterà a rintracciare il tuo lavoro nell'interfaccia utente Web di Oozie.

Puoi vedere il lavoro elencato nella scheda Lavori del coordinatore nell'interfaccia utente Web di Oozie. Simile al lavoro del flusso di lavoro, abbiamo nome, stato, utente, frequenza, ora di inizio e fine del lavoro. Quando farai clic su un particolare lavoro, vedrai i dettagli del lavoro, come mostrato nelle immagini sottostanti.

  • Coordinatore Job Info

  • Definizione del lavoro del coordinatore

come usare logger in java
  • Configurazione del lavoro del coordinatore

Ora, come abbiamo esaminato le diverse schede. Torneremo alla directory principale di HDFS in cui verrà creata la cartella di output. Come puoi vedere nell'immagine qui sotto, oozieTimeBasedout directory è stata creata, come specificato in workflow.xml file.

Ora, diamo un'occhiata al file di output che è stato creato.

Spero che tu abbia trovato informativo questo blog tutorial su Apache Oozie. Se sei interessato a saperne di più, puoi farlo che ti parla dei Big Data e di come Hadoop sta risolvendo le sfide legate ai Big Data.

Ora che hai capito Apache Oozie, controlla il file da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Il corso di formazione per la certificazione Edureka Big Data Hadoop aiuta gli studenti a diventare esperti in HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume e Sqoop utilizzando casi d'uso in tempo reale nel settore Retail, Social Media, Aviation, Tourism, Finance.

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo.