Apache Drill – 与嵌入式模式下钻取的连接

我想通过Java应用程序连接到Drill,到目前为止我尝试使用JDBC来执行此操作,并且我使用的是https://github.com/vicenteg/DrillJDBCExample中的示例,但是…当我更改DB_URL静态时变量为“jdbc:drill:zk = local”并启动app我得到exception:

java.sql.SQLNonTransientConnectionException:不支持使用Drill的jdbc-all JDBC驱动程序Jar文件在嵌入模式下运行钻取。

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

网上真的没什么关系。

任何帮助,将不胜感激!

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

 jdbc:drill:drillbit=:[port] 

例如: jdbc:drill:drillbit=localhost

TLDR: jdbc:drill:drillbit = localhost:31010

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

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

首先在你的虚拟机或主机上开始钻取,例如:

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

这将启动嵌入式shell。 检查端口是否打开 – 它看起来与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 telnet到此端口。

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

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

但修改下面的字符串 – 没有动物园管理员的不同,例如松鼠应该看起来像这样(感谢上面的其他答案)

JDBC:钻头:钻头=本地主机:31010

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

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

示例松鼠驱动程序配置

我不认为你使用正确的jar子。 看来你正在使用jdbc-all-jar。 有两个jar子。 您需要添加其他jar才能使其正常工作。 添加了maven pom。 这应该让你去

  org.apache.drill.exec drill-jdbc 1.1.0  

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

  org.apache.drill.exec drill-jdbc 1.4.0  

示例代码( 假设您要在嵌入模式下运行钻取 ):

 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

注意:我已经为钻头1.2,1.3和1.4测试了这个