SparkR on Yarn 安裝配制

剛完成SparkR的支持腹鹉,順手記錄下流程…

1 編譯SparkR

1.1 生成SparkR的lib包

# where /home/username/R is where R is installed and /home/username/R/bin contains the files R and RScript
export R_HOME=/home/username/R
cd $SPARK_HOME/R
./install-dev.sh

1.2 編譯Spark

./dev/make-distribution.sh --tgz -Psparkr \  
-Pyarn -Phadoop-2.7 \  
-Dhadoop.version=2.7.2-307  -Phive  \  
-Phive-thriftserver  -Pnetlib-lgpl  \
-Pspark-ganglia-lgpl -DskipTests  \
-Denforcer.skip=true

1.3 local模式運(yùn)行SparkR

./bin/sparkR --master local[2]

測試用例參見官方文檔:R on Spark

2 Yarn模式運(yùn)行SparkR

依據(jù)SparkR的執(zhí)行原理, 其需要在每個Executor(JVM)中啟動一個R進(jìn)程,因此,若集群節(jié)點(diǎn)未安裝R環(huán)境的需要通過參數(shù)指定的方式自定義R環(huán)境墓赴。其過程如下:

2.1 創(chuàng)建R的可執(zhí)行程序包

我們的Linux環(huán)境為Centos航瞭, R官方僅提供了yum安裝方式刊侯,未提供Binary的完整程序包,因此需要自己制作滨彻,此處我們選擇使用Conda進(jìn)行制作(Conda 是一個開源的軟件包管理系統(tǒng)和環(huán)境管理系統(tǒng)亭饵,用于安裝多個版本的軟件包及其依賴關(guān)系,并在它們之間輕松切換)踏兜。

2.1.1 Conda 安裝

Anaconda 官方網(wǎng)站下載適合節(jié)點(diǎn)環(huán)境版本的Conda八秃,下載文件為.sh后綴的腳本文件。

//安裝
bash Anaconda2-5.0.1-Linux-x86_64.sh
//默認(rèn)安裝位置為用戶根目錄下

由于官網(wǎng)的鏡像在境外,訪問速度太慢疹尾,為了能夠加快訪問的速度,需要設(shè)置清華鏡像清華大學(xué)開源軟件鏡像站-anaconda骤肛。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --set show_channel_urls yes

2.1.2 使用Conda創(chuàng)建R Essentials

安裝R Essentials至當(dāng)前環(huán)境

conda install -c r r-essentials

創(chuàng)建R環(huán)境

conda create -p /home/chenchengchen/r_env --copy -y -q r-essentials -c r

命令執(zhí)行完成時將在"/home/chenchengchen/r_env"目錄生成執(zhí)行R必要的binary及l(fā)ib.

值得注意的是:Conda生成的R腳本中使用了目錄的絕對路徑纳本,需要對其進(jìn)行修改,否則腋颠,在Yarn container中將發(fā)生找不到文件的錯誤繁成。

cd /home/chenchengchen/r_env/bin/

# 將R文件中的"/home/chenchengchen"替換為".",替換的路徑?jīng)Q定下面的打包路徑及spark環(huán)境配制秕豫,此處一定注意朴艰;
# 本例采用sed進(jìn)行替換(vim命令也可)观蓄,# sed -i 's/原字符串/新字符串/' filepath; 因其語法原因,若路徑中存在"/"需要使用"\"轉(zhuǎn)義
sed -i "s/\/home\/chenchengchen/./g"  R

將Conda提取的R環(huán)境打包成zip祠墅,即可交由Spark使用.

# 進(jìn)入r_env目錄
cd /home/chenchengchen/r_env
# 依據(jù)上述sed的重命名的路徑侮穿,將r_env中文件打包到zip的根目錄(解壓開沒有目錄結(jié)構(gòu)毁嗦,直接為r_env中的眾文件)
zip -r -p r_env.zip *

2.2 Yarn模式提交SparkR(shell 腳本亲茅,spark-submit類似)

sparkR --master yarn \  
--deploy-mode client \  
--queue your.queue.name \
--archives ~/r_env.zip#r_env \   # 
--conf spark.executorEnv.RHOME=./r_env  \  ## R環(huán)境配制與打包路徑有關(guān)
--conf spark.r.command=./r_env/bin/Rscript \

