RHadoop(rhdfs、rmr2、RHive)安装、配置
1.系统及所需软件版本
服务器操作系统:CentOS 6.4
R语言版本:R-2.15.3.tar.gz
JDK版本:jdk-6u45-linux-i586.bin
Hadoop版本:hadoop-1.0.3.tar.gz
Hive版本:hive-0.9.0.tar.gz
MySQL版本:MySQL-client-5.5.21-1.linux2.6.i386.rpm
MySQL-server-5.5.21-1.linux2.6.i386.rpm
rJava版本:rJava_0.9-5.tar.gz
RHadoop版本:rhdfs_1.0.5.tar.gz rmr2_2.2.0.tar.gz rhbase_1.1.1.tar.gz
下载地址:
https://github.com/RevolutionAnalytics/RHadoop/wiki/Downloads
2.依赖安装(R语言包、rJava包)
在安装之前需要在集群各个主机上逐个安装R语言包、rJava包,然后再进行Rhadoop的安装。具体安装步骤如下:
2.1安装R语言包
在编译R之前,需要通过yum安装以下几个程序:
1 | > # 检查R是否支持PNG等图形显示: |
2.2安装rJava包:
版本:rJava_0.9-5.tar.gz
在联网的情况下,可以进入R命令,安装rJava包:
1 | > install.packages("rJava") |
然后设置Java、Hadoop、R、Hive等相关环境变量(如果在搭建Cloudera Hadoop集群时已经设置好,做一下检查就OK)
下面是RHadoop及RHive安装成功时/etc/profile中的环境变量配置情况
1 | #Java environment |
3.安装RHadoop环境
(rhdfs、rmr2、rhbase、RHive)
3.1安装rhdfs包(仅安装在namenode上):
1 | R CMD INSTALL "rhdfs_1.0.5.tar.gz" |
3.2安装rmr2包(各个主机上都要安装):
3.2.1安装其依赖的7个包
1 | [root@master RHadoop-deps]# ls |
如果未安装,或者7个包安装不全,安装程序会提示其所依赖的的包要安装。
3.2.2R CMD INSTALL “rmr2_2.2.0.tar.gz”
需要在/etc/profile中设置环境变量HADOOP_STREAMING
1
export HADOOP_STREAMING=/usr/hadoop/contrib/streaming/hadoop-streaming-1.0.3.jar
安装测试:
安装好rhdfs和rmr2两个包后,我们就可以使用R尝试一些Hadoop的操作了。
3.3测试RHadoop
3.3.1基本的hdfs的文件操作。
查看hdfs文件目录
hadoop的命令:hadoop fs -ls /user
R语言函数:hdfs.ls("/user/")
查看hadoop数据文件
hadoop的命令:hadoop fs -cat /user/hadoop/input/RHadoop.txt
R语言函数:hdfs.cat("/user/hadoop/input/RHadoop.txt")
3.3.2执行一个rmr2算法的任务
普通的R语言程序:1
2 > small.ints = 1:10
> sapply(small.ints, function(x) x^2)
MapReduce的R语言程序:
1 | > library("rhdfs") |
3.2.3rmr2 WordCount实例:
1 | #wordcunt示例 |
#4安装RHive(各个主机上都要安装):
RHive是一种通过Hive高性能查询来扩展R计算能力的包。它可以在R环境中非常容易的调用HQL, 也允许在Hive中使用R的对象和函数。理论上数据处理量可以无限扩展的Hive平台,搭配上数据挖掘的利器R环境, 堪称是一个完美的大数据分析挖掘的工作环境。
4.1Rserve包的安装:
RHive依赖于Rserve,因此在安装R的要按照本文R的安装方式,即附带后面两个选项(–disable-nls –enable-R-shlib)
enable-R-shlib是将R作为动态链接库进行安装,这样像Rserve依赖于R动态库的包就可以安装了,但缺点会有20%左右的性能下降。1
2install.packages("Rserve") (在线安装)
R CMD INSTALL /home/hadoop/Rserve_1.7-3.tar.gz (本地方式安装)
$R_HOME的目录下创建Rserv.conf文件,写入“remote enable’’保存并退出。通过scp -r 命令将Master节点上安装好的Rserve包,以及Rserv.conf文件拷贝到所有slave节点下。当然在节点不多的情况下也可以分别安装Rserve包、创建Rserv.conf。
4.1.1查看进程
1 | ~ ps -aux|grep Rserve |
4.1.2杀掉刚才的Rserve守护进程
1 | ~ kill -9 7142 |
4.2RHive包的安装:
安装RHive_0.0-7.tar.gz,并在master和所有slave节点上创建rhive的data目录,并赋予读写权限(最好将$R_HOME赋予777权限)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[root@master admin]# R CMD INSTALL RHive_0.0-7.tar.gz
[root@master admin]# cd $R_HOME
[root@master R]# mkdir -p rhive/data
[root@master R]# chmod 777 -R rhive/data
master和slave中的/etc/profile中配置环境变量RHIVE_DATA=/usr/lib/R/rhive/data
export RHIVE_DATA=/usr/lib/R/rhive/data
通过scp命令将master节点上安装的RHive包拷贝到所有的slave节点下:
scp -r /usr/lib/R/library/RHive Slave1.Hadoop:/usr/lib/R/library/
查看hdfs文件下的jar是否有读写权限
hadoop fs -ls /rhive/lib
安装rhive后,hdfs的根目录并没有rhive及其子目录lib,这就需要自己建立,并将/usr/lib/R/library/RHive/java下的rhive_udf.jar复制到该目录
hadoop fs -put /usr/lib/R/library/RHive/java/rhive_udf.jar /rhive/lib
否则在测试rhive.connect()的时候会报没有/rhive/lib/rhive_udf.jar目录或文件的错误。
最后,在hive客户端(master、各slave均可)启动hive远程服务(rhive是通过thrift连接hiveserver的,需要要启动后台thrift服务):
hive --service hiveserver &
4.3RHive的使用及测试:
4.3.1启动RHive
1 | 在所有节点启动Rserve(远程模式启动) |
4.3.2RHive API
从HIVE中获得表信息的函数,比如1
2
3rhive.list.tables:获得表名列表,支持pattern参数(正则表达式),类似于HIVE的show tables
rhive.desc.table:表的描述,HIVE中的desc table
rhive.exist.table:
4.3.3测试
1 | library("RHive") |
表明安装成功,只是conf下面的slaves没有配置,在/etc/hadoop/conf中新建slaves文件,并写入各个slave的名称即可解决该警告。
4.4.4RHive的运行环境如下:
1 | rhive.env() |
4.4.5RHive简单应用
载入RHive包,令连接Hive,获取数据:1
2
3
4
5
6library(RHive)
rhive.connect(host = 'host_ip')
d <- rhive.query('select * from emp limit 1000')
class(d)
m <- rhive.block.sample(data_sku, percent = 0.0001, seed = 0)
rhive.close()
一般在系统中已经配置了host,因此可以直接rhive.connect()进行连接,记得最后要有rhive.close()操作。 通过HIVE查询语句,将HIVE中的目标数据加载至R环境下,返回的 d 是一个dataframe。
实际上,rhive.query的实际用途有很多,一般HIVE操作都可以使用,比如变更scheme等操作:
1 | rhive.query('use scheme1') |
但需要注意的是,数据量较大的情况需要使用rhive.big.query,并设置memlimit参数。
将R中的对象通过构建表的方式存储到HIVE中需要使用
1 | rhive.write.table(dat, tablename = 'usertable', sep = ',') |
而后使用join等HIVE语句获得相关建模数据。其实写到这儿,有需求的看官就应该明白了,这几项 RHive 的功能就足够 折腾些有趣的事情了。
注1:其他关于在HIVE中调用R函数,暂时还没有应用,未来更新。
注2:rhive.block.sample这个函数需要在HIVE 0.8版本以上才能执行。
5.Rstudio Server 安装记录
5.1配置动态链接库和环境变量
1 | vi /etc/profile |
5.2安装相关库
确认以下动态链接库文件已安装 libcairo.so.2 libcrypto.so.6 libgfortran.so.1 libpango-1.0.so.0
libpangocairo-1.0.so.0 libssl.so.6 否则可以1
yum install libcrypto.so.6 libgfortran.so.1 openssl098e-0.9.8e
5.3下载安装rstudio-server
http://download2.rstudio.org/rstudio-server-0.97.551-i686.rpm1
rpm -Uvh --nodeps rstudio-server-0.97.551-i686.rpm
5.4使用rstudio-server
关于作者
- crazylook: pyhton,spark,ml,dl,recsys
- blog: https://crazylook.github.io/
- email: liuhongbin1990@foxmail.com
转载请注明出处:
https://crazylook.github.io/2014/05/15/demo/rhadoop-rhive-install/