sparkR介紹及安裝


SparkR是AMPLab發布的一個R開發包,為Apache Spark提供了輕量的前端。SparkR提供了Spark中彈性分布式數據集(RDD)的API,用戶可以在集群上通過R shell交互性的運行job。例如,我們可以在HDFS上讀取或寫入文件,也可以使用 lapply 來定義對應每一個RDD元素的運算。

sc <- sparkR.init("local")
lines <- textFile(sc, "hdfs://data.txt")
wordsPerLine <- lapply(lines, function(line) { length(unlist(strsplit(line, " "))) })

除了常見的RDD函數式算子reduce、reduceByKey、groupByKey和collect之外,SparkR也支持利用 lapplyWithPartition 對每個RDD的分區進行操作。 SparkR也支持常見的閉包(closure)功能:用戶定義的函數中所引用到的變量會自動被發送到集群中其他的機器上。參見一下例子中用戶閉包中引用的 initialWeights 會被自動發送到集群其他機器上。 

lines <- textFile(sc, "hdfs://data.txt")
initialWeights <- runif(n=D, min = -1, max = 1)
createMatrix <- function(line) {
	as.numeric(unlist(strsplit(line, " "))) %*% t(initialWeights)
}
# initialWeights is automatically serialized
matrixRDD <- lapply(lines, createMatrix)

用戶還可以很容易的在已經安裝了R開發包的集群上使用SparkR。includePackage 命令用於指示在每個集群上執行操作前讀取開發包。以下是個例子:

generateSparse <- function(x) {
	# Use sparseMatrix function from the Matrix package
	sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3))
}
includePackage(sc, Matrix)
sparseMat <- lapplyPartition(rdd, generateSparse)

下面介紹如何安裝SparkR 

第一步,安裝R

參考http://www.myexception.cn/linux-unix/680876.html

由於安裝R依賴比較多,故利用iso文件創建本地yum源,見后【一】利用iso鏡像文件創建本地yum源

1.1 安裝依賴

yum install gcc
yum install gcc-c++
yum install gcc-gfortran
yum install pcre-devel
yum install tcl-devel
yum install zlib-devel
yum install bzip2-devel
yum install libX11-devel
yum install readline-devel    #否則報”–with-readline=yes (default) and headers/libs are not available”錯誤
yum install libXt-devel          #否則報”configure: error: –with-x=yes (default) and X11 headers/libs are not available”錯誤
yum install tk-devel
yum install tetex-latex

1.2 下載源碼,編譯安裝R

下載http://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.1.1.tar.gz

cd /softwares/R
tar -zxvf R-3.1.1.tar.gz
./configure  --enable-R-shlib (如果使用rJava需要加上 --enable-R-shlib)
make && make install

第二步,安裝rjava

參考 http://www.geedoo.info/page/3

在聯網的情況下,可以進入R命令,安裝rJava包:

install.packages(“rJava”)

如果待安裝機器不能上網,可以將源文件下載到本地,然后通過shell命令R CMD INSTALL ‘package_name’來安裝:

R CMD INSTALL “rJava_0.9-5.tar.gz”

下載 rJava_0.9-6.tar.gz http://cran.r-project.org/web/packages/rJava/

cd /app/softwares/R
R CMD INSTALL "rJava_0.9-6.tar.gz"

第三步,安裝sbt

下載 http://www.scala-sbt.org/download.html

參考http://www.scala-sbt.org/0.13/tutorial/Manual-Installation.html 進行安裝

cd /softwares/sbt
unzip sbt-0.13.5.zip
cp sbt/sbt/bin/sbt-launch.jar ~/bin
vi2 ~/bin/sbt
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
chmod u+x ~/bin/sbt
[root@cnsz131016 ~]# mkdir -p /root/.ivy2/local/org.scala-sbt/sbt/0.13.5/jars/
[root@cnsz131016 ~]# cp /tmp/sbt.jar /root/.ivy2/local/org.scala-sbt/sbt/0.13.5/jars/
[root@cnsz131016 ~]# sbt
Getting org.scala-sbt sbt 0.13.5 ...
:: retrieving :: org.scala-sbt#boot-app
        confs: [default]
        1 artifacts copied, 0 already retrieved (20kB/69ms)
