在Mac上使用ODBC链接Impala
如果在Windows平台,可以直接安装相应的Cloudera ODBC Driver即可,基于电脑是x64或者x86的都能在官网找到对应的msi安装文件,安装完成后有对应的UI界面可以直接配置System DSN,在这里不在赘述。
回到正题,我们如何才能在Mac平台上面使用呢?因为我们使用的是C#开发,如果是Java的话可以直接使用JDBC,不用额外安装东西。
首先安装Mac版本的驱动,下载链接戳我,安装完后目录中也有详细的官方使用说明文档。
ll /opt/cloudera/impalaodbc
total 1384
-rwxr-xr-x 1 root wheel 569K Mar 31 2020 Cloudera-ODBC-Driver-for-Impala-Install-Guide.pdf
-rwxr-xr-x 1 root wheel 12K Mar 31 2020 EULA.txt
drwxr-xr-x 3 root wheel 96B Mar 31 2020 ErrorMessages
-rwxr-xr-x 1 root wheel 21K Mar 31 2020 Release-Notes-Impala-ODBC.txt
drwxr-xr-x 4 root wheel 128B Mar 31 2020 Setup
drwxr-xr-x 3 root wheel 96B Mar 31 2020 Tools
drwxr-xr-x 3 root wheel 96B Mar 31 2020 lib
-rwxr-xr-x 1 root wheel 82K Mar 31 2020 third-party-licenses.txt
光是安装了这个驱动还是无法使用的,我们可以看下官方的文档说明,这里有一个前提条件就是需要安装ODBC驱动管理器。

安装过程很简单,用命令行使用brew安装就行。
brew install unixodbc
安装完了可以使用命令行输入命令查看安装版本以及配置文件所在位置。
odbcinst -j
unixODBC 2.3.9
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/aaron/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
剩下就是配置具体的DSN了
vi /usr/local/etc/odbc.ini
写入对应的服务器配置信息
[your_DSN_name]
Driver = /opt/cloudera/impalaodbc/lib/universal/libclouderaimpalaodbc.dylib
Description =
Host = your_impala_host
Port = your_impala_port
配置完这些我们就可以验证是否能够正常链接并执行语句了,到这一步配置基本没问题了,接下来我们就可以使用C#代码来进行链接了。
isql -v your_DSN_name
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
这里在实际代码运行过程中会出现如下错误,在~/.bash_profile里面配置错误里面提示的环境变量了也完全不起作用。
System.DllNotFoundException: Unable to load shared library 'ibodbc.2.dylib' or one of its dependencies. In order to help diagnose loading problems, consider setting the DYLD_PRINT_LIBRARIES environment variable
我们可以查看.NET Core SDK安装情况
dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 3.1.300
Commit: b2475c1295
Runtime Environment:
OS Name: Mac OS X
OS Version: 10.16
OS Platform: Darwin
RID: osx-x64
Base Path: /usr/local/share/dotnet/sdk/3.1.300/
Host (useful for support):
Version: 3.1.4
Commit: 0c2e69caa6
.NET Core SDKs installed:
2.1.504 [/usr/local/share/dotnet/sdk]
2.2.104 [/usr/local/share/dotnet/sdk]
3.0.100 [/usr/local/share/dotnet/sdk]
3.0.101 [/usr/local/share/dotnet/sdk]
3.1.102 [/usr/local/share/dotnet/sdk]
3.1.202 [/usr/local/share/dotnet/sdk]
3.1.300 [/usr/local/share/dotnet/sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.8 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.8 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.1 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.4 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.8 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.14 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.15 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.18 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.2 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.1 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.2 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.4 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
既然运行的时候无法检测到这个动态扩展库,那我们就直接把他挪到.NET Core runtimes的地方,这在开发过程中可以这样操作,实际如果部署到Linux下不晓得有没有其他解决方案,部署到Windows下因为用的是Windows版的驱动所以不会受到这个影响。
sudo ln -s /usr/local/lib/libodbc.2.dylib /usr/local/share/dotnet/shared/Microsoft.NETCore.App/3.1.4
重新运行程序,这个时候又会提示另外一个问题:Unable to locate SQLGetPrivateProfileString function,解决方案参考这里,在驱动的配置文件中指定Encoding就行了。
vi /opt/cloudera/impalaodbc/lib/universal/cloudera.impalaodbc.ini
写入对应的编码配置信息,接下来就可以顺滑使用了。
[Driver]
ErrorMessagesPath=/opt/cloudera/impalaodbc/ErrorMessages/
LogLevel=0
LogPath=
ODBCInstLib=/usr/local/lib/libodbcinst.dylib
DriverManagerEncoding=UTF-16

浙公网安备 33010602011771号