Conéctese a una base de datos Trino en un clúster de E-MapReduce (EMR) mediante el controlador JDBC de Trino para ejecutar consultas complejas, analizar datos o integrar resultados en aplicaciones Java.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un clúster de EMR con el servicio Trino instalado
Acceso de red al clúster de EMR desde la computadora que ejecuta su aplicación Java (misma VPC)
Maven (si utiliza Maven para gestionar dependencias)
Adición de la dependencia del controlador JDBC
Agregue la dependencia correcta del controlador JDBC al archivo pom.xml según la versión de su clúster de EMR.
|
Versión de EMR |
Versión del componente |
Dependencia de Maven |
Clase del controlador |
|
Serie EMR 3.X: V3.38.0 y posteriores Serie EMR 5.X: V5.5.0 y posteriores |
3XX |
|
|
|
Serie EMR 3.X: V3.25.0–V3.37.X Serie EMR 4.X: V4.3.0–V4.9.0 Serie EMR 5.X: V5.2.1–V5.4.3 |
3XX |
|
|
|
Otras versiones de EMR |
0.2XX |
|
|
Ejemplo: EMR V3.38.0 y posteriores, o V5.5.0 y posteriores
<dependency>
<groupId>io.trino</groupId>
<artifactId>trino-jdbc</artifactId>
<version>3XX</version>
</dependency>
Ejemplo: EMR V3.25.0–V3.37.X, V4.3.0–V4.9.0 o V5.2.1–V5.4.3
<dependency>
<groupId>io.prestosql</groupId>
<artifactId>presto-jdbc</artifactId>
<version>3XX</version>
</dependency>
Ejemplo: Otras versiones de EMR
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-jdbc</artifactId>
<version>0.2XX</version>
</dependency>
Paso de parámetros de conexión
Pase los parámetros a DriverManager mediante un objeto Properties o parámetros de consulta en la URL.
// Method 1: Properties object
String url = "jdbc:trino://master-1-1:9090/hive/default";
Properties properties = new Properties();
properties.setProperty("user", "hadoop");
properties.setProperty("SSL", "true");
Connection connection = DriverManager.getConnection(url, properties);
// Method 2: URL parameters
String url = "jdbc:trino://master-1-1:9090/hive/default?user=hadoop&SSL=true";
Connection connection = DriverManager.getConnection(url);
Para las versiones de EMR que utilizan el esquemajdbc:presto, reemplacejdbc:trinoporjdbc:prestoen los ejemplos anteriores.
Parámetros de conexión
|
Parámetro |
Tipo |
Descripción |
|
|
STRING |
Nombre de usuario para autenticación y autorización |
|
|
STRING |
Contraseña para la autenticación mediante Lightweight Directory Access Protocol (LDAP) |
|
|
STRING:NUMBER |
Dirección y puerto del proxy SOCKS. Ejemplo: |
|
|
STRING:NUMBER |
Dirección y puerto del proxy HTTP. Ejemplo: |
|
|
BOOLEAN |
Indica si se debe habilitar SSL para conexiones HTTPS. Valor predeterminado: |
|
|
STRING |
Ruta al archivo de almacén de confianza de Java |
|
|
STRING |
Contraseña para acceder al archivo de almacén de confianza de Java |
|
|
STRING |
Nombre del servicio Kerberos |
|
|
STRING |
Nombre de la entidad de seguridad de Kerberos |
|
|
BOOLEAN |
Indica si se debe usar un nombre de host canónico. Valor predeterminado: |
|
|
STRING |
Ruta al archivo de configuración de Kerberos |
|
|
STRING |
Ruta al archivo keytab de Kerberos |
|
|
STRING |
Ruta a la caché de credenciales de Kerberos |
Ejemplo
El siguiente código se conecta a Trino, ejecuta una consulta e imprime los resultados:
Connection connection = null;
Statement statement = null;
try {
// JDBC URL — use jdbc:trino for EMR V3.38.0+/V5.5.0+, or jdbc:presto for other versions
String url = "jdbc:trino://master-1-1:9090/hive/default";
Properties properties = new Properties();
properties.setProperty("user", "hadoop");
// Create a connection
connection = DriverManager.getConnection(url, properties);
// Create a statement and run a query
statement = connection.createStatement();
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 {
// Release resources
if (statement != null) {
try {
statement.close();
} catch (Throwable t) {
// No-ops
}
}
if (connection != null) {
try {
connection.close();
} catch (Throwable t) {
// No-ops
}
}
}
Preguntas frecuentes
Al conectarme mediante JDBC, obtengo el error Authentication failed: Basic authentication or X-Trino-User must be sent. ¿Qué debo hacer?
Este error ocurre cuando la versión del controlador JDBC no coincide con la versión de Trino que se ejecuta en su clúster. Utilice el controlador que corresponda a la versión de su clúster de EMR; consulte la tabla de dependencias para seleccionar el groupId, el artifactId y la versión correctos.
Pasos siguientes
Para consultas sencillas y ad hoc, conéctese a Trino mediante la CLI. Consulte Use the CLI to connect to Trino.