近期,由于工作需要,在原有的Hadoop2.6.0环境上安装了RHadoop,主要借鉴了——RHadoop实践系列文章和RHadoop安装,区别之处在于离线安装较新版本的R-3.2.3、rhdfs_1.0.8和rmr2_3.3.1,并解决参考链接安装过程中的一些疑问。
安装环境:CentOS-7.0-1460-x86_64、Hadoop-2.6.0、Java Version "1.7.0_79"
节点名称:nameNode1、nameNode2、ResourceManager、dataNode1、dataNode2、dataNode2。
其中nameNode1(nameNode2随意)需要安装:R、rhdfs、rmr2。计算节点dataNode1、2、3需要安装:R、rmr2。安装时为了方便,直接将nameNode1上安装好的直接scp到dataNode节点上了,rhbase暂未使用。下图是RHadoop Package安装位置的官方说明,红字是对本文测试的说明。
1.安装包准备:
https://www.r-project.org/ —— R-3.2.3.tar.gz。
https://github.com/RevolutionAnalytics/RHadoop/wiki/Downloads —— rhdfs_1.0.8.tar.gz、rmr2_3.3.1.tar.gz。
如果系统环境不全的话,还需要配置yum本地源,安装gcc以及下面两个R语言编译时需要用到的库(下两行源自开头提到的RHadoop安装)。
#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”错误
2.R语言安装:nameNode1节点,用户hadoop (非root用户)
$ tar -xzvf /home/hadoop/R-3.2.3.tar.gz
$ cd /home/hadoop/R-3.2.3
$ ./configure // 遇到error则根据提示安装依赖库。 若有需要安装RStudio则使用 ./configure --enable-R-shlib
$ make // make安装时没遇到什么问题
$ make install // cannot stat 'NEWS.rds': No such file or directory 遇到此问题忽略即可
3.添加环境变量:(root用户)
# vi /etc/profile
1.是Java环境,2.是Hadoop环境
在文件末尾添加3.的三个环境变量,其中HADOOP_CMD和HADOOP_STREAMING两个是RHadoop环境需要,Path中添加的是R语言环境。
保存退出
# source /etc/profile // 使其生效
$ R // 退回hadoop用户,键入R即可看到
4.RHadoop依赖包以及rhdfs_1.0.8.tar.gz、rmr2_3.3.1.tar.gz安装:
R语言安装R package的2种方法 —— 离线安装各依赖包,依赖包下载:http://mirror.bjtu.edu.cn/cran/ 包很多,Ctrl+F按名称搜索下载即可。
(hadoop用户下) 安装成功均结束于Done,否则会提示缺少依赖包
$ R CMD INSTALL rJava_0.9-8.tar.gz
$ R CMD INSTALL Rcpp_0.12.5.tar.gz
$ R CMD INSTALL magrittr_1.5.tar.gz ——> $ R CMD INSTALL plyr_1.8.3.tar.gz ——> $ R CMD INSTALL stringi_1.1.1.tar.gz
离线安装stringi时,由于死活需要下载一个icudt55l.zip的一个文件,无奈只能手动下载解压得到icudt55l.dat的文件,
经摸索,需要在安装时快速放到/home/hadoop/R-3.2.3/library/stringi/libs目录下,最终安装成功。只有安装完stringi才能安装stringr。
$ R CMD INSTALL stringr_1.0.0.tar.gz
$ R CMD INSTALL reshape2_1.4.1.tar.gz
$ R CMD INSTALL iterators_1.0.8.tar.gz
$ R CMD INSTALL itertools_0.1-3.tar.gz
$ R CMD INSTALL digest_0.6.9.tar.gz
$ R CMD INSTALL RJSONIO_1.3-0.tar.gz
$ R CMD INSTALL functional_0.6.tar.gz
$ R CMD INSTALL bitops_1.0-6.tar.gz
$ R CMD INSTALL caTools_1.17.1.tar.gz // 这个包可能是因为版本更新,也需要依赖上,否则后续加载库的时候会报错
安装完这些依赖就可以安装rhdfs_1.0.8.tar.gz和rmr2_3.3.1.tar.gz
$ R CMD INSTALL rhdfs_1.0.8.tar.gz
$ R CMD INSTALL rmr2_3.3.1.tar.gz
至此,运行R Client的节点安装完成。最后,需要将R-3.2.3文件夹复制到三个dataNode中,/etc/profile文件也需覆盖dataNode中的文件并使其生效。Hadoop集群无需重启
5.RHadoop程序用例测试及错误解决:
$ R // 进入RClient,通过.packages(all.available=T)命令可以查看安装的所有R包
然后依次输入library(fhdfs)、hdfs.init()、library(rmr2)就可以开始使用RHadoop写R语言的mapreduce。
截图中的Warning message忽略即可。
> small.ints = to.dfs(1:20)
> mapreduce(input = small.ints, map = function(k, v) cbind(v, v^2))
上述两行R命令敲完,就会调用MapReduce,可以看到执行进度,并通过from.dfs命令查询到如下结果:
> from.dfs("/tmp/file…………")
本文测试时遇到的问题:
java.io.IOException: Cannot run program "Rscript": java.io.IOException: error=2, No such file or directory
解决方法:从R的安装目录/home/hadoop/R-3.2.3/bin下做R和Rscript的符号链接到/usr/bin下,再次执行即可解决错误。
root用户:
# ln -s /home/hadoop/R-3.2.3/bin/R /usr/bin
# ln -s /home/hadoop/R-3.2.3/bin/Rscript /usr/bin
注意:使用绝对路经建立软连接,否则会出现Too many levels of symbolic links的错误。
初次发文,错误之处敬请指正,谢谢~