提交成功后,執(zhí)行如下代碼進(jìn)行測試:

df <- as.DataFrame(faithful)

# Displays the first part of the SparkDataFrame
head(df)
##  eruptions waiting
##1     3.600      79
##2     1.800      54
##3     3.333      74

測試用例參見官方文檔:R on Spark

2.2.1 Yarn Cluster模式

上述舉例為Yarn Client模式狗准,若要使用Yarn Cluster模式克锣,還需指定"spark.yarn.appMasterEnv.RHOME=./r_env";

3 第三方 R依賴包安裝

在SparkR控制臺,以命令行方式安裝第三方R依賴包腔长,安裝方式有如下兩種:

(1)網(wǎng)絡(luò)安裝(以mvtnorm為例)

install.packages(“mvtnorm”, repos=“http://cran.us.r-project.org”)

(2)本地安裝

# 首先下載mvtnorm.tar.gz至本地
path <- /home/chenchengchen/mvtnorm.tar.gz

#安裝依賴包
install.packages(path, repos=NULL, type="source")

執(zhí)行安裝命令后袭祟,第三方依賴包會被安裝至$SPARK_HOME/R/lib目錄下。

## 目錄結(jié)構(gòu)
mvtnorm  SparkR  sparkr.zip

雖然已安裝至lib目錄下捞附,但真正上傳集群的sparkr.zip中并無mvtnorm庫巾乳,需要刪除sparkr.zip重新打包

# 刪除原sparkr.zip
rm sparkr.zip
# 重新打包sparkr.zip文件
# 要在R/lib目錄下操作,否則會現(xiàn)打不到文件異常
zip -r sparkr.zip *

重新啟動sparkR 即可正常運(yùn)行

3.1 測試 demo

df <- createDataFrame(list(list(1L, 1, "1"), list(2L, 2, "2"), list(3L, 3, "3")), c("a", "b", "c"))
showDF(df)

+---+---+---+
|  a|  b|  c|
+---+---+---+
|  1|1.0|  1|
|  2|2.0|  2|
|  3|3.0|  3|
+---+---+---+

schema <- structType(structField("a", "integer"), structField("b", "double"), structField("c", "string"), structField("d", "double"))

df1 <- dapply(df, function(x) {
library(mvtnorm)
x <- cbind(x, x$a * rmvnorm(n=1, mean=c(1))) }, schema)

showDF(df1)

+---+---+---+------------------+
|  a|  b|  c|                 d|
+---+---+---+------------------+
|  1|1.0|  1|0.8024247855452726|
|  2|2.0|  2|1.6048495710905453|
|  3|3.0|  3| 2.407274356635818|
+---+---+---+------------------+
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸟召,隨后出現(xiàn)的幾起案子胆绊,更是在濱河造成了極大的恐慌,老刑警劉巖欧募,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件压状,死亡現(xiàn)場離奇詭異,居然都是意外死亡跟继,警方通過查閱死者的電腦和手機(jī)种冬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來还栓,“玉大人碌廓,你說我怎么就攤上這事传轰∈:校” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵慨蛙,是天一觀的道長辽聊。 經(jīng)常有香客問我,道長期贫,這世上最難降的妖魔是什么跟匆? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮通砍,結(jié)果婚禮上玛臂,老公的妹妹穿的比我還像新娘烤蜕。我一直安慰自己,他們只是感情好迹冤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布讽营。 她就那樣靜靜地躺著,像睡著了一般泡徙。 火紅的嫁衣襯著肌膚如雪橱鹏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天堪藐,我揣著相機(jī)與錄音莉兰,去河邊找鬼。 笑死礁竞,一個胖子當(dāng)著我的面吹牛糖荒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播模捂,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼寂嘉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了枫绅?” 一聲冷哼從身側(cè)響起泉孩,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎并淋,沒想到半個月后寓搬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡县耽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年句喷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兔毙。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡唾琼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出澎剥,到底是詐尸還是另有隱情锡溯,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布哑姚,位于F島的核電站祭饭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏叙量。R本人自食惡果不足惜倡蝙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绞佩。 院中可真熱鬧寺鸥,春花似錦猪钮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至眼坏,卻和暖如春拂玻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宰译。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工檐蚜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沿侈。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓闯第,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缀拭。 傳聞我的和親對象是個殘疾皇子咳短,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355