日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【新手入门】Oozie workflow如何在action之间传递参数

發布時間:2024/1/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【新手入门】Oozie workflow如何在action之间传递参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接觸oozie時間并不長,半個月有余,對其十分好用的action管理模式以及各種工作流控制欲罷不能,可惜中文的文檔真心少。

上周發現了這樣一個問題,雖然說oozie workflow很方便工作流的建立和控制,但是oozie的參數大多定義在job.properties中,然后一次性載入oozie環境中,在runtime下很難在各個action之間傳遞參數,所以相比于python和shell script版的pipeline, 參數的傳遞著實不方便,去查詢官網oozie文檔,查了網上一些解答,下面直接上代碼,新手入門級,大大們見諒。


job.properties

# Cluster settings nameNode=hdfs://sandbox:8020 jobTracker=sandbox:50300appName=var_demooozie.use.system.libpath=true oozie.wf.application.path=${nameNode}/user/${user.name}/${appName}/ oozie.libpath=/user/oozie/share/lib oozie.wf.rerun.failnodes=true queueName=default

workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.4" name="cip_poi_etl_workflow"> <start to="get_var"/><action name="get_var"><shell xmlns="uri:oozie:shell-action:0.1"><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><exec>input.sh</exec><file>input.sh</file><capture-output/> </shell><ok to="use_var" /><error to="send_email" /></action><action name="use_var"><shell xmlns="uri:oozie:shell-action:0.1"><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><exec>output.sh</exec><argument>${wf:actionData('get_var')['var']}</argument><file>output.sh</file></shell><ok to="end" /><error to="send_email" /></action><action name="send_email"><email xmlns="uri:oozie:email-action:0.1"><to>${emailTo}</to><subject>Status of workflow ${wf:id()}</subject><body>The workflow ${wf:id()} had issues and was killed. The error message is: ${wf:errorMessage(wf:lastErrorNode())}</body></email><ok to="fail"/><error to="fail"/></action><kill name="fail"><message>Failed, Error Message[${wf:errorMessage(wf:lastErrorNode())}]</message></kill><end name="end"/> </workflow-app>

input.sh

echo var=var_test_result
output.sh

hadoop fs -mkdir /user/hue/$1


注意兩個地方:

? ? ? ? ?<capture-output/> :它的作用是是告訴oozie,這個action的輸出要被oozie運行存儲下來。

${wf:actionData('get_var')['var']}: 它的作用是說我要調用“get_var”這個action捕捉到的那個輸出的其中一個參數。

然后就能實現相互傳遞參數了。


唯一需要注意的一點是,capture-output 中的結果必須是java property 格式,例如上面例子中的:var=var_test_result


這個只是個簡單的傳遞參數的例子,當然你也可以寫一個java class,py class,甚至hive結果,要求很簡單,只要你的輸出是上面這個格式的,oozie就能找到并使用。


總結

以上是生活随笔為你收集整理的【新手入门】Oozie workflow如何在action之间传递参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。