Création d'un fichier de sortie selon la date à Oozie
Question
J'utilise Oozie pour gérer mon travail de carte-rédaction. Je souhaite créer le fichier de sortie en fonction de la date. Mais il faut une date comme une chaîne et finit par imprimer au lieu de prendre la date comme valeur:
/user/skataria/geooutput/$(date +"%m%d%Y%H%M%S")
Voici le fichier Oozie Properties:
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}
D'une manière ou d'une autre, je ne peux pas avoir Oozie comme tag parce que ma réputation est inférieure à 1500
La solution
On dirait que vous essayez d'utiliser une commande shell Linux (date +"%m%d%Y%H%M%S"
) Dans un fichier de propriétés Java - cela ne va pas résoudre.
Un travail, en supposant que cela fait partie d'un travail de workflow soumis manuellement (par opposition à un travail de coordinateur) consiste à fournir la propriété de date de la ligne de commande à l'aide de l'option de clé -d = valeur et de remise des cotations de shell Linux pour résoudre la sortie d'une commande en ligne
oozie job -run -config job.properties -D date=`date +"%m%d%Y%H%M%S"`
Vous devrez vous assurer que votre version d'Oozie prend en charge l'option -D KEY = Value
Autres conseils
Oui, je suis d'accord que l'option Shell fonctionne. Mais cela ne résout pas mon utilisation. Je veux exécuter mon travail de carte-réduisant quotidiennement et planifier cette teinte. Le répertoire de sortie doit être paramétré en tant que propriété de travail à Oozie.
Au fait je trouve que Oozie a des fonctions de langage d'expression,
Malheureusement la fonction timestamp()
Renvoie la date et l'heure actuelles de l'UTC au format W3C jusqu'au deuxième (YYYY-MM-DDThh:mm:ss.sZ)
. c'est à dire: 1997-07-16T19:20:30.45Z
et complètement inutilisable pour créer un nom de sous-répertoire dans HDFS
Alors pour l'instant,
J'ai une solution de contournement. J'utilise la fonction de workflow el wf:id()
Dans workflow.xml
<property>
<name>mapreduce.output.fileoutputformat.outputdir</name>
<value>/user/sasubramanian/impressions/output/outpdir/${yyyy_mm_dd}/${wf:id()}</value>
</property>
Cela crée un répertoire de sortie avec un sous-répertoire comme,
/user/foouser/subdir1/output/outpdir/0000006-130321100837625-oozie-oozi-W
Remarque: vous devez le spécifier dans le workflow.xml. Cela ne fonctionnera pas si vous l'avez spécifié dans le travail.