1.安装环境
操作系统:CentOS release 6.4 linux集群环境:cdh5.5 hadoop2.6java版本:jdk1.7 R版本:3.3
2.环境安装
2.1 R 环境安装
apt-get update
apt-get install r-base
这种方法是自动安装R语言,也可以去R语言官网下载自行编译安装
安装完后命令行输入R,检验R语言是否安装成功
2.2 Rstudio server 安装
Rstudio server 是R 语言建模一个强大的ide,如果不需要在Rstudio进行代码编写,可以跳过此步。
下载Rstudio server 包并且安装。 详细见官网:https://www.rstudio.com/products/rstudio/download-server/
$ wget https://s3.amazonaws.com/rstudio-server/rstudio-server-rhel5-0.99.892-x86_64.rpm
$ sudo yum install --nogpgcheck rstudio-server-rhel5-0.99.892-x86_64.rpm
启动Rstudio server 服务
$ rstudio-server start
停止RStudio-server服务
rstudio-server stop
重启RStudio-server服务
rstudio-server restart
其他配置项参考:http://blog.sina.com.cn/s/blog_403aa80a01019uwt.html
服务启动后访问地址为http://[ip地址]:8787/
3 Rhadoop相关R包安装
3.1 R包Linux依赖安装
在安装R library包前需要安装以下相关依赖编译器等。
yum -y install gcc-gfortran
yum -y install gcc gcc-c++
yum -y install readline-devel
yum -y install libXt-devel
3.2 R包安装
R 中Rhadoop 依赖library安装,进入R 执行一下命令进行安装
install.packages("rJava")
install.packages("reshape2")
install.packages("Rcpp")
install.packages("iterators")
install.packages("itertools")
install.packages("digest")
install.packages("RJSONIO")
install.packages("functional")
install.packages("catool")
rhdfs,rmr2 包安装 ,这两个包不能通过install.packages 安装需要下载gz文件进行安装,安装包地址:https://github.com/RevolutionAnalytics/RHadoop
下载完后,执行以下命令进行安装
R CMD INSTALL "rhdfs_1.0.8.tar.gz"
R CMD INSTALL "rmr2_3.3.1.tar.gz"
R library安装需要切换到root用户下安装,不然出现4.2的问题
3.3 环境变量配置
rhdfs和rmr2需要加载hadoop环境配置,所以这里要配置hadoop环境变量
vi /etc/profile
#java
export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera
export PATH=$JAVA_HOME/bin:$PATH
#rhadoop
export HADOOP_HOME=/usr/lib/hadoop
export HADOOP_CONF_DIR=/usr/lib/hadoop/etc/hadoop
export HADOOP_CMD=/usr/lib/hadoop/bin/hadoop
export HADOOP_STREAMING=/usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.6.0-mr1-cdh5.5.0.jar
R 代码加载环境变量
Sys.setenv(HADOOP_CMD="/usr/lib/hadoop/bin/hadoop")
Sys.setenv(HADOOP_HOME="/usr/lib/hadoop/lib")
Sys.setenv(HADOOP_CONF_DIR="/usr/lib/hadoop/etc/hadoop")
Sys.setenv(JAVA_HOME="/usr/java/jdk1.7.0_67-cloudera")
Sys.setenv(HADOOP_STREAMING="/usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.6.0-mr1-cdh5.5.0.jar")
重启Rstudio server,Linux配置的环境变量貌似没有加载成功,可能需要重启计算机。当然我不想这么做,可以通过上述R 语言进行加载hadoop环境变量。
3.4Rhadoop 运行测试
hdfs运行测试
Sys.setenv(HADOOP_CMD="/usr/lib/hadoop/bin/hadoop")
Sys.setenv(HADOOP_HOME="/usr/lib/hadoop/lib")
Sys.setenv(HADOOP_CONF_DIR="/usr/lib/hadoop/etc/hadoop")
Sys.setenv(JAVA_HOME="/usr/java/jdk1.7.0_67-cloudera")
Sys.setenv(HADOOP_STREAMING="/usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.6.0-mr1-cdh5.5.0.jar")
library("rJava")
library("rhdfs")
#初始化hdfs
hdfs.init()
hdfs.ls("/user/")
mapreduce 测试,下面是自己编写的一个简单的wordcount代码
test<-"/user/data.txt"
mapreduce(
input=test,output ="/user/output",
map = function(.,v){
keyval(unlist( strsplit( x = v,split =" ")),1)
},
reduce = function(k,vs){
keyval(k,sum(vs))
},
input.format = "text",
output.format = "text"
)
运行结果:
4 安装出现的问题
4.1 hdfs.init()无法初始化
异常问题:
> hdfs.init()
Error in .jnew("org/apache/hadoop/conf/Configuration") :
java.lang.UnsupportedClassVersionError: org/apache/hadoop/conf/Configuration : Unsupported major.minor version 51.0
问题原因:当前的jdk 版本与hadoop运行的jdk版本不同导致。hadoop jdk 版本是1.7 ,而当前本地jdk版本是1.6。但是我此时的环境变量配置的是1.7,为什么会出现这个问题呢?是因为cm5.5在安装的时候,会安装多个jdk的版本。一种是外部环境的jdk(cm和cdh运行的Java环境是1.6),一种是内部环境的jdk(hadoop 集群运行环境是1.7)。而他默认使用的是外部环境1.6的jdk。而R 在启动的时候默认加载的是1.6的jdk。所以在hdfs初始化的时候报错。
解决方案:
分析上述原因可以发现只要我们把jdk默认运行的环境修改为1.7。我们就可以解决上述问题。
修改方法如下:
#查看当前默认运行jdk
alternatives --config java
#发现只有jdk1.6,添加jdk1.7版本
sudo update-alternatives –install /usr/bin/java java /usr/java/jdk1.7.0_67-cloudera/bin/java 200
#选择当前默认运行jdk版本
$ alternatives --config java
共有 2 个程序提供“java”。
选择 命令
-----------------------------------------------
* 1 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
+ 2 /usr/java/jdk1.7.0_67-cloudera/bin/java
按 Enter 来保存当前选择[+],或键入选择号码:
4.2 mapreduce 运行出现异常
异常问题:PipeMapRed.waitOutputThreads(): subprocess failed with code 1
问题原因:参考地址http://blog.fens.me/rhadoop-rmr2-pipemapred/
解决方案:在root用户下安装rhadoop,解决上述问题