我正在使用 R-Hadoop 开发一个项目,并遇到了这个问题。
我在 JAVA 中使用 JSch 来 ssh 到远程 hadoop 伪集群,这里是创建连接的部分 Java 代码。
/* 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);
我尝试了几个简单的 R 脚本,我的代码运行良好。但是当涉及到 R-Hadoop 时,R 脚本将停止运行。但如果我Rscript -e 'args1 <- "Dell"; args2 <- 1; source("/usr/local/R/mytest.R")'
直接在远程服务器上运行,一切正常。
这是我在接受 Hong Ooi 的建议后得到的:我没有 使用 Rscript,而是使用了以下命令:
sess.execCommand("R CMD BATCH --no-save --no-restore '--args args1=\"Dell\" args2=1' /usr/local/R/mytest.R /usr/local/R/whathappened.txt");
在 whathappened.txt 中,我收到以下错误:
> 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
好吧,现在问题更清楚了。不幸的是,我对 linux 很陌生,不知道如何解决这个问题。