RHadoop和CDH整合实例(三)- RHive

五、 RHive的安装及测试

RHive依赖于Rserve,所有首先需要安装Rserve(在各个namenode),接下来在所有节点上启动Rserve

> sudo R   
> install.packages("Rserve")    
> q() 
>
Rserve --RS-conf /usr/lib64/R/Rserv.conf #启动Rserve
>
sudo netstat -nltp | grep Rserve #查看Rserve服务端口号

     通过netstate会发现Rserve启动后默认端口为6311

     master节点上telnet(如果未安装,通过shell命令yum install telnet安装)所有slave节点。

> telnet bj1-241-centos169 6311   

       RHive的安装无法直接通过Rinstall.packages("RHive")进行,在github上也无法直接从https://github.com/nexr/RHive/downloads下载编译好的tar.gz包,只能从github下载源码后自己编译。编译java源文件的过程需要用到ant,若机器上没有,首先安装ant

> sudo yum install ant 

       更改/etc/profile,设置环境变量HIVE_HOMEANT_HOME,在测试机上,对应为:

       HIVE_HOME=/opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hive/

       ANT_HOME=/usr/share/ant

       以下步骤需要对RHive源代码进行一些更改,编译并打包成tar.gz文件后再安装RHive,若不关心修改源码的部分,本文最后会给出已编译好的文件以供下载。

       进入$INS_TMP目录后,下载githubRHive项目源码,路径为~/$INS_TMP/RHive。由于测试机群上配置了Kerberos,而R语言通过RHive访问Hive的过程并不是直接通过JDBC接口访问,而是将在R语言中通过.j2r文件下的函数调用java程序,在java程序中加载JDBC驱动而访问hive。尽管当前用户拥有有效的Kerberos票据,在这样的机制下java程序却不能直接拥有Kerberos票据对应的权限。解决方案是在类com.nexr.rhive.hive.DatabaseConnection的代码 (java代码位于/RHive/RHive/inst/javasrc/src/目录下),在connect()方法里加上以下语句。

package com.nexr.rhive.hive;
class DatabaseConnection { @SuppressWarnings("deprecation")boolean connect() throws SQLException {//加上的语句,使 RHive调用的java程序能够拥有kerberos权限System.setProperty("javax.security.auth.useSubjectCredsOnly","false"); ...     //函数体其余语句return true;
}                 

      Hive可访问jar包的路径下,因为测试集群上的 sentry限制了程序对Hiveadd jar操作,所以这条语句在RHive执行不通过,我们需要将其注释后,手动将rhive_udf.jar添加到Hive可以搜索的目录下。然后修改/etc/profile文件文件,增加HADOOP_HOME环境变量:

     HADOOP_HOME=/opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hadoop/

     回到~/$INS_TMP/RHive目录, 重新对RHive代码进行编译:

> sudo ant build
> sudo R CMD build RHive
> sudo R CMD INSTALL RHive_2.0-0.10.tar.gz

    ~/$INS_TMP/RHive目录下生成的RHive_2.0-0.10.tar.gz即为RHive安装包。

    在正式使用RHive之前,还需要进行一些配置。RHive会将rhive_udf.jar复制到每台机器上对应的目录下,默认目录为/hive,可以通过/RHive/RHive/R/macro.R里的.DEFAULT_FS_HOME进行修改,这里我们修改为/user/rhive,注意修改后要进行重新编译。

    在所有机器上都创建/user/rhive目录,并修改其属性,使所有用户对其都有读写权限。

> sudo mkdir -p /rhive/data
> sudo chmod 777 -R /rhive/data

      由于刚才我们在RHiveR代码中注释了hiveClient$addJar(.FS_JAR_PATH())一行,现在每台机器上都存在/rhive/data目录,并且RHive在执行过程中会自动将rhive_udf.jar添加到该路径下,此时可更改hive_site.xml的配置,在hive.aux.jars.path加上路径/rhive/data/rhive_udf.jar以使hive能够找到rhive_udf.jar。在cloudera manager下,这步操作可以在hive对应的配置页更改, 地址是http://host:port/cmf/services/38/config的格式

     设置完毕后重启hive。以下用的是169机器上的hiveserver2

     测试代码见test_rHive.r,调用RHive的核心部分如下,

#请确保以下路径配置正确
Sys.setenv(JAVA_LIBRARY_PATH="/opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hadoop/lib/native");
Sys.setenv(HADOOP_HOME="/opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hadoop");
Sys.setenv(HIVE_HOME="/opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hive/");
Sys.setenv(HADOOP_CONF="/etc/hadoop/conf");
Sys.setenv(DEFAULT_FS="/user/rhive");library(RHive)
rhive.init() #rhive.init(verbose = TRUE)
rhive.env()rhive.connect(host = "bj1-241-centos169", port = "10000",hiveServer2=TRUE, properties="hive.principal=hive/bj1-241-centos169@XXX.COM")
rhive.query('select count(*) from test')
rhive.close()
q()

  

  

可能出现的问题:

