2013-06-01 123 views
13

我試圖在Cloudera的hadoop發行版上運行rhadoop(我不記得它的CDH3或4),並且遇到了一個問題:Rstudio服務器似乎無法識別我的全局變量。Rstudio-server環境變量未加載?

在我/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文件?

謝謝!

回答

11

您應該在.RenvironRenviron.site中設置您的環境變量。我認爲這些文件在R_HOME/etc/Renviron.site下定義。您可以通過鍵入獲得更多信息:

> ?Startup 

有人也有類似的問題here,這是他做了什麼來解決這個問題。

+0

嗯...我加入 HADOOP_CMD = 「在/ usr/bin中/ Hadoop的」 了我的〜/ .Rprofile,但似乎並沒有這樣的伎倆。 Rstudio服務器仍然爲Sys.getenv(「HADOOP_CMD」)提供結果。 – AI52487963

+1

爲我工作我將'SOMEVAR =/somepath'添加到'/ usr/lib/R/etc/Renviron'。 'R.home()=「/ usr/lib/R」'。我重新啓動了RStudio,並且'Sys.getenv('SOMEVAR')'正確地找到了該變量。 – user1609452

+0

對不起,我是rstudio-server的新手,似乎無法弄清楚Renviron配置文件的位置。在'/ usr/lib /'中,我只有'firstudio-server'和子文件夾'bin','extras','R','resources'和'www'。有推薦的地方啓動一個Renviron文件嗎? – AI52487963

0

你應該設置環境變量Rstudio像

Sys.setenv( 「到Hadoop的/路徑」)

,然後你試試這個

+0

這是解決路徑問題的有效方法,但請注意,正確的語法是'Sys.setenv(HADOOP_CMD =「/ path/to/hadoop」)'。 – FvD

2

需要注意的是在Windows上,R會尋找.Renviron文件位於/Users/<name>/Documents,而RStudio似乎預計.Renviron文件位於/Users/<name>/