R语言读取Hive数据表

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" )

转载于:https://www.cnblogs.com/xinping-study/p/6897897.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值