Nie udało się zdalnie wykonać skryptu R, który ładuje bibliotekę „rhdfs”

Pracuję nad projektem przy użyciu R-Hadoop i mam ten problem.

Używam JSch w JAVA do ssh do zdalnego pseudo-klastra hadoop i oto część kodu Java do tworzenia połączenia.

/* Create a connection instance */
Connection conn = new Connection(hostname);
/* Now connect */
conn.connect();
/* Authenticate */
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
/* Create a session */
Session sess = conn.openSession();
//sess.execCommand("uname -a && date && uptime && who");
sess.execCommand("Rscript -e 'args1 <- \"Dell\"; args2 <- 1; source(\"/usr/local/R/mytest.R\")'");
//sess.execCommand("ls");
sess.waitForCondition(ChannelCondition.TIMEOUT, 50);

Próbowałem kilku prostych skryptów R, a moje kody działały dobrze. Ale jeśli chodzi o R-Hadoop, skrypt R przestanie działać. Ale jeśli ucieknęRscript -e 'args1 <- "Dell"; args2 <- 1; source("/usr/local/R/mytest.R")' bezpośrednio na zdalnym serwerze, wszystko działa dobrze.

Oto, co dostałem po przyjęciu sugestii Hong Ooi: Zamiast używać Rscript użyłem następującego polecenia:

sess.execCommand("R CMD BATCH --no-save --no-restore '--args args1=\"Dell\" args2=1' /usr/local/R/mytest.R /usr/local/R/whathappened.txt");

W whathappened.txt dostałem następujący błąd:

> args=(commandArgs(TRUE))
> for(i in 1:length(args)){
+      eval(parse(text=args[[i]]))
+ }
> source("/usr/local/R/main.R")
> main(args1,args2)
Loading required package: rJava
Error : .onLoad failed in loadNamespace() for 'rhdfs', details:
  call: fun(libname, pkgname)
  error: Environment variable HADOOP_CMD must be set before loading package rhdfs
Error: package/namespace load failed for 鈥榬hdfs鈥?
Execution halted

Cóż, teraz problem jest znacznie jaśniejszy. Niestety, jestem całkiem nowy w Linuksie i nie mam pojęcia, jak to rozwiązać.

questionAnswers(2)

yourAnswerToTheQuestion