Connectez-vous à une base de données Presto dans un cluster E-MapReduce (EMR) avec le pilote JDBC Presto pour exécuter des requêtes complexes, analyser des données et intégrer les résultats à des applications Java.
Prérequis
Avant de commencer, vérifiez que vous disposez des éléments suivants :
Un cluster EMR avec le service Presto en cours d'exécution
Java 8 ou version ultérieure
Les autorisations de requête sur la table
system.jdbcpour tous les utilisateurs qui se connecteront
Ajouter la dépendance du pilote JDBC
Ajoutez le pilote JDBC Presto à votre fichier pom.xml selon la version de votre cluster EMR.
| Version du composant | Dépendance | Nom de la classe du pilote |
|---|---|---|
| 0,2XX | groupId : com.facebook.prestoartifactId : presto-jdbcversion : 0.2XX |
com.facebook.presto.jdbc.PrestoDriver |
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-jdbc</artifactId>
<version>0.2XX</version>
</dependency>
Se connecter à une base de données
Utilisez le format d'URL suivant pour la connexion :
jdbc:presto://<COORDINATOR>:<PORT>/[CATALOG]/[SCHEMA]
Le port par défaut est 8889. Exemples :
jdbc:presto://master-1-1:8889 // Default catalog and schema
jdbc:presto://master-1-1:8889/hive // Catalog: hive, default schema
jdbc:presto://master-1-1:8889/hive/default // Catalog: hive, schema: default
Transmettre les paramètres de connexion
Transmettez les paramètres au DriverManager via l'une des méthodes suivantes. Elles sont équivalentes.
**Sous forme d'objet Properties :**
String url = "jdbc:presto://<master-node-name>:8889/hive/default";
Properties properties = new Properties();
properties.setProperty("user", "presto");
Connection connection = DriverManager.getConnection(url, properties);
Sous forme de paramètres d'URL :
String url = "jdbc:presto://<master-node-name>:8889/hive/default?user=presto";
Connection connection = DriverManager.getConnection(url);
Paramètres de connexion
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
user |
STRING | — | Nom d'utilisateur pour l'authentification et l'autorisation |
password |
STRING | — | Mot de passe pour l'authentification LDAP (Lightweight Directory Access Protocol) |
socksProxy |
STRING:NUMBER | — | Adresse et port du proxy SOCKS. Exemple : localhost:1080 |
httpProxy |
STRING:NUMBER | — | Adresse et port du proxy HTTP. Exemple : localhost:8888 |
SSL |
BOOLEAN | false |
Active SSL pour les connexions HTTPS |
SSLKeyStorePath |
STRING | — | Chemin d'accès au fichier keystore |
SSLKeyStorePassword |
STRING | — | Mot de passe du fichier keystore |
SSLTrustStorePath |
STRING | — | Chemin d'accès au fichier truststore Java |
SSLTrustStorePassword |
STRING | — | Mot de passe du fichier truststore Java |
KerberosRemoteServiceName |
STRING | — | Nom du service Kerberos |
KerberosPrincipal |
STRING | — | Nom principal Kerberos |
KerberosUseCanonicalHostname |
BOOLEAN | false |
Utilise le nom d'hôte canonique pour Kerberos |
KerberosConfigPath |
STRING | — | Chemin d'accès au fichier de configuration Kerberos |
KerberosKeytabPath |
STRING | — | Chemin d'accès au fichier keytab Kerberos |
KerberosCredentialCachePath |
STRING | — | Chemin d'accès au cache d'identifiants Kerberos |
Exemple
L'exemple suivant se connecte à une base de données Presto, exécute une requête et affiche les résultats :
Connection connection = null;
Statement statement = null;
try {
// JDBC URL pointing to the Presto coordinator
String url = "jdbc:presto://<master-node-name>:8889/hive/default";
Properties properties = new Properties();
properties.setProperty("user", "presto");
// Create a connection
connection = DriverManager.getConnection(url, properties);
// Create a statement
statement = connection.createStatement();
// Execute a query
ResultSet rs = statement.executeQuery("select * from t1");
// Print results
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 {
// Close the statement
if (statement != null) {
try {
statement.close();
} catch (Throwable t) {
// No-ops
}
}
// Close the connection
if (connection != null) {
try {
connection.close();
} catch (Throwable t) {
// No-ops
}
}
}
Étapes suivantes
Pour des requêtes simples sans intégration Java, privilégiez la connexion à Presto via la CLI. Consultez Utiliser la CLI pour se connecter à Presto.