R通过RJDBC包连接Hive

目前Hive集群是可以通过跳板机来访问 HiveServer, 将Hive 中的批量数据读入R环境,并进行后续的模型和算法运算。

1. 登录跳板机后需要首先在Linux下进行配置

从root权限切换到bzsys用户,才能够通过验证读取Hive。首先需要配置Hadoop的临时环境变量CLASSPATH路径

su bzsys
export CLASSPATH=$CLASSPATH:/etc/hadoop/conf

2. 下载并安装RJDBC包

Linux下直接运行R的install 函数通常不成功,建议下载预编译的包通过命令行安装,如下载文件 RJDBC_0.2-6.tar.gz (http://www.rforge.net/RJDBC/)

切换到下载包所在的文件夹下,如 /etc/usr/R-patched/packages (替换为自己的目录),在终端运行R的命令行,完成安装。

R CMD INSTALL RJDBC_0.2-6.tar.gz

3. 进入R环境

library(RJDBC) # 载入RJDBC包
# 设置R连接时类的路径 CLASSPATH,注意一定要引hive/hadoop这三个路径下的所有包才可以通过认证
cp = c(list.files("/usr/lib/hive/lib", pattern = "[.]jar", full.names=TRUE, recursive=TRUE),
list.files("/usr/lib/hadoop", pattern = "[.]jar", full.names=TRUE, recursive=TRUE),
list.files("/etc/hadoop/conf", full.names=TRUE, recursive=TRUE),
recursive=TRUE
)
# 新建RJDBC的 Driver
drv <- JDBC(driverClass = "org.apache.hive.jdbc.HiveDriver", classPath = cp)
# 建立连接Connection
# 常见错误: 注意路径是jdbc:hive2:而不是jdbc:hive:, 因为新版Hive启用了 HiveServer2,替代了之前的HiveServer变量
# "hadoop-jy-backupserver:10000" 为济阳集群的URL和默认端口PORT 10000, "principal=" 为需要的特殊认证Authentication
hiveconnection <- dbConnect(drv,"jdbc:hive2://hadoop-jy-backupserver:10000/default;principal=hive/hadoop-jy-backupserver@HADOOP.QIYI.COM",user="*******", password="*******")   # *** 替换为相应用户名和密码

4. R操作 Hive数据表范例

library(RJDBC)
cp = c(list.files("/usr/lib/hive/lib", pattern = "[.]jar", full.names=TRUE, recursive=TRUE),
list.files("/usr/lib/hadoop", pattern = "[.]jar", full.names=TRUE, recursive=TRUE),
list.files("/etc/hadoop/conf", full.names=TRUE, recursive=TRUE),
recursive=TRUE
)
drv = JDBC(driverClass = "org.apache.hive.jdbc.HiveDriver", classPath = cp)
hiveconnection = dbConnect(drv,"jdbc:hive2://hadoop-jy-backupserver:10000/default;principal=hive/hadoop-jy-backupserver@HADOOP.QIYI.COM",user="*******", password="*******")   # *** 替换为相应用户名密码
 
# 从BAIDU_INDEX 表中查询记录的个数,存入DataFrame
count = dbGetQuery(hiveconnection,"SELECT count(*) FROM cpr.baidu_index"# 开始执行MapReduce任务
 
# 非查询Query的语句,如创建表CREATE, dbSendUpdate 函数执行所有非查询Query的语句
sqlCreateTbl = "CREATE TABLE IF NOT EXISTS cpr.person_correlation_graph_temp(rownames STRING,ibao_person_id_x STRING, ibao_person_id_y STRING,
    cor_index DOUBLE,start_date STRING,end_date STRING)"
result=dbSendUpdate(hiveconnection,sqlCreateTbl)
 
# 将数据写入Hive数据库
dfToLoad = data.frame(rownames=c('1','2'),ibao_person_id_x=c('盗墓笔记','盗墓笔记'),
ibao_person_id_y=c('李易峰','杨洋'),cor_index=c(0.8900,0.5100))
dbWriteTable(hiveconnection, "cpr.person_correlation_graph", dfToLoad, overwrite=TRUE)
 
# R中执行其他Hive SQL的函数
dbListTables(hiveconnection, "%qiyu%")
df = dbReadTable(hiveConn, "iris")

R语言读取Hive数据表的更多相关文章

  1. R语言读取MySQL数据表

    1.R中安装RODBC包 install.packages("RODBC") 2.在Windows系统下安装MySQL的ODBC驱动 注意区分32位和64位版本: http://d ...

  2. R语言读取JSON数据

  3. R语言读取XML数据

  4. R语言分析朝阳医院数据

    R语言分析朝阳医院数据 本次实践通过分析朝阳医院2016年销售数据,得出“月均消费次数”.“月均消费金额”.“客单价”.“消费趋势”等结果,并据此作出可视化图形. 一.读取数据: library(op ...

  5. [译]用R语言做挖掘数据《二》

    数据探索 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: ...

  6. R语言实现金融数据的时间序列分析及建模

    R语言实现金融数据的时间序列分析及建模 一 移动平均    移动平均能消除数据中的季节变动和不规则变动.若序列中存在周期变动,则通常以周期为移动平均项数.移动平均法可以通过数据显示出数据长期趋势的变动 ...

  7. R语言处理Web数据

    R语言处理Web数据 许多网站提供的数据,以供其用户的消费.例如,世界卫生组织(WHO)提供的CSV,TXT和XML文件的形式的健康和医疗信息报告.基于R程序,我们可以通过编程提取这些网站的具体数据. ...

  8. 读取hive的表结构,生成带comment的视图建表语句

    ### 读取hive的表结构,生成带comment的视图建表语句 # 读取配置文件中的表并进行遍历 grep -v '^#' tablesFile|while read tableName do st ...

  9. R语言读取文件

    1.R语言读取文件,文件类型为.txt 直接使用read.table()即可,若不知道当前的工作目录,可以使用函数getwd()来查看 2.R语言读取文件,文件类型为.xlsx 方法一:可以把excl ...

随机推荐

  1. python基础学习Day9 函数的初识,实参、形参、

    1.函数 def my_len(): l = [,,,,,,] count = for i in l: count += print(count) my_len() 定义的my_len()方法时,其结 ...

  2. redis序列化异常------------org.springframework.data.redis.serializer.SerializationException

    异常信息; org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested e ...

  3. 2018面向对象程序设计(Java)第14周学习指导及要求

    2018面向对象程序设计(Java)第14周学习指导及要求(2018.11.29-2018.12.2)   学习目标 (1) 掌握GUI布局管理器用法: (2) 掌握各类Java Swing组件用途及 ...

  4. java工程师基础笔试题(一)-参考答案

    一.选择和填空  (不定项哦!) 1,如下是一份文件名为Test2.java的源文件,请问,编译该文件之后会生成几份字节码文件 class Test{ class Inner{} static cla ...

  5. Python调用sqlAlchemy

    import logging from sqlalchemy import Column, String, create_engine from sqlalchemy.ext.declarative ...

  6. ezmorph将一种对象转换成另外一种对象

    EZMorph支持原始数据类型(Primitive),对象(Object),多维数组转换与DynaBeans的转换.兼容JDK1.3.1,整个类库大小只有76K左右. 在Java EE开发常用的str ...

  7. spring 中 PO与DTO相互转换的工具类

    public class BeanMapper { /** * 持有Dozer单例, 避免重复创建DozerMapper消耗资源. */ private static DozerBeanMapper ...

  8. java集合: ArrayList源码浅析

    ArrayList 是一个动态数组,线程不安全 ,允许元素为null. ArrayList的数据结构是数组,查询比较方便. ArrayList类的接口 public class ArrayList&l ...

  9. python之列表、元组、字典学习

    list特征列表中的元素可以是数字和字符串,列表,布尔值,列表中也可以嵌套列表 a=[1,2,3,"qqq","无"] b=[1,2,3,[1,2,3,&quo ...

  10. pta l2-7(家庭房产)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题意:给定n个人的信息,包括其编号 ...