连接R和Impala

问题描述 投票:1回答:5

我当然知道可重复的例子和代码片段,但对于这个问题,我必须(我不能以其他方式)模糊。

我想连接R和Impala。抛开问题(“正式”,我无法在这台PC上安装软件......但我使用了R和RStudio的便携版本)

我试过了RImpala包。

rimpala.connect(IP = myip,
              port = the port where Impala sees,
              principal = maybe this is not clear)

我很确定我的问题的原因是principal论证,文档对我来说并不清楚。无论如何,我已经尝试了几种文档组合应该放在那里的组合。

在任何情况下,我都会得到同样的错误:

.jcall中的错误(“RJavaTools”,“Ljava / lang / Object;”,“invokeMethod”,cl,:java.lang.IllegalArgumentException:Kerberos主体应该有3个部分:10.60.10.22:88888 / impala / @ tempuser

我在网上搜索了这个错误,它似乎与一些java的东西有关,但我对这种语言一无所知。

知道我无法访问我的PC,比如说,我无法安装任何软件或只做管理员可以做的事情,这会很有用。

我知道问题写得不好,但正如我之前所说,一个可重复的例子是不可能的。

More details

现在我正在思考它,我用我在浏览器导航栏中看到的地址填充IP参数以连接到Hue。我猜这是相同的,但也许我在这一点上也做错了,因为我说我很确定错误不是由于那个原因。

r impala
5个回答
4
投票

R package implyr(在CRANGitHub上)为Impala提供了一个dplyr后端,使用ODBC或JDBC驱动程序进行连接。有关说明,请参阅README


2
投票

而不是使用RImpala包,如何使用RJDBC连接。您可以从cloudera网站下载最新的impala JDBC驱动程序jar文件:http://www.cloudera.com/downloads/connectors/impala/jdbc/2-5-5.html

然后将jar中的这些文件导入R并使用它们进行连接。

install.packages("rJava")

install.packages("DBI")

install.packages("RJDBC")

library(DBI)

library(rJava)

library(RJDBC)

cp <- c(        
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/commons-codec-1.3.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/commons-logging-1.1.1.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/hive_metastore.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/hive_service.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/httpclient-4.1.3.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/httpcore-4.1.3.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/libfb303-0.9.0.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/libthrift-0.9.0.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/log4j-1.2.14.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/ql.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/slf4j-api-1.5.11.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/slf4j-log4j12-1.5.11.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/TCLIServiceClient.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/zookeeper-3.4.6.jar"
)

.jinit(classpath<-cp)

drv <- JDBC("com.cloudera.impala.jdbc4.Driver", "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/ImpalaJDBC4.jar")

con <- dbConnect(drv, "jdbc:impala://your_impala_host_address:21050;AuthMech= your authmech number if applicable", "username", "pwd")

data <- dbGetQuery(con, "SELECT * FROM mydb limit 25")

summary(data)

2
投票

我已成功使用R中的ODBC连接器和odbc包。此方法似乎没有任何Java依赖关系,并且是implyr包的作者推荐的。根据我有限的经验,这个连接器可以更好地将R数据类型与Impala数据类型正确匹配,从而在R中实现更小的对象大小。

对于Mac,这个过程就像,

  • 安装Cloudera ODBC connector
  • 安装unixodbcbrew install unixodbc
  • 关注Cloudera ODBC connector installation guide echo export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/opt/cloudera/impalaodbc/lib/universal >> ~/.bash_profile 用。创建一个~/.odbcinst.ini文件 [ODBC Drivers] Cloudera ODBC Driver for Impala=Installed [Cloudera ODBC Driver for Impala] Driver=/opt/cloudera/impalaodbc/lib/universal/libclouderaimpalaodbc.dylib Description=Cloudera ODBC Driver for Impala (可选)使用您的连接详细信息创建~/.odbc.ini文件。在这里,我使用的是Kerberos: [impala] Driver = Cloudera ODBC Driver for Impala Database = Host = Port = KrbHostFQDN = KrbServiceName = KrbRealm = AuthMech = 1 source ~/.bash_profile确保更新DYLD_LIBRARY_PATH
  • 在R,确保你安装了DBIodbcinstall.packages(c("DBI", "odbc"))
  • 最后,在R中建立连接, library(DBI) library(odbc) conn <- dbConnect(odbc::odbc(), driver = "Cloudera ODBC Driver for Impala", #database = "", host = "", port = , KrbHostFQDN = "", KrbServiceName = "", KrbRealm = "", AuthMech=1)
  • 然后,检索一些东西, dd <- dbGetQuery(conn, "select * from my_awesome_db.my_awesome_table limit 10;")

1
投票

只是想用另一种方式来访问类路径而不是写所有的jar:

drv <- JDBC(driverClass = "com.cloudera.impala.jdbc3.Driver", 
        classPath = list.files("C:/Users/Impala",
                               pattern="jar$",full.names=T),
        identifier.quote="'")

0
投票

使用RODBC包。我成功地在生产中使用它。在这里,我写下了一个教程。从这Blog

  1. 下载ClouderaImpalaODBC32.msi并安装它。
  2. 打开它并在参数字段中输入所需的信息,这里有一些screenshots可以帮助您更快地完成。
  3. 在R环境中,安装和库RODBC包。
  4. 类型,
library(RODBC)
impala <- odbcConnect("Impala")
sqlQuery(impala,"select * from xxx")

顺便说一句,如果您的环境在Win 10下,在函数odbcConnect中,您必须提供您的用户名和密码(仅来自我的同事报告)。

我希望你成功使用R的黑斑羚。

© www.soinside.com 2019 - 2024. All rights reserved.