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.168,192.168.241.169和192.168.241.170三台主机,组成hadoop集群。其中Hiveserver 2在192.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后,
1 2 3 4 5 | 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_CMD和HADOOP_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的安装还要依赖bitops和caTools库,直接用R的install.packages()都无法获取,先安装这两个库,再安装rhdfs。
> sudo R CMD INSTALL ~/$INS_TMP/rhdfs_1.0.8.tar.gz
测试:进入R,输入以下命令,
1 2 3 4 | library (rhdfs) #加载rhdfs库 hdfs.init () #初始化 hdfs.ls ( "/user/" ) #查看hdfs上/user/目录下的文件 q () #退出R |
rhdfs成功访问hdfs(由于hdfs上含有一些业务数据,这里进行了部分遮挡):
图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测试。
posted on 2015-12-21 23:04 cassie_huang89 阅读(787) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析