Скрипт оболочки не запускает R (Rhipe) программу из Java - PullRequest
1 голос
/ 19 февраля 2012

У меня есть простой сценарий оболочки, который выглядит следующим образом:

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

Этот сценарий оболочки запускает myMRjob.R и получает выходные данные из hdfs в локальную файловую систему.Он прекрасно работает с терминала.

Когда я пытаюсь запустить сценарий оболочки из кода Java, я не могу запустить задание MapReduce, т.е. первая строка не выполняется.В то время как строка «hadoop fs -get ..» работает нормально через код Java.

Код Java, который я использовал:

import java.io.*;

public class Dtry {

   public static void main(String[] 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();
         }
   }
}

Причина всего этого упражнения в том, что я хочувызвать и отобразить результат myMRjob.R в JSP.

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 11 сентября 2012

Причина, по которой ваш сценарий оболочки не запускается из вызова exec, заключается в том, что сценарии оболочки на самом деле являются просто текстовыми файлами и не являются собственными исполняемыми файлами.Это оболочка (Bash), которая знает, как их интерпретировать.Вызов exec ожидает найти собственный исполняемый двоичный файл.

Настройте Java таким образом, чтобы он вызывал оболочку и запускал скрипт:

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

Когда вы вызывали hadoop напрямуюиз Java это собственный исполняемый файл, и именно поэтому он работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...