2015-03-19 131 views
1

我可以在腳本中編寫sqoop導入命令並以oozie身份執行它作爲協調器工作流嗎?oozie在shell腳本中運行Sqoop命令

我已經厭倦了這樣做,發現錯誤沒有發現說sqoop命令,即使我給的絕對路徑sqoop執行

script.sh如下

sqoop import --connect 'jdbc:sqlserver://xx.xx.xx.xx' -username=sa -password -table materials --fields-terminated-by '^' -- --schema dbo -target-dir /user/hadoop/CFFC/oozie_materials

和我已經放在HDFS文件,並給Oozie的其path.The工作流程如下:

<workflow-app xmlns='uri:oozie:workflow:0.3' name='shell-wf'> 
<start to='shell1' /> 
<action name='shell1'> 
    <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>script.sh</exec> 
     <file>script.sh#script.sh</file> 
    </shell> 
    <ok to="end" /> 
    <error to="fail" /> 
</action> 
<kill name="fail"> 
    <message>Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> 
</kill> 
<end name='end' /> 

oozie在mapreduce日誌中找不到sqloop命令時返回錯誤。

那麼這是一個很好的做法?

謝謝

回答

0

shell動作將作爲映射器任務運行,如您所觀察到的。 sqoop命令需要在映射器運行的每個數據節點上存在。如果確保sqoop命令行在那裏並且對提交作業的用戶具有適當的權限,那麼它應該可以工作。

驗證的方式可以是:

  • ssh來的Datanode爲特定用戶
  • 運行命令行sqoop,看看它的工作原理
+1

我已經說過,但oozie返回一個JA018錯誤代碼和消息作爲'Main類[org.apache.oozie.action.hadoop.ShellMain],退出代碼[1]'。我已經指出oozie sqoop的sharelibs,但它返回該錯誤。 – 2015-03-24 10:36:24

+0

你解決了這個問題嗎?我面臨同樣的問題。如果你能幫助Hussain Shaik,那將非常棒 – 2015-04-02 14:33:12

0

嘗試添加sqljdbc41.jar SQLSERVER驅動程序添加到您的HDFS並在您的workflow.xml中添加歸檔標籤,然後嘗試運行oozie工作流程運行命令:

<archive>${HDFSAPATH}/sqljdbc41.jar#sqljdbc41.jar</archive> 

如果存在問題then..add蜂房的site.xml下面的屬性,

javax.jdo.option.ConnectionURL 
hive.metastore.uris 

保持蜂房的site.xml在HDFS,並在workflow.xml添加文件標籤,並重新啓動了Oozie workflow.xml