【问题标题】:Connectivity between R and HiveR 和 Hive 之间的连接
【发布时间】:2014-12-04 06:28:12
【问题描述】:

我正在尝试在 RStudio(在我的机器上)和 Hive(在不同的服务器上设置)之间建立连接。这是我的 R 代码:

install.packages("RJDBC",dep=TRUE)
require(RJDBC)

drv <- JDBC(driverClass = "org.apache.hive.jdbc.HiveDriver", 
       classPath = list.files("C:/Users/37/Downloads/hive-jdbc-0.10.0.jar",
       pattern="jar$",full.names=T),
       identifier.quote="'")

这是我在执行上述命令时遇到的错误:

.jfindClass(as.character(driverClass)1) 中的错误:找不到类 conn

我从here 下载了jar 文件并将它们放在CLASSPATH 中。请告知我是否做错了什么以及如何让它发挥作用。

谢谢。

【问题讨论】:

    标签: r hive


    【解决方案1】:

    如果您有 cloudera,请检查版本并为此下载 jar。 例子 CDH 5.9.1 hadoop-common-2.6.0-cdh5.9.1.jar hive-jdbc-1.1.1-standalone.jar

    将jar复制到R主机的文件夹中并执行:

     library("DBI")
    
     library("rJava")
    
     library("RJDBC")
    
    #init of the classpath (works with hadoop 2.6 on CDH 5.4 installation)
    cp = c("/home/youruser/rlibs/hadoop-common-2.6.0-cdh5.9.1.jar", "/home/youruser/rlibs/hive-jdbc-1.1.1-standalone.jar")
    .jinit(classpath=cp)
    
    #initialisation de la connexion
    drv <- JDBC("org.apache.hive.jdbc.HiveDriver", /home/youruser/rlibs/hive-jdbc-1.1.1-standalone.jar", identifier.quote="`")
    
    conn <- dbConnect(drv,"jdbc:hive2://HiveServerHostInYourCluster:10000/default;", "YourUserHive", "xxxx")
    
    #working with the connexion
    show_databases <- dbGetQuery(conn, "show databases")
    show_databases
    

    【讨论】:

      【解决方案2】:

      我尝试了这个示例代码,它对我有用:

      library(RJDBC)
      
      #Load Hive JDBC driver
      hivedrv <- JDBC("org.apache.hadoop.hive.jdbc.HiveDriver",
                      c(list.files("/home/amar/hadoop/hadoop",pattern="jar$",full.names=T),
                        list.files("/home/amar/hadoop/hive/lib",pattern="jar$",full.names=T)))
      
      #Connect to Hive service
      hivecon <- dbConnect(hivedrv, "jdbc:hive://ip:port/default")
      query = "select * from mytable LIMIT 10"
      hres <- dbGetQuery(hivecon, query)
      

      【讨论】:

      • 请让我知道我在哪里可以获得 hive 连接所需的所有 jar 文件?
      • 第一个语句现在可以工作,但是在 db connect 语句中出现错误 > conn
      • hive 安装在不同的服务器上,我的机器上没有。我的机器上有 R 并且正在尝试连接到托管在不同服务器上的配置单元。
      • 没关系,你只需要jar文件。您缺少一些特定的 jar 文件,导致此类未找到异常。您还在尝试创建连接之前加载库(RJDBC)吗?
      • 这就是我所做的,install.packages("RJDBC",dep=TRUE) library(RJDBC)drv
      【解决方案3】:

      我之前尝试使用 RJDBC 连接到 Cassandra 时也发生了同样的错误,通过将 Cassandra JDBC 依赖项放入您的 JAVA ClassPath 中得到了解决。

      看到这个answer

      【讨论】:

        【解决方案4】:

        对于发现此帖子的任何人,您可以尝试解决以下问题:

        1.) 从源 install.packages("rJava","http://rforge.net/",type="source") 重新安装 rJava

        2.) 启动 java 调试器进行加载并尝试再次连接 .jclassLoader()$setDebug(1L)

        3.) 我之前必须同时使用 Sys.setenv(JAVA_HOME = /Path/to/java) 和使用 dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/server/libjvm.dylib') 来找到正确的 jvm 库。

        4.) 如rJava load error in RStudio/R after "upgrading" to OSX Yosemite 所述,您还可以在libjvm.dylib/usr/local/lib 之间创建链接

        sudo ln -f -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

        如果所有这些都失败了,我过去也可以卸载和安装 R。

        【讨论】:

          【解决方案5】:

          到目前为止,这对我有帮助。

          1)首先检查hive服务是否正在运行,如果没有重启它。

          sudo service hive-server2 status
          sudo service hive-server2 restart
          

          2) 在 R 中安装 rJava 和 RJDBC。

          library(rJava)
          library(RJDBC)
          
          options(java.parameters = '-Xmx8g')
          hadoop_jar_dirs <- c('/usr/lib/hadoop/lib',
                               '/usr/lib/hadoop',
                               '/usr/lib/hive/lib')
          clpath <- c()
          for (d in hadoop_jar_dirs) {
            clpath <- c(clpath, list.files(d, pattern = 'jar', full.names = TRUE))
          }
          .jinit(classpath = clpath)
          .jaddClassPath(clpath)
          
          hive_jdbc_jar <- '/usr/lib/hive/lib/hive-jdbc-2.1.1.jar'
          hive_driver <- 'org.apache.hive.jdbc.HiveDriver'
          hive_url <- 'jdbc:hive2://localhost:10000/default'
          drv <- JDBC(hive_driver, hive_jdbc_jar)
          conn <- dbConnect(drv, hive_url)
          show_databases <- dbGetQuery(conn, "show databases")
          
          show_databases
          

          确保为 hadoop_jar_dirs、hive_jdbc_jar 和 hive_driver 提供正确的路径。

          【讨论】:

            【解决方案6】:

            我写了一个包来处理这个(和kerberos):

            devtools::install_github('nfultz/hiveuberjar')
            
            require(DBI)
            con <- dbConnect(hiveuberjar::HiveUber(), url="jdbc://host:port/schema")
            dbListTables(con)
            dbGetQuery(con, "Select count(*) from nfultz.iris limit 10")
            

            【讨论】:

              猜你喜欢
              • 2018-10-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-05-20
              • 2015-11-18
              • 2016-06-26
              相关资源
              最近更新 更多