RedHat下離線安裝R與Rserve

0前言

  最近學習了有關R語言的內容,並在虛擬機中安裝了RedHat6.5系統,通過部署在RedHat系統的R來實現有關R的計算,因爲客戶要求離線安裝相應的R程序,因此需要事先準備好安裝包。調用R的語言爲Java,下篇爲介紹如何使用Java調用。

1系統信息

  下面的安裝截圖爲win7 64位虛擬機VMWare中的RedHat 6.5安裝過程,且使用的是非root用戶,用戶名007。

  使用的RedHat6.5版本信息如下,如果查找gcc得到的內容與下面的圖不一致,比如沒有gcc-gfortran等,請忽略:
RedHat系統信息

2安裝包準備

  這裏準備的安裝包主要包括R安裝、Rserve安裝包以及可能用到的依賴包,依賴包主要是與gcc編譯器相關,在安裝的過程中如果提示缺少相應的依賴包,可以根據缺少的內容進行安裝,然後再進行R和Rserve的安裝。R和Rserve安裝包(tar.gz文件)都可以從官網直接下載,依賴包(.rpm文件)我是從RedHat系統盤的Packages文件夾中直接提取的,此外JDK也是從官網下載的,可以。安裝準備包如下圖所示:
安裝包

  受上傳權限限制,只好做了兩個下載包供大家下載,分別是:

3RedHat安裝JDK過程

  RedHat系統自帶的有Java環境,不建議使用,尤其是OpenJDK的內容,建議將其卸載後使用自己安裝的JDK,我這裏使用了官網下載的JDK1.6版本。

3.1 檢查系統自帶JAVA環境

  打開一個終端窗口,輸入下面的命令查看是否安裝了java,跟windows查看的一樣,如下:

java -version

  如果返回的信息中顯示版本號的話,證明存在java環境,需要進行卸載。

3.2卸載系統自帶JAVA

  查看自帶的java環境,一般是通過java關鍵字進行搜索來查看安裝的有哪些,以便進行下面的卸載。輸入命令:

rpm -qa|grep java

  得到的結果如下(因系統不同,結果有所不同):

# java-1.4.2-gcj-compat-1.4.2.0-40jpp.112 
# java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5 

  需要卸載上面的自帶java,使用下面的命令:

rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.112 
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5

  卸載完畢後,再使用java -version命令檢測有沒有java環境,如果有的話請使用jdk和gcj關鍵字重複3.1-3.2步驟查找和刪除,確保java環境清理乾淨。

3.3安裝JDK

  1. 拷貝文件
      安裝從官網下載的jdk1.6文件,我下載的是jdk-6u45-linux-x64.bin文件,需要將該文件拷貝到一個目錄下,這裏使用的是/home/007/Java目錄,後面配置時需要使用該目錄,當然你也可以自己選擇一個其他的目錄。
  2. 執行安裝
       進入到/home/007/Java目錄下執行安裝命令,命令如下,等待執行完畢即可:
    [007@localhost Java]$ ./jdk-6u45-linux-x64.bin

3.4配置環境變量

  安裝完jdk之後需要爲用戶配置環境變量,linux下的環境變量配置有三種:
   a. 所有用戶都可以使用的環境變量,下次登錄還可以用;
   b. 當前用戶可以使用使用的環境變量,下次登錄還可以用;
   c. 臨時環境變量,退出登錄後不再有效。

  這裏使用的第二種環境變量,爲007用戶配置環境變量,且下次登錄後還以正常使用,第一種需要root權限,權限太高,還是不使用爲好;第三種相信沒有幾個人會在真正的系統應用中使用吧。

  配置當前用戶環境變量需要修改.bash_profile文件,該文件位於~目錄下,一定要在進入~目錄後執行修改命令,否則會無效的,執行下面的命令:

[007@localhost Java]$ cd ~
[007@localhost ~]$ vi .bash_profile

  通過vi編輯器編輯該文件,如果不知道vi編輯器如何使用的話,自己找下資料吧,這裏就不詳細介紹了,這裏只告訴你輸入完命令後,摁一下字母i進入插入模式,然後上下移動光標定位到要輸入的位置,然後將你看到的內容修改爲下面的內容:

# .bash_profile  

# Get the aliases and functions  
if [ -f ~/.bashrc ]; then  
       . ~/.bashrc  
fi  

