RHadoop和CDH整合实例(一)- R及rhdfs

      最近需要在hadoop上集成R语言环境进行统计分析任务,考虑用到RHadoop。但是由于集群上的hadoop并非原生态hadoop,而是cloudera集成的版本,并且由于系统上kerberos和sentry的安全管理机制,给集成RHadoop造成了不小的麻烦。网上搜索的步骤和问题有一些已经过时,有一些对集成了cloudera环境的配置方法所提甚少,甚至遇到一些问题在google上或者github上搜索,查看相关讨论却无果。因此环境整合完毕,觉得有必要进行一下总结。

      RHadoop包含了三个组件,rhdfs, rmr2和rhbase,本文不涉及rhbase,除此之外,由于数据由hive管理,我们还会涉及到rJDBC和RHive的整合。

      

      Roadmap:

  一、环境

  二、R的安装及相关依赖库

  三、rhdfs的安装和测试

  四、 rmr2的安装和测试

  五、 rJDBC的安装和测试

  六、 rHive的安装和测试

 

一、环境

   本次实例中涉及到192.168.241.168192.168.241.169192.168.241.170三台主机,组成hadoop集群。其中Hiveserver 2192.168.241.169上。环境及安装组件的详细版本信息如下表:

 

项目 版本
hadoop 2
CDH 5
Hive 0.12
Java 1.6.0
R 3.2.2
rhdfs 1.0.8
rmr2 3.3.1
RJDBC 0.2-5
RHive 2.0

 

本文涉及到的库及组件下载地址:

      rhadoop(rhdfs + rmr2 + rhbase)的详细信息可在github上查到https://github.com/RevolutionAnalytics/RHadoop/wiki, RevolutionAnalytics项目页上可直接拉取最新版本的源码并自己编译, 需要改造源码的同学请自行下载, 这里的rhds和rmr2包我们直接从以下地址下载。

      rhdfs - https://github.com/RevolutionAnalytics/rhdfs/blob/master/build/rhdfs_1.0.8.tar.gz?raw=true

      rmr2 - https://github.com/RevolutionAnalytics/rmr2/releases/download/3.3.1/rmr2_3.3.1.tar.gz

RHive是nexr的项目, 由于我们需要对RHive源码进行部分调整, github上编译好的安装包不知道为什么我也下不下来, 因此直接拉取源码。

RHive - https://github.com/nexr/RHive

二、R的安装及相关依赖库

      R的安装需要gfortran,因此先确保gfortran存在于环境中,进行配置后安装R

> yum install gcc-gfortran  #R环境安装依赖gfortran
> sudo yum install R   #安装R环境
> sudo R CMD javareconf -y  
> sudo R   #以管理员身份进入R,安装RHadoop所需的依赖包

进入R后,

install.packages(c("Rcpp","RJSONIO","itertools","digest"))
install.packages(c("itertools","iterators"))
install.packages(c("functional", "stringr", "plyr")
install.packages("reshape2")
install.packages("rJava")

  R中通过install.packages()的方式安装,系统中默认安装路径:/usr/local/lib64/R/library。

由于版本原因,有些版本的R对于部分依赖库无法直接用install.packages()安装,此时需要到cran上手动下载,再用R直接安装即可,如:

 

> wget https://cran.r-project.org/src/contrib/Archive/plyr/plyr_1.8.tar.gz 
> sudo R CMD INSTALL plyr_1.8.tar.gz 

二、rhdfs的安装及测试

      首先需要配置环境变量HADOOP_CMDHADOOP_STREAMING, HADOOP_CMD即为系统中用hadoop命令时所处的bin路径,HADOOP_STREAMING这个变量rmr2会用到,本身需要找的是hadoop-streaming-XXX.jar(XXX为版本号),很多文章中提到的设置方法都是基于原生态hadoop的,而本文的系统集成了cloudera,cloudera路径在/opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/,通过ll可以看到/opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/下集成了hadoop, hive, hue等等库,需要注意的是hadoop-streaming-XXX.jar这个包用的不是/opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hadoop/contrib/streaming/hadoop-streaming-XXX.jar, 而是和CDH5集成后的hadoop-streaming-2.3.0-mr1-cdh5.1.3.jar,路径在/opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hadoop-0.20-mapreduce/contrib/streaming/。

     这两个变量在本文提到的环境中分别设置如下: 

> export HADOOP_CMD=/usr/bin/hadoop 
> export HADOOP_STREAMING=/opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.3.0-mr1-cdh5.1.3.jar

      环境变量的设置也可直接更改/etc/profile文件进行设置,记得更改后source /etc/profile一下才能立即生效。

      rhdfs的安装包需要从github上下载(https://github.com/RevolutionAnalytics/rhdfs),新建一个临时目录,假设置于~/$INS_TMP路径下。rhdfs的安装还要依赖bitopscaTools库,直接用Rinstall.packages()都无法获取,先安装这两个库,再安装rhdfs

> sudo R CMD INSTALL ~/$INS_TMP/rhdfs_1.0.8.tar.gz 

 

       测试:进入R,输入以下命令,

library(rhdfs)   #加载rhdfs库
hdfs.init()     #初始化
hdfs.ls("/user/")     #查看hdfs上/user/目录下的文件
q()     #退出R

  

rhdfs成功访问hdfs(由于hdfs上含有一些业务数据,这里进行了部分遮挡):

 RHadoop和CDH整合实例(一)- R及rhdfs_第1张图片

 图1 rhdfs程序测试结果

hdfs.ls("/user/")的输出和直接用hadoop fs -ls /user/输出一致,证明rhdfs成功访问hdfs


可能出现问题:

       (1) 若出现异常security.UserGroupInformation: PriviledgedActionException as:testhadoop (auth:KERBEROS), 原因GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]的问题,需要先用kinit获取kerberos票据,再进入R测试。

 RHadoop和CDH整合实例(一)- R及rhdfs_第2张图片

你可能感兴趣的:(RHadoop和CDH整合实例(一)- R及rhdfs)