在 Linux 上配置 ODBC

ODBC 驱动程序管理器使用配置文件来定义和配置 ODBC 数据源和驱动程序。为了配置一个 Linux 的 ODBC 连接,完成以下步骤:

  • 步骤1:配置环境变量
  • 步骤2:在 odbc.ini 中定义 ODBC 数据源
  • 步骤3:(可选)在 odbcinst.ini 中定义 ODBC 驱动
  • 步骤4:配置 MapR Drill ODBC 驱动

示例配置文件

在 Linux 环境下,通过 ODBC 客户端工具连接到 Drill 之前,除非这些文件存在,否则拷贝以下配置文件在 /opt/mapr/drillobdc/Setup 到你的 home 目录下:

  • mapr.drillodbc.ini
  • odbc.ini
  • odbcinst.ini

在你的 home 目录下,重命名文件作为隐藏文件。必要时,使用 sudo:

  • .mapr.drillodbc.ini
  • .odbc.ini
  • .odbcinst.ini

步骤1:设置环境变量

  1. 在你的 home 目录下的 .odbc.ini 中配置 ODBCINI 环境变量。例如:export ODBCINI=~/.odbc.ini
  2. 在你的 home 目录下的 .mapr.drillodbc.ini 中配置 MAPRDRILLINI 环境变量。例如:export MAPRDRILLINI=~/.mapr.drillodbc.ini
  3. 配置 LD_LIBRARY_PATH 环境变量到你的 ODBC 驱动管理器库,同时 MapR ODBC 驱动共享到 Apache Drill 的库中。例如:export LD_LIBRARY_PATH=/usr/local/lib:/opt/mapr/drillodbc/lib/64

你可以在相同的电脑上同时安装 32 位和 64 位的驱动。

  1. 重点:不要在 LD_LIBRARY PATH 下同时指定 32 位和 64 位共享库。

步骤2:在 .odbc.ini 中定义 ODBC 数据源

在你的环境中,定义 ODBC 数据源在 ~/.odbc.ini 配置文件中。为了在嵌入模式中使用 Drill,配置属性如下所示:

  1. ConnectionType=Direct
  2. HOST=localhost
  3. PORT=31010
  4. ZKQuorum=
  5. ZKClusterID=

为了在分布式模式下使用,配置属性如下所示:

  1. ConnectionType=ZooKeeper
  2. HOST=
  3. PORT=
  4. ZKQuorum=<host name>:<port>,<host name>:<port> . . . <host name>:<port>
  5. ZKClusterID=<cluster name in `drill-override.conf`>

以下 Linux 示例展示了在分布式模式下使用 Drill。示例修改了默认的 .odbc.ini

  1. [ODBC]
  2. Trace=no
  3. [ODBC Data Sources]
  4. #Sample MapR Drill DSN 32=MapR Drill ODBC Driver 32-bit
  5. Sample MapR Drill DSN 64=MapR Drill ODBC Driver 64-bit
  6. [Sample MapR Drill DSN 64]
  7. #[Sample MapR Drill DSN 32]
  8. # This key is not necessary and only describes the data source.
  9. #Description=MapR Drill ODBC Driver (32-bit) DSN
  10. Description=MapR Drill ODBC Driver (64-bit) DSN
  11. # Driver: The location where the ODBC driver is installed to.
  12. #Driver=/opt/mapr/drillodbc/lib/32/libmaprdrillodbc32.so
  13. Driver=/opt/mapr/drillodbc/lib/64/libmaprdrillodbc64.so
  14. # The DriverUnicodeEncoding setting is only used for SimbaDM
  15. # When set to 1, SimbaDM runs in UTF-16 mode.
  16. # When set to 2, SimbaDM runs in UTF-8 mode.
  17. #DriverUnicodeEncoding=2
  18. # Values for ConnectionType, AdvancedProperties, Catalog, Schema should be set here.
  19. # If ConnectionType is Direct, include Host and Port. If ConnectionType is ZooKeeper, include ZKQuorum and ZKClusterID
  20. # They can also be specified on the connection string.
  21. # AuthenticationType: No authentication; Basic Authentication
  22. ConnectionType=ZooKeeper
  23. HOST=
  24. PORT=
  25. ZKQuorum=centos23:5181,centos28:5181,centos29:5181
  26. ZKClusterID=docs41cluster-drillbits
  27. AuthenticationType=No Authentication
  28. UID=[USERNAME]
  29. PWD=[PASSWORD]
  30. AdvancedProperties=CastAnyToVarchar=true;HandshakeTimeout=5;QueryTimeout=180;TimestampTZDisplayTimezone=utc;ExcludedSchemas=sys,INFORMATION_SCHEMA;NumberOfPrefetchBuffers=5;
  31. Catalog=DRILL
  32. Schema=
  33. # The DriverUnicodeEncoding setting is only used for SimbaDM