      (1)执行rhive.connect()函数后抛出异常javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]而用beeline进行连接,输入

!connect jdbc:hive2://192.168.241.169:10000/default;principal=hive/bj1-241-centos169@XXX.COM

连接正常,可能原因是kerberosRHive调用的java程序没有授权,详细的 异常信息打印如下:

更改DatabaseConnection类下的connecr()函数即可, 即加上语句

System.setProperty("javax.security.auth.useSubjectCredsOnly","false"); 

      (2)RHive执行connect()成功,但出现异java.sql.SQLException: Insufficient privileges to execute ADD, 图例如下(原始的RHive代码在出现这个问题时没有打印栈信息, 为了演示方便我手动加上了栈信息的打印):

           出现这个问题的可能原因是sentry限制了对hiveadd jar操作,将 rhive.R中的connect()函数进行修改,注释hiveClient$addJar后手动添加rhive_udf.jar路径,即可解决。

转载于:https://www.cnblogs.com/cassie-huang/p/5065288.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2144. 打折购买糖果的最小开销(贪心)

文章目录1. 题目2. 解题1. 题目 一家商店正在打折销售糖果。每购买 两个 糖果,商店会 免费 送一个糖果。 免费送的糖果唯一的限制是:它的价格需要小于等于购买的两个糖果价格的 较小值 。 比方说,总共有 4 个糖果,价格分别为 1…

在微型计算机中8m,第一部分 计算机基础知识部分习题(答案)

A)bit B)Byte C)bout D)baud95. 目前用于计算机的光盘有三大类&#xff1a;只读光盘、一次性写入光盘和_____C_____A)CD-ROM B)多媒体光盘C)可擦写光盘D)随机光盘96. 要将整屏幕打印出来应按___C_______.A)B)< Printscreen >C)< Printscreen > D)97. 与二进制数010…

淘宝弹性布局方案lib-flexible实践

2个月前&#xff0c;写过一篇文章《从网易与淘宝的font-size思考前端设计稿与工作流》总结过一些移动web中有关手机适配的一些思路&#xff0c;当时也是因为工作的关系分析了下网易跟淘宝的移动页面&#xff0c;最后才有那篇文章的总结&#xff0c;可惜的是因为项目的关系&…

jQuery学习笔记系列(二)

day02 - jQuery 学习目标&#xff1a; 能够操作 jQuery 属性 能够操作 jQuery 元素 能够操作 jQuery 元素尺寸、位置 1.1. jQuery 属性操作 ​ jQuery 常用属性操作有三种&#xff1a;prop() / attr() / data() ; 1.1.1 元素固有属性值 prop() ​ 所谓元素固有属性就是元素本…

