すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:TrinoへのJDBC接続

最終更新日:Jan 11, 2025

Trinoサービスを含むE-MapReduce(EMR)クラスターを作成した後、Trinoが提供するJDBCドライバーを使用してTrinoデータベースに接続できます。その後、データベース内のデータに対して複雑なデータクエリ、分析、および処理操作を実行したり、クエリ結果をJavaアプリケーションに統合したりできます。

Mavenのpom.xmlファイルにJDBCドライバーの依存関係を追加する

EMRクラスターのバージョンに基づいて、PrestoまたはTrino JDBCドライバーの必要な依存関係をpom.xmlファイルに追加できます。

EMRバージョン

コンポーネントバージョン

JDBCドライバー

ドライバクラス名

  • EMR 3.Xシリーズ: EMR V3.38.0以降

  • EMR 5.Xシリーズ: EMR V5.5.0以降

3XX

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

io.trino.jdbc.TrinoDriver

  • EMR 3.Xシリーズ: EMR V3.25.0~EMR V3.37.X

  • EMR 4.Xシリーズ: EMR V4.3.0~EMR V4.9.0

  • EMR 5.Xシリーズ: EMR V5.2.1~EMR V5.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クラスターがV3.38.0以降のマイナーバージョン、またはV5.5.0以降のマイナーバージョンの場合、次の形式で指定されたJDBC URLを使用してデータベースに接続できます。

    jdbc:trino://<COORDINATOR>:<PORT>/[CATALOG]/[SCHEMA]

    パラメーターの説明:

    • <COORDINATOR>: クラスター内のマスターノードの名前またはIPアドレス。

    • <PORT>: Trinoのポート番号。

    • [CATALOG]: 接続先のTrinoデータベースのカタログ名。このパラメーターはオプションです。

    • [SCHEMA]: 接続先のTrinoデータベースのスキーマ名。このパラメーターはオプションです。

    JDBC URLの例:

    jdbc:trino://<Name of the master node>:9090               # デフォルトのカタログとデフォルトのスキーマを使用してデータベースに接続します。
    jdbc:trino://<Name of the master node>:9090/hive          # hiveという名前のカタログとデフォルトのスキーマを使用してデータベースに接続します。
    jdbc:trino://<Name of the master node>:9090/hive/default  # hiveという名前のカタログとdefaultという名前のスキーマを使用してデータベースに接続します。
    説明

    JDBC URLの<Name of the master node>を、クラスター内のマスターノードの実際の名前に置き換えます。

    • DataLakeクラスターの場合、マスターノードの名前はmaster-1-1です。

    • Hadoopクラスターの場合、マスターノードの名前はemr-header-1です。

  • 別のEMRバージョンのクラスターを使用する場合は、次の形式で指定されたJDBC URLを使用してデータベースに接続できます。

    jdbc:presto://<COORDINATOR>:<PORT>/[CATALOG]/[SCHEMA]

    JDBC URLの例:

    jdbc:presto://<Name of the master node>:9090               # デフォルトのカタログとデフォルトのスキーマを使用してデータベースに接続します。
    jdbc:presto://<Name of the master node>:9090/hive          # hiveという名前のカタログとデフォルトのスキーマを使用してデータベースに接続します。
    jdbc:presto://<Name of the master node>:9090/hive/default  # hiveという名前のカタログとdefaultという名前のスキーマを使用してデータベースに接続します。

JDBC接続パラメーター

