2013-02-22 113 views
0

我有一個使用tomcat的動態web項目(hadoop已安裝)。我想讓用戶通過網站爲我的hadoop應用程序定義一個參數。然後在服務器上,我希望通過hadoop提供的查詢參數運行我的jar。所以基本上我想我的服務器上運行以下命令:在tomcat上通過hadoop運行jar

hadoop jar query.jar query 

因爲Hadoop的我不能簡單地直接使用query.jar的方法在我的動態Web項目。所以我只想讓服務器在其cmd中運行上述命令。我已經將query.jar放入了我的服務器的WEB-INF/lib文件夾中。我嘗試下面的代碼在我的servlet:

String query = request.getParameter("query"); 
    String execute = "hadoop jar WEB-INF/lib/query.jar " + query; 
    Process process = Runtime.getRuntime().exec(execute); 
    try { 
     process.waitFor(); 
    } catch (InterruptedException ex) { 
     System.out.print("Error running jar"); 
    } 
    System.out.print("Execution Successful"); 

雖然我總是得到一個「執行成功」,我的Hadoop的工作永遠不會在服務器上執行。我在提供的execute String中的query.jar的路徑是否正確?還有其他錯誤嗎?

回答

0

只是因爲你Execution Successful並不意味着它得到正確執行。如下更改代碼。因爲這是要在服務器端運行

String query = sanitize(request.getParameter("query")); 
String hadoopHome = System.getenv("HADOOP_HOME"); 
if(hadoopHome == null) { 
    hadoopHome = "<ABSOLUTE PATH TO HADOOP>"; 
} 
String execute = hadoopHome + "/bin/hadoop jar <ABSOLUTE PATH TO>/query.jar <Class Name> " + query; 
Process process = Runtime.getRuntime().exec(execute); 
int i = -1; 
try { 
    i = process.waitFor(); 
} catch (InterruptedException ex) { 
    System.out.print("Error running jar"); 
} 
if(i == 0) { 
    System.out.print("Execution Successful"); 
} else { 
    System.out.print("Error running jar"); 
} 

方法sanitize應該刪除任何惡意代碼。