Драйвер Simba Spark ODBC не удается подключиться, время ожидания всегда
У меня есть полностью работающий 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.
3 ответа
Если для вашего сервера hive.server2.authentication установлено значение NONE, вам нужно будет использовать механизм аутентификации имени пользователя и указать действительное имя пользователя, поскольку для вашего сервера hive.server2.enable.doAs установлено в значение true. Для Linux это означает, что вам нужно настроить DSN с AuthMech=1, чтобы использовать правильный метод аутентификации. Затем вам нужно будет ввести действительное имя пользователя при запуске isql (например, isql DSN UID). Надеюсь, это поможет.
Если у вас все еще есть проблемы, можно ли показать нам свой DSN? Для Spark 1.1.x и более поздних версий убедитесь, что в вашем DSN также есть SparkServerType=3. Благодарю.
У меня это работает, добавив это в 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 и DSN в odbc.ini.
isql -v SPARK
Надеюсь, поможет!