Spark以及SparkR的安裝(standalone模式)
From :ssdutsu @ Inspur Company
suzhiyuan2006@gmail.com
操作系統 CentOS 7
Java 版本 JDK 1.7
Spark安裝過程請見PDF文件 Spark 1.0的安裝配置文件
網址:http://www.it165.net/admin/html/201407/3379.html
(別忘了配置免密碼登陸和關閉防火牆)
下面重點描述如何在linux環境下安裝R,Rstudio 以及SparkR
1 Linux下安裝R(Slave 機器上也要安裝R)
1.1、下載
首先去官網下載R的軟件包,官網網址為
http://cran.rstudio.com/
1.2、解壓:
tar -zxvf R-3.1.2.tar.gz (目前最新版的R為3.1.2,建議用最新版,否則某些可用的包不支持就麻煩大了)
cd R-3.1.2
1.3、安裝
yum install readline-devel
yum install libXt-devel
(上面兩個安裝我也不知道干啥的,但是如果不先運行這兩行,有可能后續安裝報錯,不安裝你會后悔的)
然后運行./configure --enable-R-shlib --prefix=/home/ssdutsu/R-3.1.2(這里注意要改成自己的R所在的路徑)
(如果使用rJava需要加上 --enable-R-shlib
./configure --enable-R-shlib --prefix=/usr/R-3.1.2(!!由於SparkR是需要rJava的,所以建議后面這些亂七八糟的參數最好加上))
然后運行
make
make install
1.4、配置環境變量
vi .bash_profile
PATH=/usr/R-3.1.2/bin(同樣注意這里的路徑)
(這里別source)
1.5、測試:創建腳本(t.R)
cd /opt/script/R
vim t.R
#!/path/to/Rscript #第一行
x<-c(1,2,3) #R語言代碼
y<-c(102,299,301)
model<-lm(y~x)
summary(model)
1.6、測試:執行腳本
R CMD BATCH --args /opt/script/R/t.R
more /opt/script/R/t.Rout #查看執行的結果
或者第二種方式
Rscript /opt/script/R/test.R #結果直接輸出到終端
2 Linux安裝Rstudio
Rstudio有兩個版本,一個是desktop版本,主要用於個人單機開發,還有一個server版,可以從瀏覽器中訪問Rstudio,適用於多人協作開發。(Ps:Rstudio是開發R最強大的IDE,沒有之一, sever版本只能在linux上安裝)
安裝Rstudio的過程很簡單,去官網下載rpm包,然后rpm他就行了。(別問我rpm是什么,我也不知道, (linux高手表示不屑於問))
官網地址:
Server版:http://www.rstudio.com/products/RStudio/#Server
Desktop 版:http://www.rstudio.com/products/RStudio/#Desk
(左邊是免費的,右邊是收費版本,土豪請無視免費,下載個收費的讓我們看看也好)
安裝完成之后,Rstudio會自動匹配系統中的R環境,並且加載相應位置的R包,在R shell中運行 .libPaths()可查看相應的R包都裝在什么地方。
Rstudio-server 的默認安裝路徑是 /usr/lib/rstudio-server
如果要啟動rstudio server服務器,運行相應bin目錄下的 ./rstudio-server start 就可以了, 然后打開瀏覽器,輸入本機IP地址:8787 (192.168.67.130:8787) 就可以訪問了,默認端口是8787(真霸氣)。
PS:,Rstudio使用linux系統本身的用戶名密碼進行登陸,同時不允許root用戶登陸。(這個就導致了一個很扯淡的問題:你無法在rstudio中進行R包的部分管理操作,比如刪除SparkR包,刪除rJava包等)
3 Linux 安裝SparkR
(這時候系統的R以及Rstudio已經安裝完畢,並且我假設OpenJDK的版本大於7.0)
3.1 首先要配置R的java環境
在linux終端中輸入命令: R CMD javareconf
然后安裝rJava
在linux終端中 輸入 R 即可進入R shell
運行install.packages(“rJava”)
(注意)這行代碼運行完成之后,會提示你選擇一個鏡像地址下載rJava文件,別選中科大(Hefei)的鏡像,貌似沒有rJava這個東西,選擇Beijing的。
下面是兩種方法安裝SparkR
3.2 安裝SparkR
3.2.1 通過R shell 安裝(建議不要這么干)
雖然這個方法可以安裝,但是你的spark的版本必須是1.1.0,否則還是算了,(博主的spark1.2.0 然后用了這個方法,一把辛酸淚啊)。
安裝devtools包
Devtools里面有個install-github 函數,可以方便地在Rshell中安裝SparkR
在Rshell 中加載 devtools
library(devtools)
install-github("","") 資料很多,實在是懶得上傳圖片。
這行install-github 的命令,運行起來可能會比較慢 (取決於網速和人品,不幸的是, 樓主RP和網速都沒有給力,多試幾次,總會好的)
安裝完SparkR之后,可以用wordcount來檢驗安裝正確與否。
步驟1:在R shell中加載SparkR
步驟2:初始化SparkContext及執行wordcount
sc <- sparkR.init(master="local", "RwordCount")
lines <- textFile(sc, "README.md")
words <- flatMap(lines,
function(line) {
strsplit(line, " ")[[1]]
})
wordCount <- lapply(words, function(word) { list(word, 1L) })
counts <- reduceByKey(wordCount, "+", 2L)
- output <- collect(counts)
for (wordcount in output) {
cat(wordcount[[1]], ": ", wordcount[[2]], "\n")
}
如果想將SparkR運行於集群環境中,只需要將master=local,換成spark集群的監聽地址即可(sparkR.init(“spark://192.168.
1.137:7077”))
方法1的好處是,sparkR自動安裝到其他的R包所在的目錄下,不用在.libPaths()重新增加新的路徑,缺點是靠網速和人品。
3.2.2 通過源代碼進行編譯
從網頁下載代碼https://github.com/amplab-extras/SparkR-pkg sparkR的代碼編譯
下載zip或者tgz文件之后,解壓縮,然后cd 進入解壓縮之后的文件包,里面有這些東西在 (有個examples 可以用一下)
然后 [root@master sparkR]# SPARK_VERSION=1.2.0 HADOOP_VERSION=2.4.0 ./install-dev.sh ./install-dev.sh (前面紅色取決於你的SparkVersion和Hadoop Version,博主就是因為沒有指定version,被搞了好幾天)
另外還需要在spark的conf目錄下面修改 spark-defaults-conf這個文件 加一行 spark.master spark://Master的ip: Master的端口
就可以直接搞定了,運行完成之后,會在同一個目錄下面生成一個lib文件夾,lib文件夾里面就是SparkR文件夾,這個文件夾就是R語言能認識的“SparkR包”。
然后,在終端中運行 ./sparkR這個可執行文件,就會自動進入R 的shell,同時自動加載SparkR包。
運行例子程序(僅限方法2):
local表示是在本地運行,[2]表示啟動了兩個線程。
如果想將SparkR運行於集群環境中,只需要將master=local,換成spark集群的監聽地址即可(sparkR.init(“spark://192.168.
1.137:7077”))
注意了(注意真多),worker也就是 slave上面也必須安裝SparkR才行。
關於方法2的優點是不依靠人品,缺點是如果通過 R 來啟動 Rshell的話,不配置一下.libPaths() R無法找到sparkR在哪,配置過程如下:
代碼都在 R shell中運行
lib_path<- .libPaths()
lib_path<-c(lib_path,”你的sparkR的路徑一直到3.2下方圖的lib 目錄”)
.libPaths(Lib_path)
rm(lib_path)
這樣就可以了,如果rstudio也找不到,在rstudio的界面命令行里,運行一次同樣的代碼。
(上面這行代碼貌似是臨時性的,重啟機器后libpath又沒了,永久性解決方法: 打開/XX/.bashrc 文件(XX是用戶名,千萬別搞錯了bashrc的位置啊,血的教訓),然后 添加一行:export R_LIBS=/home/ssdutsu/R/SparkR-pkg-master/lib) 別忘了source,這樣得到的默認路徑改成SparkR的路徑了,不過Rstudio安裝包時可以自由選擇,已經無傷大雅了。
最后一點:(困擾了我好久)
通過Rshell運行sparkR的示例程序,是沒有問題的。但是我使用Rstudio-server版本運行上面的sparkR示例程序時,總是報 can not find Rscript 的錯誤,上網搜了一下,也有很多人在問,但是沒有解決方法。我換成了Rstudio的desktop版,就正常運行了。 估計是Rstudio server和Rscript的鏈接問題導致的。