You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by Denys Pavlov <de...@gmail.com> on 2015/01/29 17:14:57 UTC

Re: Using Drill with JDBC hangs

It should work with a local/embedded drill as well, as the tests for the
JDBC driver run against a local drill instance. I'm adding the dev mailing
list to this thread in the hopes that someone can help me understand what
the properties set on this line
<https://github.com/apache/drill/blob/e3ab2c1760ad34bda80141e2c3108f7eda7c9104/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java#L53-53>
are doing exactly, as that seems to be the only difference between my
snippet and the tests. Should I be setting them if I want to use Drill in
embedded/local mode over JDBC? Is there a way to generate the models file
<https://github.com/apache/drill/blob/e3ab2c1760ad34bda80141e2c3108f7eda7c9104/exec/jdbc/src/test/resources/test-models.json>
?

Any help is appreciated!

Denys

On Wed, Jan 28, 2015 at 5:55 PM, Carol McDonald <cm...@maprtech.com>
wrote:

> I think jdbc requires zookeeper (?). The following works with drill on the
> mapr sandbox:
>
>     public static void main(String[] args) throws Exception {
>         String driver = "org.apache.drill.jdbc.Driver";
>         String url =
> "jdbc:drill:zk=maprdemo:5181/drill/demo_mapr_com-drillbits";
>         String username = "mapr";
>         String password = "mapr";
>         Class.forName(driver);
>         Connection con = DriverManager.getConnection(url, username,
> password);
>         Statement stmt = con.createStatement();
>         ResultSet rs = stmt.executeQuery("SELECT * FROM dfs.views.custview
> limit 5");
>         ResultSetMetaData rsmd = rs.getMetaData();
>         int numberOfColumns = rsmd.getColumnCount();
>
>         for (int i = 1; i <= numberOfColumns; i++) {
>             System.out.print(rsmd.getColumnName(i) + "  ");
>         }
>         System.out.println("");
>
>         while (rs.next()) {
>             for (int i = 1; i <= numberOfColumns; i++) {
>                 System.out.print(rs.getString(i)+ "  ");
>             }
>             System.out.println("");
>         }
>         stmt.close();
>         con.close();
>     }
>
> }
>
> On Wed, Jan 28, 2015 at 5:39 PM, Denys Pavlov <de...@gmail.com>
> wrote:
>
> > Hi all,
> >
> > I am trying to use Drill programmatically in Java through the JDBC
> driver.
> > However, when I try to execute the query, the application hangs and never
> > returns the ResultSet. When I execute the exact same query in sqlline,
> > everything executes fine.
> >
> > The code snippet is below and should work with no configuration in
> > /tmp/drill.
> >
> > public class DrillJDBCTestTrial {
> >     public static void main(String[] args) throws SQLException,
> > ClassNotFoundException {
> >         Class.forName("org.apache.drill.jdbc.Driver");
> >         Connection connection =
> > DriverManager.getConnection("jdbc:drill:zk=local");
> >         String query = "select N_NAME from
> >
> >
> dfs.`/home/meatcar/dev/drill/apache-drill-0.7.0/sample-data/nation.parquet`";
> >
> >         PreparedStatement statement = connection.prepareStatement(query);
> >
> >         // hangs here
> >         ResultSet rs = statement.executeQuery();
> >     }
> > }
> >
> > Any help is appreciated.
> >
> >
> > Thanks,
> >
> > --
> > Denys Pavlov
> >
>



-- 
Denys Pavlov

Re: Using Drill with JDBC hangs

Posted by Jacques Nadeau <ja...@apache.org>.
The JDBC driver provided in the packaged 'jars/jdbc-driver/' directory
doesn't support embedded mode (zk=local).  If you want to run with that
functionality, you need to do so by sourcing the classpath that the
Drillbit uses (which includes a large number of additional classes and
libraries).  The jdbc-driver jar file is only for remote connection
Drillbits.  The entry point and code doesn't change thus the unit tests you
observed.