# User specific environment and startup programs  
JAVA_HOME=/home/007/Java/jdk1.6.0_45  
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
PATH=$JAVA_HOME/bin:$PATH: 
export JAVA_HOME PATH CLASSPATH 

  不多解釋了,輸入完畢後摁一下esc鍵退出插入模式,進入命令模式,然後直接輸入:x回車即可(輸入的是冒號和小寫x表示保存後退出)。

  配置完之後需要將配置生效,執行下面的命令:

[007@localhost ~]$ source .bash_profile

3.5測試

  配置完java環境變量後,需要測試下java環境變量設置的正確與否,常用的是使用java -version來查看能否得到正確的jdk版本信息,個人建議寫一個簡單的java程序來檢驗下最靠譜,相信我。
  
  隨便找一個位置建立一個java程序文件,比如在/home/007下新建一個HelloJava.java文件,你可以使用gedit來編輯這個文件,增加下面的代碼後保存:

public class HelloJava{
    public static void main(String[] args){
        System.out.println("How do you do?");
    }
}

  在終端中輸入以下命令:

[007@localhost ~]$ cd /home/007
[007@localhost ~]$ javac HelloJava.java
[007@localhost ~]$ java HelloJava

  如果能看到打印出來How do you do?說明安裝配置成功了,一般第二行執行完畢沒有提示任何東西就說明OK了,有問題的話第二行命令執行完就會報錯,如果有問題的話請將提示的錯誤信息貼完整再來討論,沒有錯誤信息很難給出滿意的答覆。

4RedHat安裝R過程

  我使用的R安裝包爲官網下載的R_3.1.2.tar.gz文件,可自行從官網下載或者從我上傳的下載文件中查找。

4.1檢查gcc環境

  R的安裝需要使用gcc和gfortran命令,通常RedHat下自帶了gcc,而gc++和gfortran是沒有安裝的,我們在安裝前最好檢查下,當然你直接執行下面的命令,根據提示進行必要的依賴包安裝也是可以的。
  查看gcc環境的命令如下:

[007@localhost Desktop]$ rpm -qa | grep gcc

  如果得到的結果中包含了gcc-c++和gcc-gfortran開頭的文件,那恭喜你可以繼續進行下面的安裝了,如果你得到的結果只包含一個gcc開頭的,那你需要安裝gcc-c++和gcc-gfortran。安裝文件在我給的下載鏈接中都有,下載解壓後,進入到該文件夾下,執行下面的命令。

  安裝rpm包需要進入到root用戶下纔可以,而這兩個文件的安裝還需要依賴對應的lib文件,在安裝之前需要安裝他們的依賴包,以gfortran安裝爲例。如下圖所示:
安裝gfortran

  安裝gc++與上面的命令相同,只要將安裝文件改爲對應的gc++的即可。

4.2解壓R安裝包

  下載的R-3.1.2.tar.gz是無法直接安裝的,需要現將其解壓到指定的目錄下,不一定是安裝目錄,比如我這裏將其解壓到了/home/007下,我的壓縮包就在/home/007目錄下,因此我進入該目錄執行下面的命令即可完成解壓:

[007@localhost 007]$ tar –zvxf R-3.1.2.tar.gz

  解壓完成後會在/home/007下建立R-3.1.2文件夾。

4.3配置R安裝包

  進入到R-3.1.2文件夾下,執行以下命令:

[007@localhost R-3.1.2]$ ./configure --enable-R-shlib --prefix=/home/007/R3.1.2 --with-x=no --with-readline=no

  後面的參數非常重要,請一定要理解清楚
  
  –enable-R-shlib 這個參數特別重要,如果沒有這個參數,那麼你後面將無法使用Rserve

  –prefix=/home/007/R3.1.2 這個參數是用來定義R的安裝位置的,一定要保證這個目錄存在,如果沒有這個目錄,請先建立這個目錄,不指定這個目錄的話會安裝到解壓目錄即/home/007/R-3.1.2中,不建議這樣,請指定一個空的目錄

  –with-x=no 表示不使用X-Windows系統,也就是類Unix操作系統的GUI, 一般不會使用這個,但默認爲yes,如果你沒有安裝libx的話會報錯的,所以我們直接設置爲no

  –with-readline=no 表示不使用系統的readline庫,如果系統上沒有libreadline,此選項填“no“,默認是yes,但是我的系統下沒有安裝readline庫,而且我也不會在RedHat的命令終端中一行一行的寫R程序,我將其設置了爲no,其結果是我們無法使用上下左右鍵來查找使用過的命令了,呵呵,也罷,反正我也不會寫在終端中寫多少行R命令,如果你要用的話,建議你先查找下你的機器上是否安裝了readline,如果沒有的話我的安裝包中有,將其安裝上之後再設置爲yes,執行上面的命令即可

  很多時候我們在執行這個命令時出現了問題,請確保我上面寫的這四條都已經明白了,還有問題時再將提示的錯誤發到評論裏,我幫你看看。執行完會提示下面的內容:
