我当然知道可重复的例子和代码片段,但对于这个问题,我必须(我不能以其他方式)模糊。
我想连接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,比如说,我无法安装任何软件或只做管理员可以做的事情,这会很有用。
我知道问题写得不好,但正如我之前所说,一个可重复的例子是不可能的。
现在我正在思考它,我用我在浏览器导航栏中看到的地址填充IP
参数以连接到Hue。我猜这是相同的,但也许我在这一点上也做错了,因为我说我很确定错误不是由于那个原因。
而不是使用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)
我已成功使用R中的ODBC连接器和odbc
包。此方法似乎没有任何Java依赖关系,并且是implyr包的作者推荐的。根据我有限的经验,这个连接器可以更好地将R数据类型与Impala数据类型正确匹配,从而在R中实现更小的对象大小。
对于Mac,这个过程就像,
unixodbc
:brew install unixodbc
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
DBI
和odbc
:install.packages(c("DBI", "odbc"))
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;")
只是想用另一种方式来访问类路径而不是写所有的jar:
drv <- JDBC(driverClass = "com.cloudera.impala.jdbc3.Driver",
classPath = list.files("C:/Users/Impala",
pattern="jar$",full.names=T),
identifier.quote="'")
使用RODBC包。我成功地在生产中使用它。在这里,我写下了一个教程。从这Blog
library(RODBC)
impala <- odbcConnect("Impala")
sqlQuery(impala,"select * from xxx")
顺便说一句,如果您的环境在Win 10下,在函数odbcConnect
中,您必须提供您的用户名和密码(仅来自我的同事报告)。
我希望你成功使用R的黑斑羚。