oozie使用中的一些總結(持續完善)
0 關於oozie 尋找包尋找位置原則:
oozie在執行的時候 只會去兩個地方尋找自己需要的lib 1 回去當前提交任務的workflow所在的hdfs目錄下的lib下尋找 eg: /user/root/examples/apps/fork-merge的workflow下有 job.properties lib workflow.xml三個目錄 會去lib目錄下找對應jar 2 如果是shell命令提交的話,他會主動去自己的公共資源庫中尋找自己需要的jar檔案,公共資源庫為 /user/root/share/lib/lib_20150128185329 其中共享庫裡面存放的是oozie 常見action需要的包 比如hive hive2 pig sqoop oozie hcatalog distcp等 如果是java客戶端提交任務的話,需要設定oozie.libpath(此時此路徑下可以存放你工程需要的別的jar包而不需要存放在共享庫中 防止混淆) properties.setProperty("oozie.use.system.libpath","true"); ---> 設定使用oozie共享庫 properties.setProperty("oozie.libpath","hdfs://master:9000/user/hdfs/examples/thirdlib"); ---> 設定存放工程使用的第三方的jar 3 上面2是針對java程式碼寫法,如果對應到job.properties寫法為: nameNode=hdfs://master:9000 jobTracker=master:8032 queueName=default examplesRoot=examples oozie.use.system.libpath=true oozie.libpath=hdfs://master:9000/user/hdfs/examples/thirdlib oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/sqoop-sqlserver-to-hdfs
1 關於oozie使用呼叫sqoop action執行資料匯出匯入時對應的jar包:
1.1 需要將 mysql/sqlserver/oracle等主流資料庫的驅動包放在oozie的共享庫對應hdfs目錄下 eg:
hdfs://master:9000/user/root/share/lib/lib_20141031094140/sqoop下
1.2 將 oozie-sharelib-sqoop-4.0.0-cdh5.1.0.jar sqoop-1.4.4-cdh5.1.0.jar也放在上述目錄中
1.3 你環境中安裝的sqoop是1.4.5的版本,那麼你就需要在你的sqoop下將對應的包
eg: sqoop-1.4.5.jar 放在oozie共享庫的sqoop目錄下,否則在oozie呼叫sqoop的時候 因為會找不到包
而包各種奇怪的錯。
2 hadoop執行時記憶體不足或者其他原因記憶體引起的錯誤
修改hadoop的配置檔案 mapred-site.xml 增加如下內容 <property> <name>mapreduce.map.memory.mb</name> <value>1024</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>1024</value> </property> <property> <name>yarn.app.mapreduce.am.resource.mb</name> <value>500</value> </property> 修改hadoop的配置檔案 yarn-site.xml 增加如下內容 <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>2048</value> </property>
3 關於oozie安裝時mysql資料庫問題和驅動這塊:
由於oozie錯誤或者其他原因造成的oozie安裝失敗,第二次安裝如果採用預設值可能會失敗:eg 資料庫初始化失敗錯誤,
處理方式: 刪除上一次預設的oozie資料檔案data資料夾或者修改預設的值使得安裝指向別的地方。
oozie要用mysql儲存資料時,需要在搭建oozie時,將 mysql連結驅動拷貝 分別放在
oozie-4.2.0/lib下
oozie-4.2.0/oozie-server/lib下
oozie-4.2.0/libtools下
4 oozie提交任務時,job.properties檔案的namenode屬性值不建議寫IP 建議寫主機名
5 關於oozie分支的:
oozie的節點分為 動作節點(action) 和控制節點(比如 start end fork merge) 其中控制節點下目前只可以放動作節點
分支節點下不支援在存放分支節點(即分支套分支的寫法)
案例來自官網: http://oozie.apache.org/docs/4.0.0/WorkflowFunctionalSpec.html#a3.1.5_Fork_and_Join_Control_Nodes
<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1">
...
<fork name="forking">
<path start="firstparalleljob"/>
<path start="secondparalleljob"/>
</fork>
<action name="firstparallejob">
<map-reduce>
<job-tracker>foo:8021</job-tracker>
<name-node>bar:8020</name-node>
<job-xml>job1.xml</job-xml>
</map-reduce>
<ok to="joining"/>
<error to="kill"/>
</action>
<action name="secondparalleljob">
<map-reduce>
<job-tracker>foo:8021</job-tracker>
<name-node>bar:8020</name-node>
<job-xml>job2.xml</job-xml>
</map-reduce>
<ok to="joining"/>
<error to="kill"/>
</action>
<join name="joining" to="nextaction"/>
...
</workflow-app>
5.2 oozie分支中,如果分支中出現的是 java節點 但是java節點類中呼叫的是 mr,
那麼這種情況下,
要麼用 cdh整合好的oozie來執行
要麼你編譯apache oozie 然後 和 apache hadoop hadoop sqoop一起使用,
否則,如果你下載chd的oozie + cdh的hadoop ,執行5,.2這種情況下 會在分支這塊卡死的。
這個結論是工作中遇到 弄了好幾個工作日得到的結論。
6 關於oozie 對應mysql資料庫下表的說明:
7 關於oozie webservice api的部分說明:
其餘問題後續需要跟進的: 需要等到7月份
a) 關於oozie流程設計圖設計方面的技巧 規則 建議
b) 關於oozie 使用者的,尤其是oozie在 cm版本上的使用者 什麼oozie使用者 root使用者 等等
在cm上oozie用的是哪個賬號提交任務 白名單等
c) oozie提怎麼提交任務給mr的,oozie是否有一些引數來規定提交到mr後 mr任務的啟動的任務數,
佔有資源等