configure完成

4.4編譯R安裝包

  configure完畢後,需要執行編譯命令,這個的執行過程比較長,請耐心等待下。同樣在解壓縮後的目錄R-3.1.2下執行下面的命令:

[007@localhost R-3.1.2]$ make

  執行完畢後的提示內容,只截取了最後一部分,如下所示:
R編譯完畢

4.5安裝R

  接下來執行安裝命令,還是在解壓縮後的目錄R-3.1.2下執行下面的命令:

[007@localhost R-3.1.2]$ make install

  執行完畢後的提示內容如下所示(只截取了最後一部分):
R安裝完畢

4.6配置R環境變量

  參見3.4內容,將.bash_profile文件修改爲如下的形式:
R環境變量設置

  保存後執行source .bash_profile命令使配置生效。

4.7檢驗R安裝

  修改完R環境變量並使之生效後,可以在終端中輸入R進入R命令窗口,如下圖所示:
R命令窗口

  上圖中輸入R之後會提示你安裝的R版本以及一些使用說明,最後三行是我的測試程序,我輸入了一個向量data,然後查看了該向量。

  輸入q()可以退出R命令行模式。

5RedHat安裝Rserve過程

5.1Rserve安裝

  因爲是離線安裝,因此需要事先準備Rserve安裝包,我這裏使用的是Rserve_1.8-1.tar.gz文件,我提供的安裝包中也存在這個,請根據實際情況下載或從官網下載。
  
  在終端中執行下面的命令:

[007@localhost ~]$ R CMD INSTALL /home/007/Rsrc/Rserve_1.8-1.tar.gz

  安裝過程順利的話很快,截圖如下:
Rserve安裝過程

  安裝成功後提示如下:
Rserve安裝成功

  可以看到最後提示了”Done(Rserve)“說明安裝成功了。

  如果說這裏出現了安裝錯誤的提示,請確認安裝R的時候認真閱讀了我寫的四個參數的意義

  啓動Rserve的命令爲:

[007@localhost ~]$ R CMD Rserve

  啓動成功控制檯會提示“Rserv started in daemon mode.”啓動成功後的界面提示如下圖所示:
Rserve啓動成功

  此時就可以使用Rserve調用R了,但是只限於本地調用,外部電腦無法調用,Rserve默認配置下是不允許遠程調用的,如果不需要外部訪問可以忽略下面的配置內容。

5.2Rserve配置

  使用下面的命令來查看Rserve的配置信息:

[007@localhost ~]$ R CMD Rserve --RS-settings

  執行完畢後會提示Rserve的配置信息,包括配置文件的所在位置,是否允許外部訪問等等,默認讀取的配置文件一般是在/etc/Rserv.conf中,雖然列出了默認的配置文件,但是默認該配置文件是不存在的,這裏只是告訴用戶如果需要配置的話新建該配置文件然後在該配置文件中進行配置即可。

  因爲我需要遠程調用RedHat下的Rserve,因此我需要開啓遠程訪問功能,而etc文件夾下新建文件是需要root權限的,因此我還需要切換到root用戶下新建一個Rserv.conf文件,並在其中添加一行代碼,如下:

remote enable

  添加完畢保存,然後重新啓動Rserve即可完成配置了。

5.3其他Rserve相關命令

5.3.1查看Rserve狀態

[007@localhost ~]$ ps -aux | grep Rserve

  這時會列出所有Rserve的進程,包括進程號2766,如下圖所示:
Rserve進程

5.3.2查看Rserve訪問情況

[007@localhost ~]$ netstat –ntlp|grep Rserve

  結果如下:
Rserve訪問
  0.0.0.0表示所有都可以訪問(開啓遠程訪問後狀態),127.0.0.1表示只允許本地訪問。端口號是6311,默認的端口號。

5.3.3結束Rserve進程

[007@localhost ~]$ kill -pid 2766

6結束語

  安裝完Rserve後,當需要通過Rserve調用R時,需要在安裝好Rserve的電腦上啓動Rserve方能進行調用。

  此外,如果安裝R的服務器上配置了防火牆策略,還需要修改防火牆,具體配置這裏不再詳細說明,請查閱相關資料進行。

  下一篇內容將具體介紹如何使用Java語言調用R。


送人玫瑰,手有餘香,轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章