Oozie安裝總結

權聲明:本文爲博主原創文章,未經博主容許不得轉載。java

1、使用CM添加服務的方式安裝Oozienode

若是在建立Oozie數據庫時失敗,且提示數據庫已存在,以下圖,則多是以前已經安裝過Oozie,沒有卸載乾淨,須要手動將Oozie服務器數據目錄刪掉(oozie/data部分),見圖二mysql

                                                                           (圖一)linux

 

                                                                          (圖二)web

 

 

2、安裝成功後,能夠經過web方式訪問Oozie(http://hadoop1:11000.oozie/),但此時出現以下頁面,提示須要Ext JS,查看官方文檔可知,只能使用Ext js 2.2版本(版權問題)sql

 

將ext-2.2.zip放到libext目錄下:/opt/cloudera/parcels/CDH/lib /oozie/libext,並解壓,unzip ext-2.2.zip,將解壓後的ext-2.2權限改成777:chmod -R 777 ext-2.2數據庫

此時不須要重啓Oozie,只要刷新瀏覽器,便可看到oozie的web頁面apache

 

3、修改Oozie的元數據庫爲mysql,默認爲derby,不適合生產環境使用瀏覽器

一、CM配置見下圖:服務器

 

二、在對應的mysql服務器建立oozie數據庫:create database oozie;

三、在安裝Oozie的節點libserver目錄下(/opt/cloudera/parcels/CDH/lib/oozie/libserver)添加mysql的驅動jar包,而後重啓Oozie

此時會報以下錯誤,說數據庫不存在:

四、此時能夠在CM的Oozie-->實例-->右上角的操做處點擊建立數據庫

 

此時報錯以下圖,提示找不到mysql驅動


 

將mysql驅動拷貝到libtools目錄下(/opt/cloudera/parcels/CDH/lib/oozie /libtools),並重命名驅動包,去掉版本號,如原名爲:mysql-connector-java-5.1.25-bin.jar,重命名爲:mysql-connector-java-bin.jar,此時再次執行上面的建立數據庫操做,提示建立成功。

 

也能夠進行mysql數據庫,查看oozie數據庫下的表,此時會多出新建的12張表,此時表明Oozie已所有安裝成功!


 

此時經過CM從新啓動Oozie服務成功!


 

4、修改Oozie配置

將java的堆棧大小設爲1到2G


 

5、運行demo

一、進入目錄:/opt/cloudera/parcels/CDH/share/doc/oozie-4.0.0+cdh5.3.3+340,在root目錄下創建example目錄,並將上面目錄中的oozie-examples.tar.gz拷貝到/root/example目錄中並解壓,獲得examples目錄,目錄結構以下:

 

二、進入apps/map-reduce目錄,可看到以下配置文件,主要關注job.properties和workflow.xml

 

三、修改job.properties

1)未修改前的內容

 

2)修改細節:

     修改nameNode:nameNode=hdfs://xxx:8020

     修改jobTracker:jobTracker=hadoop4:8032

     注意:jobTracker的內容根據hadoop的版本,內容也不一樣。如爲hadoop1,則直接使用jobTracker的地址便可。如爲 hadoop2,即寫resourceManager的地址,具體可參見:/etc/hadoop/conf/yarn-site.xml

    

 

    queueName=default:指定提交做業時,運行的隊列

    examplesRoot=examples:指定運行做業的hdfs上的目錄名稱

 

四、可查看workflow.xml配置的內容,但暫不作修改

 

五、將examples整個目錄上傳到hdfs的/user/oozie下:hdfs dfs -put examples /user/oozie

 

六、運行做業:

     oozie job -oozie http://hadoop1:11000/oozie/ -config /root/example/examples/apps/map-reduce/job.properties -run

 

重點:oozie做業流程解析

1)job.properties文件能夠不上傳到hdfs中,是在執行oozie job ...... -config時,批定的linux本地路徑

2)workflow.xml文件,必定要上傳到job.properties的oozie.wf.application.path對應的hdfs目錄下

3)job.properties中的oozie.use.system.libpath=true指定oozie使用系統的共享目錄

4)job.properties中的oozie.libpath=${nameNode}/user/${user.name}/apps/mymr,能夠用來執行mr時,做業導出的jar包存放位置,不然可能報找不到類的錯誤

5)oozie調度做業時,本質也是啓動一個mapreduce做業來調度,workflow.xml中設置的隊列名稱爲調度做業mr的隊列名稱。因此若是想讓做業運行在指定的隊列時,須要在mr或hive中指定好

 

 

