我正在尝试设置unixodbc以使用来自cloudera的hive驱动程序连接器(在Ubuntu机器中)。
在我的〜/ .local / lib文件夹中,我有链接到cloudera提供的.so文件,
env变量LD_LIBRARY_PATH
也包含/home/luca/.local/lib:/opt/cloudera/hiveodbc/lib/64/
。
我创建了包含以下内容的文件/etc/odbcinst.ini:
[hive]
Description = Cloudera ODBC Driver for Apache Hive (64-bit)
Driver = /home/luca/.local/lib/libclouderahiveodbc64.so
ODBCInstLib= /home/luca/.local/lib/libodbcinst.so
UsageCount = 1
DriverManagerEncoding=UTF-16
ErrorMessagesPath=/opt/cloudera/hiveodbc/ErrorMessages/
LogLevel=0
SwapFilePath=/tmp
在我的主文件夹中,我.odbc.ini
包含:
[hive]
Driver=hive
HOST=<thehost>
PORT=<theport>
Schema=<theschema>
FastSQLPrepare=0
UseNativeQuery=0
HiveServerType=2
AuthMech=2
#KrbHostFQDN=[Hive Server 2 Host FQDN]
#KrbServiceName=[Hive Server 2 Kerberos service name]
UID=<myuid>
使用isql -v hive
测试连接时
我收到以下错误消息:
[S1000][unixODBC][DSI] The error message NoSQLGetPrivateProfileString could not be found in the en-US locale. Check that /en-US/ODBCMessages.xml exists.
[ISQL]ERROR: Could not SQLConnect
如何解决此问题(为什么/ en-US /的路径是绝对的?)
答案 0 :(得分:0)
在ODBCInstLib库中找不到SQLGetPrivateProfileString。无法加载库,或库未包含符号。
使用 static long q20(){
long sum = 0;
String factorial = factorial(new BigInteger("100")).toString();
for(int i=0;i<factorial.length();i++){
sum += Long.parseLong(factorial.charAt(i)+"");
}
return sum;
}
static BigInteger factorial(BigInteger n){
BigInteger one = new BigInteger("1");
if(n.equals(one)) return one;
return n.multiply(factorial(n.subtract(one)));
}
查看是否正在加载配置文件。使用strace isql -v hive 2>&1 | grep ini
查看库的位置。
确保库存在于给定位置并具有正确的体系结构。使用strace isql -v hive 2>&1 | grep odbcinst.so
检查体系结构。使用file -L /home/luca/.local/lib/libodbcinst.so
检查它是否具有正确的符号。