概要描述
本文记录 linux 环境下,安装 odbc 驱动,配置 odbc 数据源,以及如何用 odbc 驱动连接 Inceptor 的步骤;
详细说明
1、安装并配置 Driver Manager
由于Linux系统没有提供ODBC Driver Manager,需要自行下载:
wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.12.tar.gz
下载完成后,编译并安装 driver manager,运行如下命令:
tar -xvzf unixODBC-2.3.12.tar.gz
cd unixODBC-2.3.12/
./configure --sysconfdir=/etc
make
make install
配置环境变量PATH和LD_LIBRARY_PATH,运行如下命令:
export PATH=/usr/local/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/lib/:${LD_LIBRARY_PATH}
测试driver manager是否安装成功,运行odbcinst -j,输出样例如下:
# odbcinst -j
unixODBC 2.3.12
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
此处要确保:
DRIVERS 的值为 /etc/odbcinst.ini
;
SYSTEM DATA SOURCES 的值为 /etc/odbc.ini
2、安装并配置ODBC驱动
下载并安装驱动
1.下载Linux ODBC驱动程序,manager 的 inceptor 服务页面,如下图。选择对应平台的安装包,其中 Centos 6 和 Centos 7 均可使用 inceptor-connector-odbc-x.x.x-1.el6.x86_64
2.安装驱动,以CentOS 6 64位为例,安装rpm包:
rpm -ivh inceptor-connector-odbc-*.x86_64.rpm --nodeps
3.拷贝配置文件,Inceptor ODBC 相关的配置文件包括三个,安装rpm包后,配置文件会被放置在/usr/local/inceptor/
下:
- /usr/local/inceptor/log4cplus.properties
- /usr/local/inceptor/odbc.ini
- /usr/local/inceptor/odbcinst.ini
请将这三个文件拷贝到 /etc/ 目录下覆盖原有的配置文件。这三个文件的作用分别如下:
odbcinst.ini 描述了 ODBC 驱动名字和驱动程序的关系:
- [ODBC] 指定Driver Manager信息:Trace = Yes 表明当前状态打开 Driver Manager 的日志,日志的位置为 /tmp/odbc-driver-manager.log。这里我们建议修改为No,否则后期有可能因为 /tmp/odbc-driver-manager.log 文件过大占用根目录。
Trace 值修改之后,需要重启应用才能生效(因为每次连接数据库时,应用程序会重新加载ODBC的配置信息。)。 - [Transwarp Inceptor ODBC Driver] 标签下的 Driver 字段指向 ODBC 的驱动位置 /usr/local/lib64/libODBC4HiveServer2.so
odbc.ini 文件描述了 DSN 的配置信息
log4cplus.properties 为 ODBC log 配置文件:
3、配置Inceptor ODBC
在使用 ODBC 驱动连接 Inceptor 数据库之前,你需要配置 ODBC 数据源名称(DSN),DSN定义了连接数据库所需的各种配置参数,用户可以在应用中使用DSN与数据库交互,避免了在应用中单独定义各个参数。DSN分为用户DSN、系统DSN、文件DSN,用户可以根据操作系统和ODBC驱动选择不同的方式。
ODBC数据源名称概览
DSN定义了连接数据库所需的各种配置参数,通常有如下参数:
- Data Source Name:DSN的名称,使用过程中根据名字指定某一个具体的DSN。
- Description:DSN的描述信息。
- Host:数据库的IP地址。
- Port: 端口号,默认使用10000。
- Database:连接的数据库名字,默认连接default数据库。
- Inceptor Server Type:指定 Inceptor Server 类型,从TDH 4.7版本开始,仅支持 Inceptor Server 2。
- Mechanism:允许三种认证方式,NONE、LDAP 和 Kerberos。
这边以 LDAP 连接举例配置 DSN,其他方式可以参考 ODBC 连接手册
[transwarp-hs2-ldap]
Description = LDAP test
Driver = Transwarp Inceptor ODBC Driver
Server = tdh522-183
Hive = Hive Server 2
Host = 192.168.31.183
Port = 10000
Database = default
User = hive
Password = 123456
Mech = LDAP
[transwarp-hs2-kerberos]
[transwarp-hs1]
[mysql]
PS:[transwarp-hs2-ldap] 标签下配置使用 LDAP 模式下的 Inceptor Server 2 的 DSN。
4、验证
执行如下命令测试ODBC驱动是否正确安装和配置:
# 命令连接格式 isql {DSN名称} {用户名} {密码}
isql transwarp-hs2-ldap hive 123456
连接成功结果如下图所示:
5、常见错误解决方法
-
如果连接错误,请参考 ODBC 连接 inceptor 配置过程常见问题 尝试修复。
-
kerberos认证下报错SASL Other: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No Kerberos credentials available (default cache: FILE:/tmp/krb5cc_0))
需要在yum install krb5-libs krb5-workstation krb5-server之后,尝试 kinit 任意租户,生成一个/tmp/krb5cc_0文件,不可以通过 touch /tmp/krb5cc_0 进行构造,会报 Bad format in credentials cache (filename: /tmp/krb5cc_0)) 的错误。
-
其他错误和异常可以通过 log4j 中配置的日志路径进行分析,比如/ tmp/odbc-driver-manager.log以及/tmp/odbc.log
6、具体使用案例
Python
使用 Python:
import pyodbc
cnxn = pyodbc.connect("DRIVER={Transwarp Inceptor ODBC Driver};DSN=transwarp-hs2-ldapp")
cursor = cnxn.cursor()
result = cursor.execute("show databases").fetchall()
print(result)