七、檢測workflow.xml文件的正確性

      oozie validate workflow.xml

     

 

八、編寫workflow.xml文件

      控制節點:

      1)start節點

            <start to="[nodename]" />

 

      2)end節點

             <end name="[nodename]" />

 

      3)kill節點

            <kill>

                <message>"logmsg"</message>

            </kill>

 

      4)decision決策節點

            <decision name="[nodename]">

                <switch>

                    <case to="[nodename]">[PREDICATE]</case>

                    ......

                    <default to="[nodename]" />

                </switch>

            </decision>

 

      5)fork分支節點

            <fork name="[fork-node-name]">

                <path start="[nodename]"/>

                ......

                <path start="[nodename]"/>

            </fork>

 

      6)join會籤節點

            <join name="[join-node-name]" to="[nodename]" />

 

      動做節點:

      1)map-reduce配置:

     <workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf">

    <start to="mr-node"/>

    <action name="mr-node">

        <map-reduce>

            <job-tracker>${jobTracker}</job-tracker>

            <name-node>${nameNode}</name-node>

            <prepare>

                <delete path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data/${outputDir}"/>

            </prepare>

            <configuration>

                <property>

                    <name>mapred.job.queue.name</name>

                    <value>${queueName}</value>

                </property>

                <property>

                    <name>mapred.mapper.class</name>

                    <value>org.apache.oozie.example.SampleMapper</value>

                </property>

                <property>

                    <name>mapred.reducer.class</name>

                    <value>org.apache.oozie.example.SampleReducer</value>

                </property>

                <property>

                    <name>mapred.map.tasks</name>

                    <value>1</value>

                </property>

                <property>

                    <name>mapred.input.dir</name>

                    <value>/user/${wf:user()}/${examplesRoot}/input-data/text</value>

                </property>

                <property>

                    <name>mapred.output.dir</name>

                    <value>/user/${wf:user()}/${examplesRoot}/output-data/${outputDir}</value>

                </property>

            </configuration>

        </map-reduce>

        <ok to="end"/>

        <error to="fail"/>

    </action>

    <kill name="fail">

        <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>

    </kill>

    <end name="end"/>

</workflow-app>

 

    2)hive動做節點配置

    <workflow-app xmlns="uri:oozie:workflow:0.2" name="hive-wf">

    <start to="hive-node"/>

    <action name="hive-node">

        <hive xmlns="uri:oozie:hive-action:0.2">

            <job-tracker>${jobTracker}</job-tracker>

            <name-node>${nameNode}</name-node>

            <prepare>

                <delete path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data/hive"/>

                <mkdir path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data"/>

            </prepare>

            <configuration>

                <property>

                    <name>mapred.job.queue.name</name>

                    <value>${queueName}</value>

                </property>

            </configuration>

            <script>script.q(存放hive腳本的文件)</script>

            <param>INPUT=/user/${wf:user()}/${examplesRoot}/input-data/table</param>

            <param>OUTPUT=/user/${wf:user()}/${examplesRoot}/output-data/hive</param>

        </hive>

        <ok to="end"/>

        <error to="fail"/>

    </action>

    <kill name="fail">

        <message>Hive failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>

    </kill>

    <end name="end"/>

</workflow-app>

 

 

 3)sqoop動做節點

    <workflow-app xmlns="uri:oozie:workflow:0.2" name="sqoop-wf">

    <start to="sqoop-node"/>

    <action name="sqoop-node">

        <sqoop xmlns="uri:oozie:sqoop-action:0.2">

            <job-tracker>${jobTracker}</job-tracker>

            <name-node>${nameNode}</name-node>

            <prepare>

                <delete path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data/sqoop"/>

                <mkdir path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data"/>

            </prepare>

            <configuration>

                <property>

                    <name>mapred.job.queue.name</name>

                    <value>${queueName}</value>

                </property>

            </configuration>

            <command>import --connect jdbc:hsqldb:file:db.hsqldb --table TT --target-dir /user/${wf:user()}/${examplesRoot}/output-data/sqoop -m 1</command>

            <file>db.hsqldb.properties#db.hsqldb.properties</file>

            <file>db.hsqldb.script#db.hsqldb.script</file>

        </sqoop>

        <ok to="end"/>

        <error to="fail"/>

    </action>

    <kill name="fail">

        <message>Sqoop failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>

    </kill>

    <end name="end"/>

</workflow-app>

相關文章
相關標籤/搜索