zoukankan      html  css  js  c++  java
  • 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")
  • 相关阅读:
    自然语言处理(NLP)入门
    OpenSSL证书认证过程
    IAR EWARM安装时报Fatal Error[Cp001]: Copy protection check, No valid license found for this product [24]
    INTEL FPGA去隔行IP DEMO
    Windows “在此系统上禁止运行脚本”解决办法
    vue中axios请求本地json文件404
    vscode tab 按钮功能变为切换按键,改回缩进功能
    引用elementUi 字体文件丢失导致图标都显示小方块
    ubuntu 添加 ll 命令
    ubuntu sudo source 时 command not found 错误
  • 原文地址:https://www.cnblogs.com/xinping-study/p/6897897.html
Copyright © 2011-2022 走看看