我有一个功能齐全的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驱动程序列为支持的操作系统之一。
答案 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
希望它有所帮助!