本文为您介绍如何使用Presto提供的JDBC Driver连接数据库。Java应用可以使用Presto提供的JDBC Driver连接数据库。

在Maven中引入Presto JDBC Driver

您可以根据E-MapReduce集群中Presto的版本,在 pom.xml中添加如下配置引入Presto JDBC Driver:
  • 当Presto版本是3XX时:
    <dependency>
        <groupId>io.prestosql</groupId>
        <artifactId>presto-jdbc</artifactId>
        <version>3XX</version>
    </dependency>
  • 当Presto版本是0.2XX时:
    <dependency>
        <groupId>com.facebook.presto</groupId>
        <artifactId>presto-jdbc</artifactId>
        <version>0.2XX</version>
    </dependency>

Driver类名

当Presto版本不同时,对应的Driver类如下:
  • 当Presto版本是3XX时,Presto JDBC Driver类为io.prestosql.jdbc.PrestoDriver
  • 当Presto版本是0.2XX时,Presto JDBC Driver类为com.facebook.presto.jdbc.PrestoDriver

连接数据库

您可以通过如下格式,使用Presto提供的JDBC Driver连接数据库。
jdbc:presto://<COORDINATOR>:<PORT>/[CATALOG]/[SCHEMA]
连接示例如下:
jdbc:presto://emr-header-1:9090               # 连接数据库,使用Catalog和Schema。
jdbc:presto://emr-header-1:9090/hive          # 连接数据库,使用Catalog(hive)和Schema。
jdbc:presto://emr-header-1:9090/hive/default  # 连接数据库,使用Catalog(hive)和Schema(default)。

连接参数

Presto JDBC Driver支持很多参数,参数的传入方式示例如下:
  • 通过Properties对象传入。
    String url = "jdbc:presto://emr-header-1:9090/hive/default";
    Properties properties = new Properties();
    properties.setProperty("user", "hadoop");
    Connection connection = DriverManager.getConnection(url, properties);
    ......
  • 通过URL传入。
    String url = "jdbc:presto://emr-header-1:9090/hive/default?user=hadoop";
    Connection connection = DriverManager.getConnection(url);
    ......
各参数说明如下。
参数名称 格式 参数说明
user STRING 用户名。
password STRING 密码。
socksProxy STRING:NUMBER SOCKS代理服务器地址。例如localhost:1080
httpProxy STRING:NUMBER HTTP代理服务器地址。例如localhost:8888
SSL BOOLEAN 是否使用HTTPS连接。默认为false。
SSLTrustStorePath STRING Java TrustStore文件路径。
SSLTrustStorePassword STRING Java TrustStore密码。
KerberosRemoteServiceName STRING Kerberos服务名称。
KerberosPrincipal STRING Kerberos Principal。
KerberosUseCanonicalHostname BOOLEAN 是否使用规范化主机名。默认为false。
KerberosConfigPath STRING Kerberos配置文件路径。
KerberosKeytabPath STRING Kerberos KeyTab文件路径。
KerberosCredentialCachePath STRING Kerberos Credential缓存路径。

示例

Java使用Presto提供的JDBC Driver连接数据库的示例如下。
.....
// 加载JDBC Driver类。
try {
    Class.forName("com.facebook.presto.jdbc.PrestoDriver");
} catch(ClassNotFoundException e) {
    LOG.ERROR("Failed to load presto jdbc driver.", e);
    System.exit(-1);
}
Connection connection = null;
Statement statement = null;
try {
    String url = "jdbc:presto://emr-header-1:9090/hive/default";
    Properties properties = new Properties();
    properties.setProperty("user", "hadoop");
    // 创建连接对象。
    connection = DriverManager.getConnection(url, properties);
    // 创建Statement对象。
    statement = connection.createStatement();
    // 执行查询。
    ResultSet rs = statement.executeQuery("select * from t1");
    // 获取结果。
    int columnNum = rs.getMetaData().getColumnCount();
    int rowIndex = 0;
    while (rs.next()) {
        rowIndex++;
        for(int i = 1; i <= columnNum; i++) {
            System.out.println("Row " + rowIndex + ", Column " + i + ": " + rs.getInt(i));
        }
    }
} catch(SQLException e) {
    LOG.ERROR("Exception thrown.", e);
} finally {
  // 销毁Statement对象。
  if (statement != null) {
      try {
        statement.close();
    } catch(Throwable t) {
        // No-ops
    }
  }
  // 关闭连接。
  if (connection != null) {
      try {
        connection.close();
    } catch(Throwable t) {
        // No-ops
    }
  }
}