Error during sbt execution: No Scala version specified or detected

由於無法連接外網,所以沒有安裝成功。

第四步,安裝 SparkR

下載 SparkR (http://amplab-extras.github.io/SparkR-pkg/)

mkdir SparkRInstall
cp amplab-extras-SparkR-pkg-e1f95b6.tar.gz SparkRInstall
cd SparkRInstall
tar -zxvf amplab-extras-SparkR-pkg-e1f95b6.tar.gz
cd amplab-extras-SparkR-pkg-e1f95b6
sh install-dev.sh

[root@cnsz031907 amplab-extras-SparkR-pkg-e1f95b6]# ./install-dev.sh
* installing *source* package ‘SparkR’ ...
** libs
** arch -
./sbt/sbt assembly
Attempting to fetch sbt
curl: (6) Couldn't resolve host 'typesafe.artifactoryonline.com'
curl: (6) Couldn't resolve host 'repo.typesafe.com'
Launching sbt from sbt/sbt-launch-0.12.4.jar
Error: Invalid or corrupt jarfile sbt/sbt-launch-0.12.4.jar
make: *** [target/scala-2.10/sparkr-assembly-0.1.jar] Error 1
ERROR: compilation failed for package ‘SparkR’
* removing ‘/app/SparkRInstall/amplab-extras-SparkR-pkg-e1f95b6/lib/SparkR’

由於連不上網,不能直接編譯sparkR,故在能聯網的機器上對SparkR進行編譯,之后再上傳使用sbt編譯后的包。上傳編譯后的包之后,使用以下命令進行安裝:

sh install-dev.sh

修改R權限,使所有人都可讀

chmod 755 -R /usr/local/lib64/R /usr/lib64/R /usr/local/bin/R

 執行示例:

[hadoop@cnsz031907 SparkR-pkg]$ ./sparkR examples/pi.R local
WARNING: ignoring environment value of R_HOME
Loading required package: methods
Loading required package: rJava
[SparkR] Initializing with classpath /app/SparkRInstall/SparkR-pkg/lib/SparkR/sparkr-assembly-0.1.jar

14/09/10 17:08:44 INFO Slf4jLogger: Slf4jLogger started
100000
100000
Pi is roughly 3.13832
Num elements in RDD  200000

修改PATH和CLASSPATH,方便之后使用:

chmod 755 -R /app/SparkRInstall/
chown -R hadoop:hadoop /app/SparkRInstall/
ln -s /app/SparkRInstall/SparkR-pkg /app/sparkR

vi2 /etc/profile
export SPARKR_HOME=/app/sparkR
export PATH=$PATH:$SPARKR_HOME/
source /etc/profile

 修改sparkR.profile的權限,因為該文件需要所有用戶都可讀寫。

chmod 777 /tmp/sparkR.profile

【一】利用iso鏡像文件創建本地yum源

1. 創建iso存放目錄和掛載目錄

mkdir /app/iso 
mkdir /app/cdrom

2. 將iso鏡像文件上傳到/app/iso文件夾下

3. 將/app/iso/下的iso文件掛載到/mnt/cdrom目錄

mount -o loop /app/iso/rhel-server-6.5-x86_64-dvd.iso /app/cdrom

注:掛載完之后對其操作會提示設備繁忙,此時需要umount解開掛載才行

查看是否掛載成功: df -h <用來查看系統中所有掛載的,mount也可以

4.<最關鍵的一步>如果/etc/yum.repos/下面有其它的*.repo文件,先創建個文件夾,將這些*.repo先轉移到文件夾中,自己寫一個.repo的文件

mkdir /etc/yum.repos.d/bak
mv *.repo /etc/yum.repos.d/bak

然后創建自己的.repo文件 vi myself.repo 內容如下:

[base]
name=RedHat
#注:這里的baseurl就是你掛載的目錄,在這里是/mnt/cdrom
baseurl=file:///app/cdrom    
#注:這里的值enabled一定要為1  
enabled=1                    
gpgckeck的值無所謂
gpgckeck=0
#注:這個你cd /mnt/cdrom/可以看到這個key,這里僅僅是個例子
gpgkey=file:///app/cdrom/RPM-GPG-KEY-redhat-release

5. 測試:

yum clean all
yum install gcc-gfortran

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM