建立了包含Trino服務的叢集後,如果您需要進行複雜的資料查詢、分析和處理操作,或者需要將查詢結果集成到Java應用程式中,則可以使用Trino提供的JDBC Driver串連資料庫。
在Maven中引入JDBC Driver
您需要根據您的E-MapReduce叢集版本,在pom.xml檔案中添加相應的依賴來引入Presto或Trino JDBC Driver。
EMR版本 | 組件版本 | JDBC Driver | Driver類名 |
| 3XX |
| io.trino.jdbc.TrinoDriver |
| 3XX |
| io.prestosql.jdbc.PrestoDriver |
其他EMR版本 | 0.2XX |
| com.facebook.presto.jdbc.PrestoDriver |
串連資料庫
當EMR叢集為EMR-3.38.0及以上版本或EMR-5.5.0及以上版本時,您可以通過如下JDBC URL,使用JDBC Driver串連資料庫。
jdbc:trino://<COORDINATOR>:<PORT>/[CATALOG]/[SCHEMA]
其中,各參數含義如下:
<COORDINATOR>
:指定Trino叢集中主節點的名稱或IP地址。<PORT>
:指定Trino服務的連接埠號碼。[CATALOG]
:可選項,指定要串連的Trino資料庫的Catalog名稱。[SCHEMA]
:可選項,指定要串連的Trino資料庫的Schema名稱。
串連樣本如下所示。
jdbc:trino://<主節點名稱>:9090 # 串連資料庫,使用預設的Catalog和Schema。 jdbc:trino://<主節點名稱>:9090/hive # 串連資料庫,使用名為hive的Catalog和預設的Schema。 jdbc:trino://<主節點名稱>:9090/hive/default # 串連資料庫,使用名為hive的Catalog和名為default的Schema。
說明本文樣本中的
<主節點名稱>
,請根據您叢集的實際資訊修改。DataLake叢集:主節點名稱為master-1-1。
Hadoop叢集:主節點名稱為emr-header-1。
其餘版本時,您可以通過如下JDBC URL,使用JDBC Driver串連資料庫。
jdbc:presto://<COORDINATOR>:<PORT>/[CATALOG]/[SCHEMA]
串連樣本如下所示。
jdbc:presto://<主節點名稱>:9090 # 串連資料庫,使用預設的Catalog和Schema。 jdbc:presto://<主節點名稱>:9090/hive # 串連資料庫,使用名為hive的Catalog和預設的Schema。 jdbc:presto://<主節點名稱>:9090/hive/default # 串連資料庫,使用名為hive的Catalog和名為default的Schema。
串連參數
JDBC Driver支援多種配置參數,這些參數可以通過以下兩種方式傳入:
使用Properties對象。
EMR叢集為EMR-3.38.0及以上版本或EMR-5.5.0及以上版本
String url = "jdbc:trino://<主節點名稱>:9090/hive/default"; Properties properties = new Properties(); properties.setProperty("user", "hadoop"); Connection connection = DriverManager.getConnection(url, properties); //......進行資料庫操作
其餘版本
String url = "jdbc:presto://<主節點名稱>:9090/hive/default"; Properties properties = new Properties(); properties.setProperty("user", "hadoop"); Connection connection = DriverManager.getConnection(url, properties); //......進行資料庫操作
直接在URL中指定。
EMR叢集為EMR-3.38.0及以上版本或EMR-5.5.0及以上版本
String url = "jdbc:trino://<主節點名稱>:9090/hive/default?user=hadoop"; Connection connection = DriverManager.getConnection(url); //......進行資料庫操作
其餘版本
String url = "jdbc:presto://<主節點名稱>:9090/hive/default?user=hadoop"; Connection connection = DriverManager.getConnection(url); //......進行資料庫操作
常用參數說明如下。
參數名稱 | 格式 | 參數說明 |
user | STRING | 用於身分識別驗證和授權的使用者名稱。 |
password | STRING | 用於LDAP身分識別驗證的密碼。 |
socksProxy | STRING:NUMBER | SOCKSProxy 伺服器地址。例如localhost:1080。 |
httpProxy | STRING:NUMBER | HTTPProxy 伺服器地址。例如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使用JDBC Driver串連資料庫的範例程式碼。
.....
Connection connection = null;
Statement statement = null;
try {
// 根據組件名稱使用正確的JDBC URL。
String url = "jdbc:<trino/presto>://<主節點名稱>: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
}
}
}
常見問題
相關文檔
如果您只是進行簡單的資料查詢操作,建議使用命令列的方式串連Trino,詳情請參見通過命令列方式串連Trino。