Apache Drill - 以嵌入式模式连接到 Drill [java]
Posted
技术标签:
【中文标题】Apache Drill - 以嵌入式模式连接到 Drill [java]【英文标题】:Apache Drill - connection to Drill in Embedded Mode [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 的驱动程序
【参考方案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 进行了测试
【讨论】:
对于这两个选项,我是否需要明确开始练习?还是在第一个选项中它会以嵌入模式自动启动?以上是关于Apache Drill - 以嵌入式模式连接到 Drill [java]的主要内容,如果未能解决你的问题,请参考以下文章
为啥在嵌入式模式下尝试启动 apache Drill 时出现错误?
apache钻java.lang.NullPointerException
Apache Drill 0.9 和 SQuirreL SQL 客户端 - 无法列出 JDBC 驱动程序