Presto サービスを含む E-MapReduce(EMR)クラスターを作成した後、Presto が提供する JDBC ドライバーを使用して Presto データベースに接続できます。その後、データベース内のデータに対して複雑なデータクエリ、分析、および処理操作を実行したり、クエリ結果を Java アプリケーションに統合したりできます。
Maven の pom.xml ファイルへの JDBC ドライバーの依存関係の追加
EMR クラスターのバージョンに基づいて、必要な Presto JDBC ドライバーの依存関係を pom.xml ファイルに追加できます。
コンポーネントバージョン | JDBC ドライバー | ドライバクラス名 |
0.2XX | | com.facebook.presto.jdbc.PrestoDriver |
Java バージョンは Java 8 以降である必要があり、すべてのユーザーに system.jdbc テーブルに対するクエリ権限が付与されている必要があります。
データベースへの接続
次の形式で指定された JDBC URL を使用してデータベースに接続できます。
jdbc:presto://<COORDINATOR>:<PORT>/[CATALOG]/[SCHEMA]JDBC URL の例:
jdbc:presto://master-1-1:8889 # デフォルトのカタログとデフォルトのスキーマを使用してデータベースに接続します。
jdbc:presto://master-1-1:8889/hive # hive という名前のカタログとデフォルトのスキーマを使用してデータベースに接続します。
jdbc:presto://master-1-1:8889/hive/default # hive という名前のカタログと default という名前のスキーマを使用してデータベースに接続します。JDBC 接続パラメーター
JDBC ドライバーはさまざまなパラメーターをサポートしています。次のいずれかの方法を使用して、パラメーターを DriverManager に渡すことができます。
パラメーターをプロパティとして DriverManager に渡します。
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 | 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。 |
SSLKeyStorePath | STRING | キーストアファイルを保存するために使用されるパス。 |
SSLKeyStorePassword | STRING | キーストアファイルにアクセスするために使用されるパスワード。 |
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:presto://<マスターノードの名前>:8889/hive/default";
Properties properties = new Properties();
properties.setProperty("user", "presto");
// 接続オブジェクトを作成します。
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
}
}
}参照
単純なクエリのみを実行する場合は、CLI を使用して Presto に接続することをお勧めします。詳細については、「CLI を使用して Presto に接続する」をご参照ください。