Trinoサービスを含むE-MapReduce(EMR)クラスターを作成した後、Trinoが提供するJDBCドライバーを使用してTrinoデータベースに接続できます。その後、データベース内のデータに対して複雑なデータクエリ、分析、および処理操作を実行したり、クエリ結果をJavaアプリケーションに統合したりできます。
Mavenのpom.xmlファイルにJDBCドライバーの依存関係を追加する
EMRクラスターのバージョンに基づいて、PrestoまたはTrino JDBCドライバーの必要な依存関係をpom.xmlファイルに追加できます。
EMRバージョン | コンポーネントバージョン | JDBCドライバー | ドライバクラス名 |
| 3XX | | io.trino.jdbc.TrinoDriver |
| 3XX | | io.prestosql.jdbc.PrestoDriver |
その他のEMRバージョン | 0.2XX | | 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
関連情報
単純なクエリのみを実行する場合は、CLIを使用してTrinoに接続することをお勧めします。詳細については、「CLIを使用してTrinoに接続する」をご参照ください。