【问题标题】:Apache Drill - connection to Drill in Embedded Mode [java]Apache Drill - 以嵌入式模式连接到 Drill [java]
【发布时间】:2015-07-27 13:38:31
【问题描述】:

我想通过 Java 应用程序连接到 Drill,到目前为止,我一直在尝试使用 JDBC 来完成它,我正在使用来自 https://github.com/vicenteg/DrillJDBCExample 的示例,但是... 当我将 DB_URL 静态变量更改为 "jdbc:drill:zk=local" 并启动应用程序时出现异常:

java.sql.SQLNonTransientConnectionException: 不支持单独使用 Drill 的 jdbc-all JDBC 驱动 Jar 文件以嵌入式模式运行 Drill。

到目前为止,我还没有找到任何解决方法。知道如何以嵌入式模式连接到 Drill 吗?到目前为止,我不想设置分布式模式。

网络上确实没有太多关于它的内容。

任何帮助将不胜感激!

【问题讨论】:

  • 您是否尝试使用此 JDBC URL? jdbc:drill:drillbit=<drillbit-hostname>:31010
  • 我使用的是嵌入式模式,所以据我所知我不会启动钻头
  • 当您使用嵌入式模式时,您正在启动一个钻头,它只是这样做而不需要 Zookeeper 实例。
  • @vicenteg 在更改 JDBC URL 时显示此错误:找不到适合 dbc:drill:drillbit=localhost:31010 的驱动程序

标签: java jdbc apache-drill


【解决方案1】:

如果你连接到本地嵌入式实例(没有 Zookeeper),你应该直接使用 Drillbit 主机:

jdbc:drill:drillbit=<drillbit-host>:[port]

例如: jdbc:drill:drillbit=localhost

【讨论】:

  • 这对我在 Squirrel 和 SQLWorkbench 上也很有效
【解决方案2】:

TLDR: jdbc:drill:drillbit=localhost:31010

首先尝试使用 SQuirreL SQL 客户端。

我正在使用运行 linux 和 apache 的 vm 执行此操作,如果这一切都在一台主机上,您可以用 localhost 替换。

首先开始在您的虚拟机或主机上嵌入钻孔,例如:

/opt/apache-drill-1.1.0/bin/drill-embedded

这将启动嵌入式外壳。检查端口是否打开 - 它看起来与 Zookeeper 等的默认值不同:

sroot@localhost:/opt/apache-drill-1.1.0/bin [1089] netstat -anp | grep 31010

tcp 0 0 ::ffff:0.0.0.0:31010 :::* LISTEN 12934/java

你应该可以远程登录 localhost 31010 到这个端口。

您必须按照此处所述设置 jar 驱动程序: https://drill.apache.org/docs/using-jdbc-with-squirrel-on-windows/

确保带有驱动程序的 jar 是可执行的。

但使用以下内容修改字符串 - 没有 Zookeeper 的情况不同,例如在 squirrel 中应该看起来像这样(也感谢上面的其他答案

jdbc:drill:drillbit=localhost:31010

您可以用上面的 ip 替换 localhost - 然后测试连接。

我使用的jar是drill-jdbc-all-1.1.0.jar,类名是org.apache.drill.jdbc.Driver

example squirrel driver configuration

【讨论】:

    【解决方案3】:

    我认为您使用的 jar 不正确。看来您正在使用 jdbc-all-jar。有两个罐子。您需要添加另一个 jar 以使其工作。添加了maven pom。这应该会让你继续前进

    <dependency>
          <groupId>org.apache.drill.exec</groupId>
          <artifactId>drill-jdbc</artifactId>
          <version>1.1.0</version>
        </dependency>
    

    【讨论】:

    • java.lang.ClassNotFoundException: org.apache.drill.exec 现在。但它是新的东西!
    【解决方案4】:

    您需要在您的 java 项目中添加以下依赖项(我假设是基于 maven 的

    <dependency>
        <groupId>org.apache.drill.exec</groupId>
        <artifactId>drill-jdbc</artifactId>
        <version>1.4.0</version>
    </dependency>
    

    示例代码(假设你想在嵌入式模式下运行钻):

    Class.forName("org.apache.drill.jdbc.Driver");
    Connection connection =DriverManager.getConnection("jdbc:drill:zk=localhost");
    Statement st = connection.createStatement();
    ResultSet rs = st.executeQuery("SELECT * from cp.`employee`");
    while(rs.next()){
    System.out.println(rs.getString(1));
    }
    

    如果您已经开始钻探(假设钻探正在本地机器上运行)。然后你应该改变连接:

    Connection connection =DriverManager.getConnection("jdbc:drill:drillbit=localhost");
    

    查看示例项目:https://github.com/devender-yadav/DrillJDBC

    注意:我已经针对 Drill 1.2、1.3 和 1.4 进行了测试

    【讨论】:

    • 对于这两个选项,我是否需要明确开始练习?还是在第一个选项中它会以嵌入模式自动启动?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多