属性验证

密码用于保护 DSN,采用验证类型,选择基本认证,并且配置 UID 和 PWD 属性。

直接和 ZooKeeper Quorum 属性

为了在分布式模式下使用 Drill,配置连接类型为 ZooKeeper,从 drill-override.conf 文件中,获取 ZKQuorum 和 ZKClusterID 值,并定义 ZKQuorum 和 ZKClusterID 属性。drill-override.conf/drill/drill-<version>/conf 目录下。ZK 集群的格式如下所示:

  1. <host name/ip address> : <port number>, <host name/ip address> : <port number>, . . .

例如:

  • ZKQuorum=centos23:5181,centos28:5181,centos29:5181
  • ZKClusterID=docs41cluster-drillbits

为了在嵌入模式中使用 Drill,不需要定义 ZKQuorum 和 ZKClusterID 属性。启动 Drill 使用 drill-localhost 命令,配置连接类型为直接连接,并定义 HOST 和 PORT 属性。例如:

  • HOST=centos32.lab:5181
  • PORT=31010

步骤3:(可选)在 odbcinst.ini 中定义 ODBC 驱动

在 ODBC 驱动中,.odbcinst.ini 是一个可选配置文件。配置文件是一个可选项是因为你可以直接在 .odbc.ini 配置文件中指定驱动。示例配置如下所示:

  1. [ODBC Drivers]
  2. [ODBC Drivers]
  3. MapR Drill ODBC Driver 32-bit=Installed
  4. MapR Drill ODBC Driver 64-bit=Installed
  5. [MapR Drill ODBC Driver 32-bit]
  6. Description=MapR Drill ODBC Driver(32-bit)
  7. Driver=/opt/mapr/drillodbc/lib/32/libmaprdrillodbc32.so
  8. [MapR Drill ODBC Driver 64-bit]
  9. Description=MapR Drill ODBC Driver(64-bit)
  10. Driver=/opt/mapr/drillodbc/lib/64/libmaprdrillodbc64.so

步骤4:配置 MapR Drill ODBC 驱动

配置 MapR Drill ODBC 驱动在你的环境中通过 .mapr.drillodbc.ini 配置文件修改。该配置驱动工作在你的 ODBC 驱动管理器上。配置示例如下所示:

  1. . . .
  2. [Driver]
  3. DisableAsync=0
  4. DriverManagerEncoding=UTF-32
  5. ErrorMessagesPath=/opt/mapr/drillodbc/ErrorMessages
  6. LogLevel=0
  7. LogPath=[LogPath]
  8. SwapFilePath=/tmp
  9. ## - Uncomment the ODBCInstLib corresponding to the Driver Manager being used.
  10. ## - Note that the path to your ODBC Driver Manager must be specified in LD_LIBRARY_PATH.
  11. # Generic ODBCInstLib
  12. # iODBC
  13. ODBCInstLib=libiodbcinst.so
  14. . . .

配置 .mapr.drillodbc.ini

为了配置 MapR Drill ODBC 驱动在 .mapr.drillodbc.ini 配置文件中,需完成以下步骤:

  1. 在文本编辑器中打开 .mapr.drillodbc.ini 配置文件
  2. 如果你想启用同步 ODBC 连接,便捷 DisableAsync 配置。改变默认值 0 为 1 来禁止同步和启用同步连接。状态的改变发生在驱动程序初始化和传播到所有 DSN。
  3. 如果需要,编辑 DriverManagerEncoding 配置。该值默认是 UTF-16 或 UTF-32,但是依赖于驱动管理器的使用。iODBD 使用 UTF-32 和 unixODBC 使用 UTF-16。最后检查你的 ODBC 驱动管理器是否配置正确。
  4. 编辑 ODBCInstLib。该值是 ODBCInst 共享库的名称,便于你使用 ODBC 驱动。配置文件默认是共享给 iODBC。在 Linux,共享库名称的 iODBC 是 libiodbcinst.so。指定绝对或相对文件到库。如果你使用相对文件名,要包含库文件的路径。库文件路径的环境变量为 LD_LIBRARY_PATH
  5. 保存 mapr.drillodbc.ini 配置文件。