Pergunta

Estou usando oozie para executar meu trabalho de redução de mapa.Quero criar o arquivo de saída de acordo com a data.Mas ele pega a data como uma string e acaba imprimindo ao invés de pegar a data como o valor:

   /user/skataria/geooutput/$(date +"%m%d%Y%H%M%S")

Aqui está o arquivo de propriedades do 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}

De alguma forma, não posso ter oozie como tag porque minha reputação é inferior a 1.500

Foi útil?

Solução

Parece que você está tentando usar um comando shell do Linux (date +"%m%d%Y%H%M%S") em um arquivo de propriedades java - isso não vai resolver.

Uma solução alternativa, supondo que isso faça parte de um trabalho de fluxo de trabalho enviado manualmente (em oposição a um trabalho de coordenador), é fornecer a propriedade de data na linha de comando usando a opção -D key=value e aspas do shell do Linux para resolver a saída de um comando embutido

oozie job -run -config job.properties -D date=`date +"%m%d%Y%H%M%S"`

Você precisará certificar-se de que sua versão do Oozie suporta a opção -D key=value

Outras dicas

Sim, concordo que a opção shell funciona.Mas isso não resolve meu caso de uso.Quero executar meu trabalho de redução de mapa diariamente e agendar isso através do Hue.O diretório de saída precisa ser parametrizado como uma propriedade de trabalho para Oozie.

Aliás, eu acho isso Oozie tem funções de linguagem de expressão,

Infelizmente a função timestamp() retorna a data e hora atuais UTC no formato W3C até o segundo (YYYY-MM-DDThh:mm:ss.sZ).ou seja: 1997-07-16T19:20:30.45Z e completamente inutilizável para criar um nome de subdiretório no HDFS

Então por agora,

Eu tenho uma solução alternativa.Estou usando a função Workflow EL wf:id()Em workflow.xml

<property>
  <name>mapreduce.output.fileoutputformat.outputdir</name>
  <value>/user/sasubramanian/impressions/output/outpdir/${yyyy_mm_dd}/${wf:id()}</value>
</property>

Isso cria um diretório de saída com subdiretório como,

/user/foouser/subdir1/output/outpdir/0000006-130321100837625-oozie-oozi-W

OBSERVAÇÃO:Você deve especificar isso no workflow.xml.Isso não funcionará se você especificou em job.properties

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top