为 RODBC 安装 Cloudera Impala ODBC 驱动程序

Posted

技术标签:

【中文标题】为 RODBC 安装 Cloudera Impala ODBC 驱动程序【英文标题】:Installing Cloudera Impala ODBC drivers for RODBC 【发布时间】:2015-03-22 22:24:19 【问题描述】:

我已尝试非常仔细地按照安装指南在 Mac 上为 R 设置 Impala Cloudera ODBC 驱动程序,但不断收到以下错误消息:

In odbcDriverConnect("DSN=Impala ODBC Driver") :
[RODBC] ERROR: state IM002, code 0, message [unixODBC][Driver
Manager]Data source name not found, and no default driver specified

这正是我所做的。对于下面引用的每个文件,我确保该文件存在于该位置。

从http://www.cloudera.com/content/cloudera/en/downloads/connectors/impala/odbc/impala-odbc-v2-5-23.html 下载并安装 Impala ODBC 驱动程序

brew install unixodbc
odbcinst -j 

unixODBC 2.3.2
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /Users/summerrae/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

指向DYLD库路径变量:

export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/opt/cloudera/impalaodbc/lib/universal

echo "export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/opt/cloudera/impalaodbc/lib/universal/" >> ~/.bashrc

编辑/usr/local/etc/odbc.ini:

[ODBC Data Sources]
# Use this name in your connection string 
Impala DSN=Impala ODBC Driver
[Impala DSN]
# Driver: The location where the ODBC driver is installed to. 
Driver=/opt/cloudera/impalaodbc/lib/universal/libclouderaimpalaodbc.dylib
# Values for HOST, PORT, Database 
HOST=myhost (changed name here for security)
PORT=21050
Database=default

Edited /user/local/etc/odbcinst.ini: 
[ODBC Drivers]
Impala ODBC Driver=Installed
[Impala ODBC Driver]
Description=Impala ODBC Driver
Driver=/opt/cloudera/impalaodbc/lib/universal/libclouderaimpalaodbc.dylib

已编辑 /opt/cloudera/impalaodbc/lib/universal/cloudera.impalaodbc.ini:

[Driver]
## - Note that this default DriverManagerEncoding of UTF-15 
## is for unixODBC. 
DriverManagerEncoding=UTF-16
ErrorMessagesPath=/opt/cloudera/impalaodbc/ErrorMessages/
LogLevel=0
LogPath=

## - Note that the path to your ODBC Driver Manager 
## must be specified in DYLD_LIBRARY_PATH.
# unixODBC 
ODBCInstLib=libiodbcinst.dylib

导出路径变量到~/.bashrc:

#add full path to odbc.ini and add to bashrc
export ODBCINI=/usr/local/etc/odbc.ini
echo "export ODBCINI=/etc/odbc.ini" >> ~/.bashrc

#add directory path to odbcinst.ini and add to bashrc
export ODBCSYSINI=/usr/local/etc/
echo "export ODBCSYSINI=/etc/odbcinst.ini" >> ~/.bashrc

#add full path to cloudera.impalaodbc.ini and add to bashrc
export CLOUDERAIMPALAINI=/opt/cloudera/impalaodbc/lib/universal/cloudera.impalaodbc.ini
echo "export CLOUDERAIMPALAINI=/opt/cloudera/impalaodbc/lib/universal/cloudera.impalaodbc.ini" >> ~/.bashrc

在 R 中:

install.packages("RODBC")
library(RODBC)
#connect using impala DSN
conn <- odbcConnect("Impala DSN")

我已经阅读了所有我能找到的教程来让它工作。我能够使用 Python 连接到相同的服务器和参数,我能够使用 RImpala 连接到相同的服务器,但无法让 RImpala 包运行查询,所以我知道连接有效。任何帮助是极大的赞赏。谢谢!

【问题讨论】:

【参考方案1】:

事实证明,优胜美地默认提供的 iODBC 驱动程序存在问题。我最终重新安装了mac os,一切都很好。

作为替代方案,我还发现您可以:

安装 mac ODBC 管理器

    从http://www.odbcmanager.net/下载文件 安装后,从应用程序/实用程序中打开程序 点击“驱动程序”,然后点击“添加” 浏览到 impala 驱动程序,默认位置是: /opt/cloudera/impalaodbc/lib/universal/libclouderaimpalaodbc.dylib 添加系统 DSN 添加DSN名称,然后点击“添加”

    添加以下两个键值对:

    HOST your_host_name

    端口 21050

    点击“确定”

使用您在上面创建的 DSN 名称与 RODBC 连接。

【讨论】:

跟进和添加替代策略的要点。您可以勾选自己的答案。【参考方案2】:

您的问题是驱动程序安装指向 /usr/local/etc 文件夹中的配置文件,而您试图修改驱动程序附带的文件。我遇到了同样的问题,我只是在 /usr/local/etc 中配置了 .ini 文件,并且可以无 DNS 连接。

【讨论】:

以上是关于为 RODBC 安装 Cloudera Impala ODBC 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

macOS Catalina 上的 RODBC

Ubuntu中的RODBC将文本字符串截断为255个字符

Cloudera安装未能检测到CentOS上的root特权我试图将新主机添加到CentOS集群中。安装失败,状态为“安装失败。无法检测root特权”。我知道Cloudera需要用户具有无密码特权(“需

Cloudera 安装有疑问吗?

Cloudera简介和安装部署概述

Cloudera简介和安装部署概述