全部產品
Search
文件中心

:通過JDBC方式串連Trino

更新時間:Jul 01, 2024

建立了包含Trino服務的叢集後,如果您需要進行複雜的資料查詢、分析和處理操作,或者需要將查詢結果集成到Java應用程式中,則可以使用Trino提供的JDBC Driver串連資料庫。

在Maven中引入JDBC Driver

您需要根據您的E-MapReduce叢集版本,在pom.xml檔案中添加相應的依賴來引入Presto或Trino JDBC Driver。

EMR版本

組件版本

JDBC Driver

Driver類名

  • EMR-3.x系列:EMR-3.38.0及以上

  • EMR-5.x系列:EMR-5.5.0及以上

3XX

<dependency>
    <groupId>io.trino</groupId>
    <artifactId>trino-jdbc</artifactId>
    <version>3XX</version>
</dependency>

io.trino.jdbc.TrinoDriver

  • EMR-3.x系列:EMR-3.25.0~EMR-3.37.x

  • EMR-4.x系列:EMR-4.3.0~EMR-4.9.0

  • EMR-5.x系列:EMR-5.2.1~EMR-5.4.3

3XX

<dependency>
    <groupId>io.prestosql</groupId>
    <artifactId>presto-jdbc</artifactId>
    <version>3XX</version>
</dependency>

io.prestosql.jdbc.PrestoDriver

其他EMR版本

0.2XX

<dependency>
    <groupId>com.facebook.presto</groupId>
    <artifactId>presto-jdbc</artifactId>
    <version>0.2XX</version>
</dependency>

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時報錯Authentication failed: Basic authentication or X-Trino-User must be sent

通常,此錯誤是由於JDBC版本與Trino不匹配引起的。為了避免此問題,請確保使用與您正在串連的Trino版本相容的JDBC驅動程式。

相關文檔

如果您只是進行簡單的資料查詢操作,建議使用命令列的方式串連Trino,詳情請參見通過命令列方式串連Trino