1

map-reduce ジョブを実行するために oozie を使用しています。日付に従って出力ファイルを作成したい。しかし、日付を文字列として取り、日付を値として取る代わりに出力してしまいます:

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

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}

私の評判が1500未満なので、どういうわけかタグとしてoozieを持つことはできません

4

2 に答える 2

3

date +"%m%d%Y%H%M%S"JavaプロパティファイルでLinuxシェルコマンド()を使用しようとしているようです。これは解決されません。

これが(コーディネータージョブではなく)手動で送信されたワークフロージョブの一部であると仮定した場合の回避策の1つは、-D key = valueオプションを使用してコマンドラインからdateプロパティを提供し、Linuxシェルのバッククォートを使用して出力を解決することです。コマンドインラインの

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

お使いのバージョンのOozieが-Dkey=valueオプションをサポートしていることを確認する必要があります

于 2012-03-21T01:05:02.307 に答える
0

はい、シェル オプションが機能することに同意します。しかし、それは私のユースケースを解決しません。map-reduce ジョブを毎日実行し、Hue を介してこれをスケジュールしたいと考えています。出力ディレクトリは、ジョブ プロパティとして Oozie にパラメータ化する必要があります。

ところで、Oozie には Expression language Functionsがあり、

残念ながら、この関数timestamp()は UTC の現在の日付と時刻を W3C 形式で秒単位まで返します(YYYY-MM-DDThh:mm:ss.sZ)。つまり1997-07-16T19:20:30.45Z、HDFSでサブディレクトリ名を作成するために完全に使用できません

今のところ、

回避策があります。ワークフロー EL 関数を使用していwf:id() ますworkflow.xml

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

これにより、サブディレクトリを持つ出力ディレクトリが次のように作成されます。

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

注: これは、workflow.xml で指定する必要があります。job.properties で指定した場合、これは機能しません。

于 2013-03-21T17:24:24.840 に答える