久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

oozie 工作流調度引擎總結(一)

 陳永正的圖書館 2016-11-02

 

oozie是服務于hadoop生態(tài)系統(tǒng)的工作流調度工具,,job運行平臺是區(qū)別于其他調度工具的最大的不同。但其實現的思路跟一般調度工具幾乎完全相同,。

首先是作為調度系統(tǒng)兩大核心:依賴和觸發(fā),。依賴可以是條件依賴,比如,,資源依賴,,依賴于某些數據文件的存在,也可以是任務依賴,,比如依賴于另一個job的完成,。在oozie里,每一個job對應一個action節(jié)點,,這個節(jié)點可以是java,,hadoop FS,mapred,,hive,,sqoop,OS shell等等,。job之間的依賴通過動作節(jié)點完成,,fork,join等,。

觸發(fā)主要指時間觸發(fā),。依賴和觸發(fā)在動作的方向上是相互的,依賴是必要條件,,而觸發(fā)是充分條件,。

其次,調度系統(tǒng)本身不會去執(zhí)行具體的job,,而是將job相關的所有資源發(fā)送到真實的執(zhí)行環(huán)境,,比如hadoop jobtractor,hive client,,關系型數據庫系統(tǒng)等等,,自己僅僅記錄并監(jiān)視job的執(zhí)行狀態(tài),,并對其狀態(tài)的變化作出相應的動作,比如,,job失敗可以重新運行,,job成功轉到下一個節(jié)點。發(fā)送job的過程是一個非阻塞的行為,,個別例外(比如hadoop fs操作),。

第三,調度系統(tǒng)本身可以是任意程序,,例如,,linux上的一個腳本程序發(fā)起的精靈進程,一個web 工程,,也可以是個GUI的軟件工具,。

oozie作為一個調度引擎,是不同于hadoop的jobtracker實現的調度器的,,雖然兩者均為”Schedule“之意,。oozie負責任務的調度分發(fā),是指從提交作業(yè)的本地,,將資源發(fā)送到job運行環(huán)境,,比如hadoop集群。這個“分發(fā)”行為發(fā)生在hadoop集群外,。而jobtracker是將hadoop作業(yè)拆分成若干個mapred子job,,分派給tasktracker去執(zhí)行。這個”分發(fā)“行為發(fā)生在hadoop集群內,,是應用程序本身的功能,它可以自己選擇job執(zhí)行的先后順序,,或者停止一個正在執(zhí)行的job,,讓出資源給另一個job,控制的更為精細,。跟傳統(tǒng)意義上的調度工具含義不同,。

 

值得一提的是,oozie是apache的開源項目,,但我們一般用cloudera或yahu的商用免費版,,因為后者修復了apache版很多bug,并支持更多的功能,。

oozie server是一個java web,,可以用內置的tomcat容器,也可以用外部的,,記錄的信息比如日志等放在數據庫中,,推薦配置個mysql,。

 oozie 的安裝是有點復雜的,需要仔細閱讀文檔,。運行oozie應用時,,作業(yè)配置文件,jar包,,相關程序代碼,,比如hive ql要放在hdfs上,只有屬性文件放在本地磁盤,。

下面是幾個例子:

 coordinator.xml內容:

<coordinator-app name="cron-coord" frequency="${coord:minutes(10)}" start="${start}" end="${end}" timezone="UTC"
                 xmlns="uri:oozie:coordinator:0.1">
        <action>
        <workflow>
            <app-path>${workflowAppUri}</app-path>
            <configuration>
                <property>
                    <name>jobTracker</name>
                    <value>${jobTracker}</value>
                </property>
                <property>
                    <name>nameNode</name>
                    <value>${nameNode}</value>
                </property>
                <property>
                    <name>queueName</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
        </workflow>
    </action>
</coordinator-app>

 

workflow,。xml內容:

<workflow-app xmlns="uri:oozie:workflow:0.2" name="hive-wf">
    <start to="forking"/>

    <fork name="forking">
        <path start="hive-node"/>
        <path start="hive-node2"/>
    </fork>

    <action name="hive-node">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <job-xml>hdfs://master:54310/user/hadoop/examples/apps/hive5/conf/hive-site.xml</job-xml>
	    <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
                <property>
                    <name>oozie.hive.defaults</name>
                    <value>my-hive-default.xml</value>
                </property>
            </configuration>
            <script>dim_shop_category2.ql</script>
            <param>ARG_OPTIME_ISO=${ARG_OPTIME_ISO}</param>
        </hive>
        <ok to="joining"/>
        <error to="fail"/>
    </action>


        <action name="hive-node2">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <job-xml>hdfs://master:54310/user/hadoop/examples/apps/hive5/conf/hive-site.xml</job-xml>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
                <property>   
                    <name>oozie.hive.defaults</name>
                    <value>my-hive-default.xml</value>
                </property>  
            </configuration>
            <script>dim_shop_category3.ql</script>
            <param>ARG_OPTIME_ISO=${ARG_OPTIME_ISO}</param>        
        </hive>
        <ok to="joining"/>
        <error to="fail"/>
    </action>

         <join name="joining" to="hive-node3"/>

            <action name="hive-node3">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <job-xml>hdfs://master:54310/user/hadoop/examples/apps/hive5/conf/hive-site.xml</job-xml>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
                <property>
                    <name>oozie.hive.defaults</name>
                    <value>my-hive-default.xml</value>
                </property>
            </configuration>
            <script>dim_shop_category4.ql</script>
        </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>


該程序實現了每十分鐘運行一次含有三個hive任務的job,timezone=“UTC”表示中央時區(qū)區(qū)時,,可在oozie-site中配置為東八區(qū)時間,,GMT+0800.


 

oozie除了通過配置方式,經由oozie client 提交job外,,還可以用其api來提交,。workflow,properties等都可以通過java api來實現,,并提交給oozie server,。

oozie動作節(jié)點的擴展:

1、繼承ActionExcutor編寫自定義節(jié)點類,。

2,、為新組建定義schema,并添加到oozie-site配置文件中,。

3,、 oozie-site.xml中注冊新組建。

后面就可以在工作流配置文件中使用新的動作節(jié)點了,。

 

 

    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多