On Thu, Jan 29, 2015 at 8:14 AM, Denys Pavlov <de...@gmail.com>
wrote:

> It should work with a local/embedded drill as well, as the tests for the
> JDBC driver run against a local drill instance. I'm adding the dev mailing
> list to this thread in the hopes that someone can help me understand what
> the properties set on this line
> <
> https://github.com/apache/drill/blob/e3ab2c1760ad34bda80141e2c3108f7eda7c9104/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java#L53-53
> >
> are doing exactly, as that seems to be the only difference between my
> snippet and the tests. Should I be setting them if I want to use Drill in
> embedded/local mode over JDBC? Is there a way to generate the models file
> <
> https://github.com/apache/drill/blob/e3ab2c1760ad34bda80141e2c3108f7eda7c9104/exec/jdbc/src/test/resources/test-models.json
> >
> ?
>
> Any help is appreciated!
>
> Denys
>
> On Wed, Jan 28, 2015 at 5:55 PM, Carol McDonald <cm...@maprtech.com>
> wrote:
>
> > I think jdbc requires zookeeper (?). The following works with drill on
> the
> > mapr sandbox:
> >
> >     public static void main(String[] args) throws Exception {
> >         String driver = "org.apache.drill.jdbc.Driver";
> >         String url =
> > "jdbc:drill:zk=maprdemo:5181/drill/demo_mapr_com-drillbits";
> >         String username = "mapr";
> >         String password = "mapr";
> >         Class.forName(driver);
> >         Connection con = DriverManager.getConnection(url, username,
> > password);
> >         Statement stmt = con.createStatement();
> >         ResultSet rs = stmt.executeQuery("SELECT * FROM
> dfs.views.custview
> > limit 5");
> >         ResultSetMetaData rsmd = rs.getMetaData();
> >         int numberOfColumns = rsmd.getColumnCount();
> >
> >         for (int i = 1; i <= numberOfColumns; i++) {
> >             System.out.print(rsmd.getColumnName(i) + "  ");
> >         }
> >         System.out.println("");
> >
> >         while (rs.next()) {
> >             for (int i = 1; i <= numberOfColumns; i++) {
> >                 System.out.print(rs.getString(i)+ "  ");
> >             }
> >             System.out.println("");
> >         }
> >         stmt.close();
> >         con.close();
> >     }
> >
> > }
> >
> > On Wed, Jan 28, 2015 at 5:39 PM, Denys Pavlov <de...@gmail.com>
> > wrote:
> >
> > > Hi all,
> > >
> > > I am trying to use Drill programmatically in Java through the JDBC
> > driver.
> > > However, when I try to execute the query, the application hangs and
> never
> > > returns the ResultSet. When I execute the exact same query in sqlline,
> > > everything executes fine.
> > >
> > > The code snippet is below and should work with no configuration in
> > > /tmp/drill.
> > >
> > > public class DrillJDBCTestTrial {
> > >     public static void main(String[] args) throws SQLException,
> > > ClassNotFoundException {
> > >         Class.forName("org.apache.drill.jdbc.Driver");
> > >         Connection connection =
> > > DriverManager.getConnection("jdbc:drill:zk=local");
> > >         String query = "select N_NAME from
> > >
> > >
> >
> dfs.`/home/meatcar/dev/drill/apache-drill-0.7.0/sample-data/nation.parquet`";
> > >
> > >         PreparedStatement statement =
> connection.prepareStatement(query);
> > >
> > >         // hangs here
> > >         ResultSet rs = statement.executeQuery();
> > >     }
> > > }
> > >
> > > Any help is appreciated.
> > >
> > >
> > > Thanks,
> > >
> > > --
> > > Denys Pavlov
> > >
> >
>
>
>
> --
> Denys Pavlov
>

Re: Using Drill with JDBC hangs

