【问题标题】:Can't connect to Spark thriftserver using JDBC无法使用 JDBC 连接到 Spark thriftserver
【发布时间】:2017-07-07 20:51:40
【问题描述】:

我关注Spark instructions 启动了一个节俭的 JDBC 服务器:

$ ./spark-2.1.1-bin-hadoop2.7/sbin/start-thriftserver.sh

我可以从直线连接到它:

$ ./spark-2.1.1-bin-hadoop2.7/bin/beeline -u 'jdbc:hive2://localhost:10000' 连接到 jdbc:hive2://localhost:10000 log4j:WARN 找不到记录器 (org.apache.hive.jdbc.Utils) 的附加程序。 log4j:WARN 请正确初始化 log4j 系统。 log4j:WARN 有关详细信息,请参阅 http://logging.apache.org/log4j/1.2/faq.html#noconfig。 连接到:Spark SQL(2.1.1 版) 驱动程序:Hive JDBC(版本 1.2.1.spark2) 事务隔离:TRANSACTION_REPEATABLE_READ Apache Hive 的直线版本 1.2.1.spark2 0: jdbc:hive2://localhost:10000>

但是,尝试使用 JDBC 和相同的连接字符串从 DataGrip 进行连接时,出现错误:

[2017-07-07 16:46:57] java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransportException [2017-07-07 16:46:57] 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) [2017-07-07 16:46:57] 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) [2017-07-07 16:46:57] 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) [2017-07-07 16:46:57] 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) [2017-07-07 16:46:57] 在 org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105) [2017-07-07 16:46:57] 在 com.intellij.database.remote.jdbc.impl.RemoteDriverImpl.connect(RemoteDriverImpl.java:27) [2017-07-07 16:46:57] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [2017-07-07 16:46:57] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [2017-07-07 16:46:57] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [2017-07-07 16:46:57] 在 java.lang.reflect.Method.invoke(Method.java:498) [2017-07-07 16:46:57] 在 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:324) [2017-07-07 16:46:57] 在 sun.rmi.transport.Transport$1.run(Transport.java:200) [2017-07-07 16:46:57] 在 sun.rmi.transport.Transport$1.run(Transport.java:197) [2017-07-07 16:46:57] 在 java.security.AccessController.doPrivileged(本机方法) [2017-07-07 16:46:57] 在 sun.rmi.transport.Transport.serviceCall(Transport.java:196) [2017-07-07 16:46:57] 在 sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) [2017-07-07 16:46:57] 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) [2017-07-07 16:46:57] 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) [2017-07-07 16:46:57] 在 java.security.AccessController.doPrivileged(本机方法) [2017-07-07 16:46:57] 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) [2017-07-07 16:46:57] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [2017-07-07 16:46:57] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [2017-07-07 16:46:57] 在 java.lang.Thread.run(Thread.java:745) (无堆栈跟踪)

我将 DataGrip 配置为使用 spark 安装文件夹中的 JDBC 库 hive-jdbc-1.2.1.spark2.jar

【问题讨论】:

    标签: apache-spark-sql datagrip


    【解决方案1】:

    从 spark 2.2.1 发行版中,您需要以下 jar:

    commons-logging-1.1.3.jar
    hadoop-common-2.7.3.jar
    hive-exec-1.2.1.spark2.jar
    hive-jdbc-1.2.1.spark2.jar
    hive-metastore-1.2.1.spark2.jar
    httpclient-4.5.2.jar
    httpcore-4.4.4.jar
    libthrift-0.9.3.jar
    slf4j-api-1.7.16.jar
    spark-hive-thriftserver_2.11-2.2.1.jar
    spark-network-common_2.11-2.2.1.jar
    

    在 Datagrip 中选择类 org.apache.hive.jdbc.HiveDriver 并将 Tx(事务控制)设置为 Manual(spark 不支持自动提交)。

    您现在应该可以使用 URL jdbc:hive2://hostname:10000/ 进行连接

    【讨论】:

      【解决方案2】:

      spark/jars 文件夹中的所有*.jar 文件添加到DataGrip 的“JDBC 驱动程序”窗口后,它就可以工作了!不确定这些库中的哪一个是必需的,但反复试验告诉我其中许多是必需的!

      【讨论】:

      • 它并不漂亮,但它完成了工作。摆弄 JAR 是零乐趣。
      【解决方案3】:

      添加到 tukushan 答案。您只需使用两个罐子就可以简化您的生活: spark发行版的hadoop-common-2.7.3.jar和 hive-jdbc-1.2.1-standalone.jar

      【讨论】:

        猜你喜欢
        • 2017-11-20
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 1970-01-01
        • 2019-12-02
        • 2020-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多