Simba Spark ODBC驱动程序无法连接,总是超时

时间:2015-04-02 22:14:56

标签: odbc hive apache-spark apache-spark-sql isql

我有一个功能齐全的Apache Spark Hive ThriftServer 1.2.1,它使用beeline和SQL Developer进行测试(两者都有效)。此服务器的配置如下:

  <property>
     <name>hive.server2.authentication</name>
     <value>NONE</value>
  </property>

  <property>
     <name>hive.metastore.schema.verification</name>
     <value>false</value>
  </property>

 <property>
    <name>hive.server2.enable.doAs</name>
    <value>true</value>
 </property>

但Simba ODBC无法与它建立连接(尽管服务器响应错误消息)。每次客户端在2分钟后抛出以下异常:

    [S1000][unixODBC][Simba][SparkODBC] (22) Error from ThriftHiveClient: EAGAIN (timed out)
    [ISQL]ERROR: Could not SQLConnect

服务器端抛出以下异常:

java.lang.RuntimeException: org.apache.thrift.transport.TTransportException
    at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:219)
    at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:189)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.thrift.transport.TTransportException
    at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:132)
    at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84)
    at org.apache.thrift.transport.TSaslTransport.receiveSaslMessage(TSaslTransport.java:182)
    at org.apache.thrift.transport.TSaslServerTransport.handleSaslStartMessage(TSaslServerTransport.java:125)
    at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:253)
    at org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41)
    at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:216)
    ... 4 more

我们已经用尽了所有选项,这个症状是我们从服务器获得的唯一响应。有人遇到此错误并修复它吗?

P.S:客户端的操作系统是SUSE,它被Spark ODBC驱动程序列为支持的操作系统之一。

3 个答案:

答案 0 :(得分:1)

如果您的服务器 hive.server2.authentication 设置为,则需要使用用户名身份验证机制并提供有效的用户名,因为您的服务器 hive.server2.enable.doAs 设置为 true 。对于Linux,这意味着您需要使用 AuthMech = 1 配置DSN以使用正确的身份验证方法。然后,在运行isql时需要传入有效的用户名(例如 isql DSN UID )。我希望这会有所帮助。

答案 1 :(得分:0)

如果您仍有问题,是否可以向我们展示您的DSN?对于Spark 1.1.x及更高版本,请确保DSN中的SparkServerType = 3。感谢。

答案 2 :(得分:0)

我将此工作添加到 hive-site.xml

  <property>
    <name>hive.server2.authentication</name>
    <value>NONE</value>
  </property>

然后在安装了unixODBC且安装了simbaODBC驱动程序的服务器中,我将 odbc.ini 文件更改为此(注意用户位于 hive-site.xml ):

[SPARK]
Description=Spark ODBC Driver (64-bit) DSN
Driver=/opt/simba/sparkodbc/lib/64/libsimbasparkodbc64.so
Host=192.168.100.10
Port=10000
SparkServerType=3
AuthMech=2
UID=hive

然后我使用isql和 odbc.ini

中的DSN进行连接
isql -v SPARK

希望它有所帮助!