Posted by Jacques Nadeau <ja...@apache.org>.
The JDBC driver provided in the packaged 'jars/jdbc-driver/' directory
doesn't support embedded mode (zk=local).  If you want to run with that
functionality, you need to do so by sourcing the classpath that the
Drillbit uses (which includes a large number of additional classes and
libraries).  The jdbc-driver jar file is only for remote connection
Drillbits.  The entry point and code doesn't change thus the unit tests you
observed.

On Thu, Jan 29, 2015 at 8:14 AM, Denys Pavlov <de...@gmail.com>
wrote:

> It should work with a local/embedded drill as well, as the tests for the
> JDBC driver run against a local drill instance. I'm adding the dev mailing
> list to this thread in the hopes that someone can help me understand what
> the properties set on this line
> <
> https://github.com/apache/drill/blob/e3ab2c1760ad34bda80141e2c3108f7eda7c9104/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java#L53-53
> >
> are doing exactly, as that seems to be the only difference between my
> snippet and the tests. Should I be setting them if I want to use Drill in
> embedded/local mode over JDBC? Is there a way to generate the models file
> <
> https://github.com/apache/drill/blob/e3ab2c1760ad34bda80141e2c3108f7eda7c9104/exec/jdbc/src/test/resources/test-models.json
> >
> ?
>
> Any help is appreciated!
>
> Denys
>
> On Wed, Jan 28, 2015 at 5:55 PM, Carol McDonald <cm...@maprtech.com>
> wrote:
>
> > I think jdbc requires zookeeper (?). The following works with drill on
> the
> > mapr sandbox:
> >
> >     public static void main(String[] args) throws Exception {
> >         String driver = "org.apache.drill.jdbc.Driver";
> >         String url =
> > "jdbc:drill:zk=maprdemo:5181/drill/demo_mapr_com-drillbits";
> >         String username = "mapr";
> >         String password = "mapr";
> >         Class.forName(driver);
> >         Connection con = DriverManager.getConnection(url, username,
> > password);
> >         Statement stmt = con.createStatement();
> >         ResultSet rs = stmt.executeQuery("SELECT * FROM
> dfs.views.custview
> > limit 5");
> >         ResultSetMetaData rsmd = rs.getMetaData();
> >         int numberOfColumns = rsmd.getColumnCount();
> >
> >         for (int i = 1; i <= numberOfColumns; i++) {
> >             System.out.print(rsmd.getColumnName(i) + "  ");
> >         }
> >         System.out.println("");
> >
> >         while (rs.next()) {
> >             for (int i = 1; i <= numberOfColumns; i++) {
> >                 System.out.print(rs.getString(i)+ "  ");
> >             }
> >             System.out.println("");
> >         }
> >         stmt.close();
> >         con.close();
> >     }
> >
> > }
> >
> > On Wed, Jan 28, 2015 at 5:39 PM, Denys Pavlov <de...@gmail.com>
> > wrote:
> >
> > > Hi all,
> > >
> > > I am trying to use Drill programmatically in Java through the JDBC
> > driver.
> > > However, when I try to execute the query, the application hangs and
> never
> > > returns the ResultSet. When I execute the exact same query in sqlline,
> > > everything executes fine.
> > >
> > > The code snippet is below and should work with no configuration in
> > > /tmp/drill.
> > >
> > > public class DrillJDBCTestTrial {
> > >     public static void main(String[] args) throws SQLException,
> > > ClassNotFoundException {
> > >         Class.forName("org.apache.drill.jdbc.Driver");
> > >         Connection connection =
> > > DriverManager.getConnection("jdbc:drill:zk=local");
> > >         String query = "select N_NAME from
> > >
> > >
> >
> dfs.`/home/meatcar/dev/drill/apache-drill-0.7.0/sample-data/nation.parquet`";
> > >
> > >         PreparedStatement statement =
> connection.prepareStatement(query);
> > >
> > >         // hangs here
> > >         ResultSet rs = statement.executeQuery();
> > >     }
> > > }
> > >
> > > Any help is appreciated.
> > >
> > >
> > > Thanks,
> > >
> > > --
> > > Denys Pavlov
> > >
> >
>
>
>
> --
> Denys Pavlov
>