2014-04-01 52 views
5

我有2個Sqoops將數據從HDFS加載到MySQL。我想用Oozie來執行它們。我看到Oozie是一個XML文件。我該如何配置它才能執行這些Sqoop?示範與步驟將不勝感激?使用Oozie執行Sqoops

兩個Sqoops是:

1.

sqoop export --connect jdbc:mysql://localhost/hduser --table foo1 -m 1 --export-dir /user/cloudera/bar1 

2.

sqoop export --connect jdbc:mysql://localhost/hduser --table foo2 -m 1 --export-dir /user/cloudera/bar2 

感謝。

回答

6

您不必通過shell操作來執行它。 oozie中有一個單獨的sqoop動作。這裏是你必須把你的workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.4" name="oozie-wf"> 
    <start to="sqoop-wf1"/> 
    <action name="sqoop-wf1"> 
     <sqoop xmlns="uri:oozie:sqoop-action:0.2"> 
       <job-tracker>${jobTracker}</job-tracker> 
       <name-node>${nameNode}</name-node> 
       <command>export --connect jdbc:mysql://localhost/hduser --table foo1 -m 1 --export-dir /user/cloudera/bar1</command> 
     </sqoop> 
     <ok to="sqoop-wf2"/> 
     <error to="fail"/> 
    </action> 
    <action name="sqoop-wf2"> 
     <sqoop xmlns="uri:oozie:sqoop-action:0.2"> 
       <job-tracker>${jobTracker}</job-tracker> 
       <name-node>${nameNode}</name-node> 
       <command>export --connect jdbc:mysql://localhost/hduser --table foo1 -m 1 --export-dir /user/cloudera/bar2</command> 
     </sqoop> 
     <ok to="end"/> 
     <error to="fail"/> 
    </action> 
    <kill name="fail"> 
     <message>Failed, Error Message[${wf:errorMessage(wf:lastErrorNode())}]</message> 
    </kill> 
    <end name="end"/> 
</workflow-app> 

希望這有助於..

+0

嗨,非常感謝。我如何執行workflow.xml?我在哪裏放置workflow.xml文件?我在哪裏定義「$ {jobTracker}」的參數?我是Oozie的新手,我們會很樂意爲您提供幫助。 – Rio

+0

jobTracker和nameNode在這裏是參數化的,這意味着它應該在job.properties文件中定義。似乎你還沒有通過這些例子。檢查apache oozie網站。他們提供了很好的例子。鏈接在這裏。 [https://oozie.apache.org/docs/3.3.2/DG_Examples.html](https://oozie.apache.org/docs/3.3.2/DG_Examples.html) – DMA

+0

好的謝謝。我的Hadoop版本是:Hadoop 2.0.0-cdh4.3.1。我可以在oozie中使用此版本的Hadoop中的sqoop動作嗎? – Rio

0

爲此,您可以使用Oozie shell action。基本上你需要創建一個shell行動&提供您在您的問題張貼的命令在操作中要執行的命令

樣品Oozie的動作:

<action name="SqoopAction"> 
    <shell xmlns="uri:oozie:shell-action:0.1"> 
     <job-tracker>[JOB-TRACKER]</job-tracker> 
     <name-node>[NAME-NODE]</name-node> 
     <prepare> 
      <delete path="[PATH]"/> 
      ... 
      <mkdir path="[PATH]"/> 
      ... 
     </prepare> 
     <job-xml>[SHELL SETTINGS FILE]</job-xml> 
     <configuration> 
      <property> 
       <name>[PROPERTY-NAME]</name> 
       <value>[PROPERTY-VALUE]</value> 
      </property> 
      ... 
     </configuration> 
     <exec>[SHELL-COMMAND]</exec> 
     <argument>[ARG-VALUE]</argument> 
      ... 
     <argument>[ARG-VALUE]</argument> 
     <env-var>[VAR1=VALUE1]</env-var> 
      ... 
     <env-var>[VARN=VALUEN]</env-var> 
     <file>[FILE-PATH]</file> 
     ... 
     <archive>[FILE-PATH]</archive> 
     ... 
     <capture-output/> 
    </shell> 

在你的情況,你將取代[SHELL-COMMAND]與任何Sqoop命令要運行,如:

<exec>sqoop export --connect jdbc:mysql://localhost/hduser --table foo1 -m 1 --export-dir /user/cloudera/bar1</exec> 

另外,你可以把你的所有sqoop命令在shell腳本,並執行該腳本來代替。如果你有很多要執行的命令,這會更好。

+0

您好,感謝您的答覆。我在哪裏放這個XML文件(比如說SqoopAction.xml)?我該如何執行這個XML文件?我爲[PATH],[SHELL SETTINGS FILE],[FILE-PATH] ...設置了什麼?我正在使用「Cloudera QuickStart VM」 – Rio

+0

請閱讀本指南:https://blogs.oracle.com/datawarehousing/entry/building_simple_workflows_in_oozie以瞭解如何通過workflow.xml執行oozie工作流程。此外,我發佈的示例是通用的,因此可能有些參數可能不需要,因此請隨時將它們從工作流程中排除 – Chaos