سؤال

أنا أستخدم oozie لتشغيل مهمة تقليل الخريطة.أريد إنشاء ملف الإخراج وفقًا للتاريخ.لكنه يأخذ date كسلسلة وينتهي بالطباعة بدلاً من أخذ date كقيمة:

   /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}

بطريقة ما لا أستطيع الحصول على oozie كعلامة لأن سمعتي أقل من 1500

هل كانت مفيدة؟

المحلول

يبدو أنك تحاول استخدام أمر Linux Shell (date +"%m%d%Y%H%M%S") في ملف خصائص Java - لن يتم حل هذه المشكلة.

أحد الحلول، بافتراض أن هذا جزء من مهمة سير العمل المقدمة يدويًا (بدلاً من مهمة المنسق) هو توفير خاصية التاريخ من سطر الأوامر باستخدام خيار -D key=value، وعلامات الاقتباس الخلفية لـ Linux Shell لحل المخرجات من أمر مضمن

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

ستحتاج إلى التأكد من أن إصدار Oozie الخاص بك يدعم خيار -D key=value

نصائح أخرى

نعم أوافق على أن خيار الصدفة يعمل.لكن هذا لا يحل حالة الاستخدام الخاصة بي.أرغب في تشغيل مهمة تقليل الخريطة الخاصة بي يوميًا وجدولة ذلك من خلال Hue.يجب تحديد معلمات دليل الإخراج كخاصية مهمة لـ Oozie.

بالمناسبة أجد ذلك لدى Oozie وظائف لغة التعبير,

وظيفة للأسف timestamp() تقوم بإرجاع التاريخ والوقت الحاليين لـ UTC بتنسيق W3C وصولاً إلى الثانية (YYYY-MM-DDThh:mm:ss.sZ).أي.: 1997-07-16T19:20:30.45Z وغير قابل للاستخدام تمامًا لإنشاء اسم دليل فرعي في HDFS

حتى الآن،

لدي الحل البديل.أنا أستخدم وظيفة Workflow 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top