Creazione di file di output in base alla data in Oozie
Domanda
Sto usando Oozie per eseguire il mio lavoro di riduzione della mappa.Voglio creare il file di output in base alla data.Ma prende appuntamento come una stringa e finisce la stampa invece di prendere la data come valore:
/user/skataria/geooutput/$(date +"%m%d%Y%H%M%S")
.
Ecco il file delle proprietà Oozie:
nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
date=(date +"%m%d%Y%H%M%S")
oozie.wf.application.path=${nameNode}/services/advert/sid
inputDir=${nameNode}/user/${user.name}/geoinput/testgeo
outputDir=${nameNode}/user/${user.name}/geooutput/${date}
.
in qualche modo non posso avere Oozie come tag perché la mia reputazione è inferiore a 1500
Soluzione
Sembra che tu stia tentando di utilizzare un comando di shell Linux (date +"%m%d%Y%H%M%S"
) in un file di proprietà Java: non sarà intenzione di risolvere.
Uno svolgersi, supponendo che questo fa parte di un lavoro del flusso di lavoro inviato manualmente (al contrario di un lavoro di coordinatore) è quello di fornire la proprietà Data dalla riga di comando utilizzando l'opzione del tasto -D= Opzione Valore e le citazioni di Shell LinuxRisolvi l'uscita di un comando inline
oozie job -run -config job.properties -D date=`date +"%m%d%Y%H%M%S"`
.
Dovrai assicurarti che la tua versione di Oziende supporti il tasto -d tasto= opzione valore
Altri suggerimenti
Sì, sono d'accordo che l'opzione Shell funziona. Ma questo non risolve il mio usecase. Voglio eseguire la mia mappa, ridurre il lavoro quotidiano e programmare questo thru tonalità. La directory di uscita deve essere parametrizzata come proprietà del lavoro a Oozie.
A proposito trovo che Oozie ha un linguaggio di espressione Funzioni ,
Sfortunatamente la funzione timestamp()
restituisce la data e l'ora della corrente UTC in formato W3C fino al secondo (YYYY-MM-DDThh:mm:ss.sZ)
. I.e.: 1997-07-16T19:20:30.45Z
e completamente inutilizzabile per la creazione di un nome della sotto-directory in HDFS
Quindi per ora,
Ho una soluzione alternativa. Sto usando il flusso di lavoro EL Function wf:id()
IN workflow.xml
<property>
<name>mapreduce.output.fileoutputformat.outputdir</name>
<value>/user/sasubramanian/impressions/output/outpdir/${yyyy_mm_dd}/${wf:id()}</value>
</property>
.
Ciò crea una directory di uscita con sottodirectory come,
/user/foouser/subdir1/output/outpdir/0000006-130321100837625-oozie-oozi-W
.
Nota: è necessario specificarlo nel workflow.xml. Questo non funzionerà se lo hai specificato nel lavoro.properties