2016-05-03 32 views
0

我試圖從oozie啓動sqoop動作,並嘗試過自己以及在論壇上提問。我不斷收到相同的錯誤。如何使用oozie觸發sqoop動作

job.properties: 

nameNode=hdfs://FQDN:8020 
jobTracker=FQDN:8050 
queueName=default 
user.name=oozie 
oozie.use.system.libpath=true 
oozie.action.sharelib.for.sqoop=hive,hcatalog,sqoop 
oozie.action.sharelib.for.hive = hive,hcatalog,sqoop 
oozie.wf.application.path=${nameNode}/user/${user.name}/scheduledimport 
start=2016-04-26T00:00Z 
end=2016-12-31T00:00Z 
workflowAppUri=${nameNode}/user/${user.name}/scheduledimport 

我只從oozie用戶啓動oozie作業。

我的worflow不過是一個簡單的list table命令:除此之外,我擁有oozie-site.xml中的所有默認配置。

我已經確認並在/用戶存在共享/ LIB/lib_timestamp夾/ Oozie的

<workflow-app name="once-a-day" xmlns="uri:oozie:workflow:0.1"> 
     <start to="sqoopAction"/> 
     <action name="sqoopAction"> 
       <sqoop xmlns="uri:oozie:sqoop-action:0.2"> 
         <job-tracker>${jobTracker}</job-tracker> 
         <name-node>${nameNode}</name-node> 
        <command>list-tables --driver com.mysql.jdbc.Driver 
--connect jdbc:mysql://FQDN/erp --username hive --password hive 
        </command> 
       </sqoop> 
       <ok to="end"/> 
       <error to="killJob"/> 
     </action> 
     <kill name="killJob"> 
      <message>"Killed job due to error: ${wf:errorMessage(wf:lastErrorNode())}"</message> 
     </kill> 
     <end name="end" /> 
</workflow-app> 

Oozie的管理員-oozie http://FQDN:11000/oozie/ -shareliblist輸出:

[Available ShareLib] 
hive 
mapreduce-streaming 
oozie 
sqoop 
pig 

我還試圖加入的配置inline in workflow.xml

此外,檢查我的oozie-site.xml有

<property> 
     <name>oozie.service.WorkflowAppService.system.libpath</name> 
     <value>/user/oozie/share/lib</value> 
    </property> 

這是我的依賴關係。

哪個jar文件有org.apache.oozie.action.hadoop.SqoopMain? 但我不斷收到此錯誤:

java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SqoopMain not found 

我已經確定,與jar文件夾已要求設置權限和訪問用戶的。嘗試更新共享/ lib文件夾。確保該文件夾具有sqoop相關的依賴關係,但不起作用。

+0

最新的錯誤,你會得到什麼? –

+0

@NishuTayal:請檢查更新 –

回答

1

下面可能是這個ClassNotFoundException的根本原因:

  1. 無論Sqoop罐子是不是在sharelib目錄
  2. oozie.use.system.libpath可用未設置爲true。

在你的情況,你已經設置oozie.use.system.libpath =真

確保,sharelib目錄具有sqoop依賴。

與下列財產應在Oozie的-site.xml中設置(在情況下,如果不使用默認sharelib路徑):

<property> 
    <name>oozie.service.WorkflowAppService.system.libpath</name> 
    <value>/user/oozie/share/lib</value> 
    </property> 

雖然提交的工作流程,使用正確的job.properties。

$ oozie job -oozie http://localhost:11000/oozie -config job.properties -run 

我也遇到了類似的問題,但是設置oozie.use.system.libpath=true解決了它。

這裏是Oozie sharelib documentation

+0

要在oozie-site.xml中設置的屬性,我已經通過ambari界面添加了。在自定義oozie-site中:oozie.service.WorkflowAppService.system.libpath:/ user/oozie /共享/ lib目錄下。當你說默認的sharelib沒有被使用時,user/oozie/share/lib是不是默認的?這就是我的全部。另外,你說它發生在sqoop罐子不可用的時候,正如我的shareliblist命令所顯示的,sqoop罐子可用但我正面臨問題 –

1

類apache.oozie.action.hadoop.SqoopMain是MySQL的連接器的Java的一部分 - *罐子。您需要下載並添加到Oozie庫。