LeetCode 2145. 统计隐藏数组数目(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始且长度为 n 的整数数组 differences &#xff0c;它表示一个长度为 n 1 的 隐藏 数组 相邻 元素之间的 差值 。 更正式的表述为&#xff1a;我们将隐藏数组记作 hidden &#xff0c;那么 differences[i] hidden[i 1] -…

飞思卡尔imx7 html5,i.MX6UL 飞思卡尔即将发布基于ARM Cortex-A7核心的低功耗处理器 i.MX 6UltraLite Processor...

i.MX6UL 飞思卡尔即将发布基于ARM Cortex-A7核心的低功耗处理器 i.MX 6UltraLite ProcessorFreescale飞思卡尔即将于7月份发布全新的基于ARM Cortex-A7核心的低功耗处理器i.MX6UL&#xff0c;主要面向车载信息处理、家庭能源管理系统、工控领域、物联网网关等应用。i.MX6UL是一…

简单table分页

html <table id"pagingTable"><thead><tr><td>第一列</td><td>第二列</td><td>第三列</td><td>第四列</td><td>第五列</td></tr></thead><tbody><tr><td…

logisim实验——通过2个半加器实现1-bit全加器,通过4个一位全加器构成4-bit加法器(详解)

一、由异或门和与门所构成的半加器&#xff1a; 二、由两个半加器构成的1-bit全加器&#xff1a; 注意&#xff1a;下图中所使用的四个1-bit全加器&#xff08;也就是正方形区域&#xff09;都是经过了封装的&#xff0c;所以外观与上图中的1-bit全加器有所区别&#…

LeetCode 2146. 价格范围内最高排名的 K 样物品(BFS)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的二维整数数组 grid &#xff0c;它的大小为 m x n &#xff0c;表示一个商店中物品的分布图。数组中的整数含义为&#xff1a; 0 表示无法穿越的一堵墙。1 表示可以自由通过的一个空格子。所有其他正整数表示该格子内的…

下列哪项属于正确的锁定计算机桌面,【2018年职称计算机考试WindowsXp练习题及答案1】- 环球网校...

【摘要】环球网校分享的“2018年职称计算机考试WindowsXp练习题及答案1”相关资料&#xff0c;供大家备考职称计算机考试有帮助&#xff0c;更多资料敬请关注环球职称计算机考试频道&#xff0c;网校会及时更新考试资讯……1.关闭窗口时有哪几种方式A 双击窗口标题栏最左侧的控…

CSS导入使用及引用的两种方法

方法一<link rel"stylesheet" type"text/css" href"test.css"> 方法二<style type"text/css">import url("http://localhost/demo.css");</style> 转载于:https://www.cnblogs.com/wuheng1991/p/5069880.…

一、操作系统——处理机(作业)调度算法:先来先服务算法FCFS、最短作业优先算法SJF(非抢占式)、 最短剩余时间优先算法SRTN(抢占式)、最高响应比优先算法HRRN

各种调度算法的学习思路&#xff1a; 调度算法的评价指标&#xff1a; 一、先来先服务算法&#xff08;FCFS&#xff09;&#xff1a;First Come First Serve 二、最短作业优先算法&#xff08;SJF非抢占式&#xff09;&#xff1a;Shortest Job First 三、最短剩余时间优先算法…

美国在理论计算机科学的研究重视,清华麻省理工香港中文联建理论计算机科学研究中心...

清华麻省理工香港中文联建理论计算机科学研究中心2010年06月25日 来源: 科学时报 浏览次数: 0本报讯 6月21日&#xff0c;清华大学—麻省理工学院—香港中文大学“理论计算机科学研究中心”在清华大学挂牌。该中心是MIT在中国成立的第一个联合中心&#xff0c;同时还是清华大学…

LeetCode 2147. 分隔长廊的方案数

文章目录1. 题目2. 解题1. 题目 在一个图书馆的长廊里&#xff0c;有一些座位和装饰植物排成一列。 给你一个下标从 0 开始&#xff0c;长度为 n 的字符串 corridor &#xff0c;它包含字母 ‘S’ 和 ‘P’ &#xff0c;其中每个 ‘S’ 表示一个座位&#xff0c;每个 ‘P’ 表…

二、操作系统——用信号量机制实现进程互斥、同步、前驱关系(详解)

一、什么是进程同步&#xff1f; 二、什么是进程互斥&#xff1f; 临界资源&#xff1a;一个时间段内只允许一个进程使用的资源 为了实现对临界资源的互斥访问&#xff0c;同时保证系统整体性能&#xff0c;需要遵循以下原则&#xff1a; 空闲让进。临界区空闲时&#xff…

firefox 插件 取消认证签名

Firebug Tab Mix plus :系统退出自动保存tab List。 tab mix options>Session>start/exit>when browse start>select "restore" option. zoom page 100%-downloadDownThemAll&#xff08;2016.5.26 record&#xff09; 未签名插件不能用了&#xff0c;比…

三、操作系统——生产者-消费者问题(两个同步一个互斥)

一、问题描述 信号量机制实现进程互斥的步骤&#xff1a; 设置初值为1的互斥信号量在访问临界区之间进行P操作在访问完临界区之后进行V操作 信号量机制实现进程同步的步骤&#xff1a; 设置初值为0的同步信号量在前操作之后对同步信号量执行V操作在后操作之前对同步信号量执…

计算机网络管理员中级第一套理论,计算机网络管理员第一套(中级)理论.doc

1、下列关于在知识产权制度中规定的“允许专利人对专利技术具有一定的垄断性并能够获得垄断”的理解&#xff0c;正确的是(D)A、违反了激励技术创新和保护技术创新的原则B、阻碍技术创新的不恰当做法C、不符合客观实际的做法D、激励技术创新和保护技术创新符合实际的正确做法--…

LeetCode 2148. 元素计数

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;统计并返回在 nums 中同时具有一个严格较小元素和一个严格较大元素的元素数目。 示例 1&#xff1a; 输入&#xff1a;nums [11,7,2,15] 输出&#xff1a;2 解释&#xff1a;元素 7 &#xff1a;严格较小元…

CSS浏览器兼容性----Hack

CSS Hack大致有3种表现形式&#xff0c;CSS类内部Hack、选择器Hack以及HTML头部引用(if IE)Hack&#xff0c;CSS Hack主要针对IE浏览器。类内部Hack&#xff1a;比如 IE6能识别下划线"_"和星号" * "&#xff0c;IE7能识别星号" * "&#xff0c;但…