【问题标题】:Simba Spark ODBC driver fail to connect, always timeoutSimba Spark ODBC 驱动程序连接失败,总是超时
【发布时间】:2023-04-07 20:20:01
【问题描述】:

我有一个功能齐全的 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驱动列为支持的操作系统之一。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案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 和 odbc.ini

        中的 DSN 进行连接
        isql -v SPARK
        

        希望对你有帮助!

        【讨论】:

          猜你喜欢
          • 2020-10-11
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-04
          • 2022-06-25
          • 2013-11-11
          相关资源
          最近更新 更多