我正在尝试为我的一个项目创建一个POC,这将允许我使用ODBC连接字符串连接到HIVE。
我成功地使用DSN方法连接到HIVE。但这对我不起作用,因为我需要在运行时允许创建连接,其中连接源可以从一个主机更改为另一个主机。
我使用的是http://www.codeproject.com/Tips/738141/How-to-Communicate-to-Hadoop-via-Hive-using-NET-Cs
中的以下连接字符串(使用Microsoft ODBC驱动程序)var conn = new OdbcConnection {
ConnectionString = @
"DRIVER={Microsoft Hive ODBC Driver};
Host=<IP>;
Port=10000;
User Name=root;Password=<PWD>;
Database=default;
HiveServerType=2;
ApplySSPWithQueries=1;
TrustedCerts=C:\Program Files\Microsoft Hive ODBC Driver\lib\cacerts.pem;
AsyncExecPollInterval=100;
AuthMech=0;
CAIssuedCertNamesMismatch=0;"
}
using(conn) {
conn.Open();
DataTable dt = new DataTable();
OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText =
"SELECT * FROM categories;";
DbDataReader dr = await cmd.ExecuteReaderAsync();
dt.Load(dr);
}
当我尝试打开连接时,我收到网络超时。
ERROR [HY000] [Microsoft][HiveODBC] (34) Error from Hive: ETIMEDOUT.
我不知道如何解决这个问题。
答案 0 :(得分:0)
我找到了解决方案。您缺少用户名,来自连接字符串的密码更改如下:
ConnectionString = @"
Dsn=Sample Microsoft Hive DSN;
applysspwithqueries=1;asyncexecpollinterval=100;
authmech=3;binarycolumnlength=32767;
caissuedcertnamesmismatch=0;
decimalcolumnscale=10;
gettableswithquery=0;
host=*******;
port=10000;
rowsfetchedperblock=10000;
trustedcerts={C:\Program Files (x86)\Microsoft Hive ODBC Driver\lib\cacerts.pem};
Schema=default;
uid=************;
pwd=************"
答案 1 :(得分:0)
我在查看信息in this blog post后发现它正常工作。
这是我使用的连接字符串。
var connectionstring = @"DRIVER={Microsoft Hive ODBC Driver};
Host=******;
Port=10000;
Schema=default;
HiveServerType=2;
ApplySSPWithQueries=1;
AsyncExecPollInterval=100;
HS2AuthMech=2;
UserName=******;
trustedcerts={C:\Program Files\Microsoft Hive ODBC Driver\lib\cacerts.pem}";