Apache Drill - 与嵌入式模式下钻取的连接[java]

时间:2015-07-27 13:38:31

标签: java jdbc apache-drill

我想通过Java应用程序连接到Drill,到目前为止,我尝试使用JDBC来执行此操作,并且我正在使用https://developers.facebook.com/docs/apps/changelog#v2_0中的示例,但是...... 当我将DB_URL静态变量更改为“jdbc:drill:zk = local”并启动应用程序时会出现异常:

  

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

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

网上真的没什么关系。

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:8)

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

// VER: 0.1

/* OVERRIDDEN BOOTSTRAP VARIABLES */
$icon-font-path: "../fonts/bootstrap/";

/* STANDARD INCLUDES */
@import "bootstrap-compass";
@import "bootstrap-sprockets";
@import "bootstrap";
@import "compass/css3";

/* CUSTOM FONT IMPORT */
@include font-face(
  "Nexa Heavy",
  inline-font-files(
    '../fonts/nexa-webfont/nexaheavy-webfont.woff', woff,
    '../fonts/nexa-webfont/nexaheavy-webfont.ttf', ttf,
    '../fonts/nexa-webfont/nexaheavy-webfont.svg', svg),
    '../fonts/nexa-webfont/nexaheavy-webfont.eot',
  normal, // font-weight
  normal  // font-style
);


/* CUSTOM INCLUDES */
@import "custom-variables";
@import "common";
@import "navigation";
@import "footer";

@import "pages/home";

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

答案 1 :(得分:6)

TLDR: 的 JDBC:钻头:钻头=本地主机: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是可执行的。

但是用下面的字符串修改字符串 - 没有zookeeper就不一样了,例如在squirrel中应该看起来像这样(感谢上面的其他答案)

<强> JDBC:钻头:钻头=本地主机:31010

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

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

example squirrel driver configuration

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

您需要在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进行了测试