Rstudio-server环境变量未加载?

19

我正在尝试在Cloudera的hadoop发行版上运行rhadoop(我记不清是CDH3还是4),但遇到了一个问题:Rstudio服务器似乎无法识别我的全局变量。

在我的/etc/profile.d/r.sh文件中,我有如下内容:

export HADOOP_HOME=/usr/lib/hadoop
export HADOOP_CONF=/usr/hadoop/conf
export HADOOP_CMD=/usr/bin/hadoop
export HADOOP_STREAMING=/usr/lib/hadoop-mapreduce/

当我从终端运行R时,会得到以下信息:

> Sys.getenv("HADOOP_CMD")
[1] "usr/bin/hadoop"

但是当我运行Rstudio服务器时:

> Sys.getenv("HADOOP_CMD")
[1] ""

因此,当我尝试运行rhdfs时:

> library("rJava", lib.loc="/home/cloudera/R/x86_64-redhat-linux-gnu-library/2.15")
> library("rhdfs", lib.loc="/home/cloudera/R/x86_64-redhat-linux-gnu-library/2.15")
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 'rhdfs'

如果不是在那个特定的 r.sh 文件中设置环境变量,有人知道我应该把它们放在哪里吗?

谢谢!

3个回答

14

您应该在.RenvironRenviron.site中设置您的环境变量。我认为这些文件定义在R_HOME/etc/Renviron.site下面。您可以输入以下内容获取更多信息:

> ?Startup

有人遇到了类似的问题这里,他解决的方法如下。


2
对我有用,我在/usr/lib/R/etc/Renviron中添加了SOMEVAR = /somepathR.home() =“/usr/lib/R”。 我重新启动了RStudio,Sys.getenv('SOMEVAR')正确找到了变量。 - user1609452
2
顺便说一句,那个“here”链接目前已经过时了,我同意@AI52487963的看法,对于新手来说,“?Startup”文档并不是很有帮助。 - James Tobin
2
如果有帮助的话,当你将新的环境变量添加到Renviron中,并重新启动rstudio服务器时,当你使用system("env")时,可能最初看不到额外的环境变量。然而,当你至少在重新启动rstudio服务器后切换一次项目时,当你调用system("env")时,你应该会看到你添加的新环境变量。 - FXQuantTrader
这个解决方案适用于我使用的RStudio服务器。谢谢! - akunyer
不幸的是,这会在启动R之后设置环境变量,而不是在启动之前设置,这意味着控制应用程序启动的环境变量将被忽略。似乎在免费版本的RStudio Server中没有解决方法,只有专业版才有。 - Konrad Rudolph
显示剩余2条评论

3
请注意,在Windows系统中,R软件会在/Users/<name>/Documents寻找.Renviron文件,但是RStudio似乎期望该文件在/Users/<name>/目录下。

-1

你应该在Rstudio中设置环境变量,例如

Sys.setenv("/path to hadoop")

然后你可以尝试这样做


1
这是解决路径问题的有效方法,但请注意正确的语法应该是 Sys.setenv(HADOOP_CMD="/path/to/hadoop") - FvD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接