JDBCドライバーはさまざまなパラメーターをサポートしています。次のいずれかの方法を使用して、パラメーターをDriverManagerに渡すことができます。

  • プロパティとしてパラメーターをDriverManagerに渡します。

    • V3.38.0以降のマイナーバージョン、またはV5.5.0以降のマイナーバージョンのEMRクラスター

      String url = "jdbc:trino://<Name of the master node>:9090/hive/default";
      Properties properties = new Properties();
      properties.setProperty("user", "hadoop");
      Connection connection = DriverManager.getConnection(url, properties);
      // ...... データベースに対する操作を実行します。
    • 別のバージョンのEMRクラスター

      String url = "jdbc:presto://<Name of the master node>:9090/hive/default";
      Properties properties = new Properties();
      properties.setProperty("user", "hadoop");
      Connection connection = DriverManager.getConnection(url, properties);
      // ...... データベースに対する操作を実行します。
  • URLパラメーターとしてパラメーターを渡します。

    • V3.38.0以降のマイナーバージョン、またはV5.5.0以降のマイナーバージョンのEMRクラスター

      String url = "jdbc:trino://<Name of the master node>:9090/hive/default?user=hadoop";
      Connection connection = DriverManager.getConnection(url);
      // ...... データベースに対する操作を実行します。
    • 別のバージョンのEMRクラスター

      String url = "jdbc:presto://<Name of the master node>:9090/hive/default?user=hadoop";
      Connection connection = DriverManager.getConnection(url);
      // ...... データベースに対する操作を実行します。

次の表は、一般的なパラメーターについて説明しています。

パラメーター

データ型

説明

user

STRING

ID認証と承認に使用されるユーザー名。

password

STRING

Lightweight Directory Access Protocol (LDAP) 認証に使用されるパスワード。

socksProxy

STRING:NUMBER

SOCKSプロキシサーバーのアドレスとポート。例: localhost:1080。

httpProxy

STRING:NUMBER

HTTPプロキシサーバーのアドレスとポート。例: localhost:8888。

SSL

BOOLEAN

JavaアプリケーションがHTTPSに基づいてデータベースに接続するためにSSLを有効にするかどうかを指定します。デフォルト値: false。

SSLTrustStorePath

STRING

Javaトラストストアファイルを格納するために使用されるパス。

SSLTrustStorePassword

STRING

Javaトラストストアファイルにアクセスするために使用されるパスワード。

KerberosRemoteServiceName

STRING

Kerberosサービスの名前。

KerberosPrincipal

STRING

Kerberosプリンシパルの名前。

KerberosUseCanonicalHostname

BOOLEAN

正規ホスト名を使用するかどうかを指定します。デフォルト値: false。

KerberosConfigPath

STRING

Kerberos構成ファイルを格納するために使用されるパス。

KerberosKeytabPath

STRING

Kerberosキータブファイルを格納するために使用されるパス。

KerberosCredentialCachePath

STRING

Kerberos資格情報キャッシュを格納するために使用されるパス。

次のコードは、JDBCドライバーを使用してデータベースに接続する方法を示しています。

.....
Connection connection = null;
Statement statement = null;
try {
    // コンポーネントのJDBC URL。
    String url = "jdbc:<trino/presto>://<Name of the master node>:9090/hive/default";
    Properties properties = new Properties();
    properties.setProperty("user", "hadoop");
    // 接続オブジェクトを作成します。
    connection = DriverManager.getConnection(url, properties);
    // ステートメントオブジェクトを作成します。
    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("例外がスローされました。", e);
} finally {
  // ステートメントオブジェクトを破棄します。
  if (statement != null) {
      try {
        statement.close();
    } catch(Throwable t) {
        // No-ops
    }
  }
  // 接続を閉じます。
  if (connection != null) {
      try {
        connection.close();
    } catch(Throwable t) {
        // No-ops
    }
  }
}

FAQ

JDBCドライバーを使用してデータベースに接続すると、Authentication failed: Basic authentication or X-Trino-User must be sentというエラーメッセージが表示されます。どうすればよいですか?

ほとんどの場合、このエラーは、JDBCドライバーのバージョンがTrinoのバージョンと一致しないために発生します。このエラーを修正するには、接続先のTrinoのバージョンと互換性のあるJDBCドライバーを使用します。

関連情報

単純なクエリのみを実行する場合は、CLIを使用してTrinoに接続することをお勧めします。詳細については、「CLIを使用してTrinoに接続する」をご参照ください。