2012-10-17 48 views
1

我想使用java代碼啓動oozie動作。當使用命令行時,我們通過「-config job.properties」指定屬性文件,它知道要選擇哪個工作流。我們如何在java代碼中定義「job.properties」文件來完成相同的任務?在java代碼中設置job.properties文件來啓動oozie動作

conf.setProperty(OozieClient.APP_PATH,"hdfs://clusterdb05.com:8020/user/apps/merge-logs/workflow.xml"); 
    conf.setProperty("jobTracker", "jobtracker.com:8021"); 
    conf.setProperty("nameNode", "hdfs://namenode.com:8020"); 
    conf.setProperty("queueName", "jobtracker.com:8021"); 
    conf.setProperty("appsRoot", "hdfs://namenode.com:8020/user/apps"); 

    try { 
     String jobId = wc.run(conf); 

     System.out.println("Workflow job submitted"); 

     while (wc.getJobInfo(jobId).getStatus() == WorkflowJob.Status.RUNNING) { 
      System.out.println("Workflow job running ..."); 
      Thread.sleep(10 * 1000); 
     } 
     System.out.println("Workflow job completed ..."); 
     System.out.println(wc.getJobInfo(jobId)); 
    } catch (OozieClientException oozieClientException) { 
     oozieClientException.printStackTrace(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

你是如何試圖調用通過Java Oozie的股票代碼 – banjara

+0

@zuxqoj這個代碼只是運行的工作流程和失敗,因爲它無法獲取屬性文件。我想要的只是定義屬性文件,就像我們爲命令行做的那樣,而其他所有內容都從那裏向前移動。任何幫助? – Chirag

+0

你不怎麼處理job.properties? – CycDemo

回答

0

這是ResourceBundel的示例。嘗試與您的程序集成。

public class BundleTest { 
    private ResourceBundle bundle; 

    public BundleTest() { 
     bundle = ResourceBundle.getBundle("job"); 
    } 

    public String getMessage(String id, Object... params) { 
     String text = null; 
     try { 
      text = bundle.getString(id); 
     } catch (MissingResourceException e) { 
      text = "!! key " + id + " not found !!"; 
     } 
     if (params != null) { 
      MessageFormat mf = new MessageFormat(text); 
      text = mf.format(params, new StringBuffer(), null).toString(); 
     } 
     return text; 
    } 

    public static void main(String[] args) { 
     BundleTest test = new BundleTest(); 
     String jobTracker = test.getMessage("jobTracker"); 
     String nameNode = test.getMessage("nameNode"); 
     String queueName = test.getMessage("queueName"); 
     String appsRoot = test.getMessage("appsRoot"); 
     System.out.println(jobTracker); 
     System.out.println(nameNode); 
     System.out.println(queueName); 
     System.out.println(appsRoot); 

     String message2 = test.getMessage("JOB_KEY_2", "Your First"); 
     System.out.println(message2); 
    } 
} 

job.properties

jobTracker=jobtracker.com:8021 
nameNode=hdfs://namenode.com:8020 
queueName=jobtracker.com:8021 
appsRoot=hdfs://namenode.com:8020/user/apps; 
#With Parameter 
JOB_KEY_2= {0} Job 

輸出:

jobtracker.com:8021 
hdfs://namenode.com:8020 
jobtracker.com:8021 
hdfs://namenode.com:8020/user/apps; 
Your First Job 
+0

有什麼代碼可以啓動ann oozie操作? – Chirag

+0

它只是用作配置。 'xx.properties'的主要目的是保持鍵值對的內容。像'Map' – CycDemo

+0

如果我想讀取我的代碼中的每個鍵值對,不會直接使用property.load(「file」)會容易多少? – Chirag

相關問題