我正在使用R-Hadoop的项目,并得到了这个问题。无法远程执行R脚本加载库“rhdfs”
我在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")'
,一切正常。
这是我服用香港大井的建议后得到: 而不是使用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很新,也不知道如何解决这个问题。
什么错误消息(S)你用RHadoop获得?他们是Java还是R错误? –
@HongOoi R脚本会自动运行在远程服务器的后台,这意味着远程服务器的命令行用户界面保持不变,因此我甚至不知道远程服务器发生了什么。即使我将猫(“blabla”)添加到R脚本中,我也不会在远程服务器上获得任何打印的信息。所以我使用了一个棘手的方法,生成名称为“Inside xxx function”的txt文件,以查看脚本的行进距离,结果每次尝试执行“library(”any“)时都会停止。” –
您可以使用'sink'将输出重定向到一个文件。这可能有助于您诊断正在发生的事情。 –