0

我有一个功能齐全的 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

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

PS:客户端的操作系统是SUSE,被Spark ODBC驱动列为支持的操作系统之一。

4

3 回答 3

1

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

于 2015-04-03T18:27:01.393 回答
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

希望能帮助到你 !

于 2015-04-15T14:01:05.440 回答
0

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

于 2015-04-03T18:43:54.293 回答