Le script shell n’exécute pas le programme R (Rhipe) à partir du code Java

J’ai un script shell simple qui ressemble à ceci:

R --vanilla<myMRjob.R hadoop fs -get /output_03/ /home/user/Desktop/hdfs_output/ 

Ce script shell exécute myMRjob.R et obtient la sortie de hdfs vers le système de fichiers local. Il s’exécute bien du terminal.

Lorsque j’essaie d’exécuter un script shell à partir du code Java, je ne parviens pas à lancer le travail MapReduce, car la première ligne n’est pas exécutée. Alors que la ligne “hadoop fs -get ..” fonctionne correctement via le code Java.

Le code Java que j’ai utilisé est:

 import java.io.*; public class Dtry { public static void main(Ssortingng[] args) { File wd = new File("/home/dipesh/"); System.out.println("Working Directory: " +wd); Process proc = null; try { proc = Runtime.getRuntime().exec("./Recomm.sh", null, wd); } catch (Exception e) { e.printStackTrace(); } } } 

La raison de tout cet exercice est que je veux déclencher et afficher le résultat de myMRjob.R dans JSP.

S’il vous plaît aider!

La raison pour laquelle votre script shell ne s’exécute pas à partir de l’appel exec est que les scripts shell ne sont en réalité que des fichiers texte et qu’ils ne sont pas des exécutables natifs. C’est le shell (Bash) qui sait les interpréter. L’appel exec s’attend à trouver un binary exécutable natif.

Ajustez votre Java comme ceci pour appeler le shell et le faire exécuter votre script:

 proc = Runtime.getRuntime().exec("/bin/bash Recomm.sh", null, wd); 

Lorsque vous avez appelé hadoop directement à partir de Java, il s’agit d’un exécutable natif et c’est pourquoi cela a fonctionné.