創建了包含Presto服務的集群后,如果您需要進行復雜的數據查詢、分析和處理操作,或者需要將查詢結果集成到Java應用程序中,則可以使用Presto提供的JDBC Driver連接數據庫。
在Maven中引入JDBC Driver
您需要根據您的E-MapReduce集群版本,在pom.xml
文件中添加相應的依賴來引入Presto JDBC Driver。
組件版本 | JDBC Driver | Driver類名 |
0.2XX |
| com.facebook.presto.jdbc.PrestoDriver |
其中,Java版本需要為Java 8或更高版本,且所有使用者都需被授予system.jdbc
表的查詢權限。
數據庫連接
您可以通過如下JDBC URL,使用JDBC Driver連接數據庫。
jdbc:presto://<COORDINATOR>:<PORT>/[CATALOG]/[SCHEMA]
連接示例如下所示。
jdbc:presto://master-1-1:8889 # 連接數據庫,使用Catalog和Schema。
jdbc:presto://master-1-1:8889/hive # 連接數據庫,使用Catalog(hive)和Schema。
jdbc:presto://master-1-1:8889/hive/default # 連接數據庫,使用Catalog(hive)和Schema(default)。
連接參數
JDBC Driver支持多種配置參數,這些參數可以通過以下兩種方式傳入:
使用Properties對象。
String url = "jdbc:presto://<主節點名稱>:8889/hive/default"; Properties properties = new Properties(); properties.setProperty("user", "presto"); Connection connection = DriverManager.getConnection(url, properties); //......進行數據庫操作
直接在URL中指定。
String url = "jdbc:presto://<主節點名稱>:8889/hive/default?user=presto"; Connection connection = DriverManager.getConnection(url); //......進行數據庫操作
常用參數說明如下。
參數名稱 | 格式 | 參數說明 |
user | STRING | 用于身份驗證和授權的用戶名。 |
password | STRING | 用于LDAP身份驗證的密碼。 |
socksProxy | STRING:NUMBER | SOCKS代理服務器地址。例如localhost:1080。 |
httpProxy | STRING:NUMBER | HTTP代理服務器地址。例如localhost:8888。 |
SSL | BOOLEAN | 是否使用HTTPS連接。默認值為false。 |
SSLKeyStorePath | STRING | 存儲KeyStore文件的路徑。 |
SSLKeyStorePassword | STRING | KeyStore的訪問密碼。 |
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使用JDBC Driver連接數據庫的示例代碼。
Connection connection = null;
Statement statement = null;
try {
// 根據組件名稱使用正確的JDBC URL。
String url = "jdbc:presto://<主節點名稱>:8889/hive/default";
Properties properties = new Properties();
properties.setProperty("user", "presto");
// 創建連接對象。
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
}
}
}
相關文檔
如果您只是進行簡單的數據查詢操作,建議使用命令行的方式訪問Presto,詳情請參見通過命令行方式訪問Presto。