AnalyticDB for MySQL permet d'accéder aux données hébergées sur ApsaraDB RDS for MySQL, que l'instance se trouve dans le même compte Alibaba Cloud ou dans un compte différent. Vous pouvez établir cette connexion via une interface réseau élastique (ENI) ou par le biais d'une connexion SSL. La connexion SSL offre un niveau de sécurité supérieur à celui d'une ENI, car elle chiffre la liaison réseau pour garantir la confidentialité des données. Cette rubrique détaille les procédures d'accès aux données ApsaraDB RDS for MySQL au moyen d'une ENI et d'une connexion SSL.
Prérequis
Un cluster AnalyticDB for MySQL Enterprise Edition, Basic Edition ou Data Lakehouse Edition a été créé.
Le cluster AnalyticDB for MySQL et l'instance ApsaraDB RDS for MySQL doivent résider dans la même région. Pour plus d'informations, consultez les rubriques Créer un cluster et Créer une instance ApsaraDB RDS for MySQL.
Un groupe de ressources de tâches a été créé pour le cluster AnalyticDB for MySQL.
-
Un compte de base de données a été créé pour le cluster AnalyticDB for MySQL.
Si vous utilisez un compte Alibaba Cloud, il vous suffit de créer un compte privilégié.
Si vous utilisez un utilisateur RAM (Resource Access Management), vous devez créer un compte privilégié et un compte standard, puis associer le compte standard à l'utilisateur RAM.
L'instance ApsaraDB RDS for MySQL doit appartenir à un groupe de sécurité dont les règles autorisent l'accès au port de l'instance. Pour en savoir plus, reportez-vous aux rubriques Configurer les règles de groupe de sécurité et Ajouter une règle de groupe de sécurité.
Le service OSS est activé et un bucket a été créé dans la même région que le cluster AnalyticDB for MySQL. Consultez les pages Activer OSS et Créer un bucket pour plus de détails.
-
Vous devez disposer des autorisations nécessaires. Reportez-vous à la section Autorisation de compte pour obtenir la liste des permissions requises.
ImportantPour un accès intracompte, le rôle
AliyunADBSparkProcessingDataRoleest requis. Pour un accès intercomptes, vous devez accorder des autorisations à l'autre compte Alibaba Cloud.
Préparer les données
Dans votre instance ApsaraDB RDS for MySQL, créez une base de données et une table, puis insérez-y des données. Voici un exemple :
CREATE DATABASE `test`;
CREATE TABLE `test`.`persons` (
`id` int(11) DEFAULT NULL,
`first_name` varchar(32) DEFAULT NULL,
`last_name` varchar(32) DEFAULT NULL,
`age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
INSERT INTO persons VALUES(1,'a','b',5);
INSERT INTO persons VALUES(2,'c','d',6);
INSERT INTO persons VALUES(3,'e','f',7);
Accéder aux données RDS MySQL via une ENI
Télécharger le pilote et les dépendances JAR
-
Rédigez un programme exemple permettant d'accéder à une table ApsaraDB RDS for MySQL, puis compilez-le et empaquetez-le. Le fichier JAR généré constitue une dépendance pour la tâche Spark ; dans cet article, il est nommé
rds_test.jar. Le code exemple est le suivant :package com.aliyun.spark import org.apache.spark.sql.SparkSession object SparkRDS { def main(args: Array[String]): Unit = { val sparkSession = SparkSession.builder() .appName("rds mysql test") .getOrCreate() // The internal endpoint of the ApsaraDB RDS for MySQL instance. For information about how to view the endpoint, see View or change internal and public endpoints and port numbers. val url = "jdbc:mysql://rm-bp11mpql1e01****.mysql.rds.aliyuncs.com" // The name of the ApsaraDB RDS for MySQL table in the "db_name.table_name" format. val dbtable = "test.persons" // The username for connecting to the ApsaraDB RDS for MySQL database. val user = "mysql_username" // The password for the database username. val password = "mysql_password" val jdbcDF = sparkSession.read .format("jdbc") .option("url", url) .option("driver", "com.mysql.jdbc.Driver") .option("dbtable", dbtable) .option("user", user) .option("password", password) .load() jdbcDF.show() } } -
Téléchargez le pilote compatible avec votre version d'ApsaraDB RDS for MySQL depuis le site officiel de MySQL.
Cette rubrique utilise le fichier mysql-connector-java-8.0.11.jar à titre d'exemple.
Téléversez la dépendance JAR de la tâche Spark ainsi que le pilote ApsaraDB RDS for MySQL vers OSS. Pour plus d'informations, consultez la page Téléverser des objets.
Accès intracompte
Connectez-vous à la console AnalyticDB for MySQL. Dans le coin supérieur gauche, sélectionnez une région. Dans le volet de navigation de gauche, cliquez sur Clusters. Repérez le cluster à gérer et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur .
Au-dessus de l'éditeur, sélectionnez un groupe de ressources de tâches et un type de tâche. Cet exemple utilise le mode Batch.
-
Saisissez la configuration de tâche suivante dans l'éditeur.
{ "name": "rds-mysql-example", "jars": [ "oss://testBucketName/mysql-connector-java-8.0.11.jar" ], "file": "oss://testBucketName/rds_test.jar", "className": "com.aliyun.spark.SparkRDS", "conf": { "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp17jqw3lrrobn6y****", "spark.adb.eni.securityGroupId": "sg-bp163uxgt4zandx****", "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small" } }Le tableau ci-dessous décrit les paramètres.
Parameter
Description
name
Nom de la tâche Spark.
jars
Chemin OSS du pilote ApsaraDB RDS for MySQL.
Cet exemple utilise le chemin OSS du package mysql-connector-java-8.0.11.jar.
file
Chemin OSS du fichier JAR de dépendance de la tâche Spark.
className
Nom de la classe principale du programme Java ou Scala.
Dans cet exemple, la valeur est com.aliyun.spark.SparkRDS.
spark.adb.eni.enabled
Indique si l'accès via une ENI est activé. Définissez ce paramètre sur true pour l'activer.
spark.adb.eni.vswitchId
ID du vSwitch. Sur la page Database Connection de l'instance ApsaraDB RDS for MySQL, survolez le VPC (Virtual Private Cloud) pour obtenir l'ID du vSwitch.
spark.adb.eni.securityGroupId
ID du groupe de sécurité auquel l'instance ApsaraDB RDS for MySQL est associée. Si aucun groupe de sécurité n'est ajouté, consultez la rubrique Configurer les règles de groupe de sécurité.
Other conf parameters
Ces configurations sont principalement identiques à celles de Spark open source. Les paramètres suivent le format
key:value. Séparez plusieurs paramètres par une virgule. Pour en savoir plus sur les paramètres de configuration des applications, consultez la rubrique Paramètres de configuration des applications Spark. Cliquez sur Run Now.
Une fois la tâche Spark exécutée avec succès, vous pouvez consulter les données de la table ApsaraDB RDS for MySQL dans les journaux Spark. Pour savoir comment afficher les journaux, reportez-vous à la section Afficher les informations d'une application Spark.
Accès intercomptes
Connectez-vous à la console AnalyticDB for MySQL. Dans le coin supérieur gauche, sélectionnez une région. Dans le volet de navigation de gauche, cliquez sur Clusters. Repérez le cluster à gérer et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur .
Au-dessus de l'éditeur, sélectionnez un groupe de ressources de tâches et un type de tâche. Cet exemple utilise le mode Batch.
-
Saisissez la configuration de tâche suivante dans l'éditeur.
{ "name": "rds-mysql-example", "jars": [ "oss://testBucketName/mysql-connector-java-8.0.11.jar" ], "file": "oss://testBucketName/rds_test.jar", "className": "com.aliyun.spark.SparkRDS", "conf": { "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp17jqw3lrrobn6y****", "spark.adb.eni.securityGroupId": "sg-bp163uxgt4zandx****", "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small", "spark.adb.eni.roleArn":"acs:ram::testAccountID:role/testUserName" } }Le tableau ci-dessous décrit les paramètres.
Parameter
Description
spark.adb.eni.roleArn
Rôle RAM utilisé pour l'accès intercomptes à la source de données ApsaraDB RDS for MySQL. Séparez plusieurs rôles par des virgules (,). Le format est
acs:ram::testAccountID:role/testUserName.-
testAccountID: ID du compte Alibaba Cloud propriétaire de la source de données ApsaraDB RDS for MySQL. -
testUserName: Rôle RAM créé pour l'autorisation intercomptes. Pour plus d'informations, consultez la rubrique Autorisation intercomptes.
Pour plus d'informations sur les autres paramètres, consultez le tableau de description des paramètres de la section précédente.
-
Cliquez sur Run Now.
Une fois la tâche Spark exécutée avec succès, vous pouvez consulter les données de la table ApsaraDB RDS for MySQL dans les journaux Spark. Pour savoir comment afficher les journaux, reportez-vous à la section Afficher les informations d'une application Spark.
Accéder aux données via une connexion SSL
Pour accéder aux données d'une instance ApsaraDB RDS for MySQL via une connexion SSL, vous devez activer le chiffrement SSL sur l'instance et vous assurer que le point de terminaison interne est chiffré. Pour plus de détails, consultez la rubrique Activer le chiffrement SSL pour une instance ApsaraDB RDS for MySQL.
Télécharger et téléverser le certificat CA
Connectez-vous à la console ApsaraDB RDS. Dans le coin supérieur gauche, sélectionnez la région de votre instance. Dans le volet de navigation de gauche, cliquez sur Instances, puis cliquez sur l'ID de l'instance cible.
Dans le volet de navigation de gauche, cliquez sur Security Controls.
-
Cliquez sur Download CA Certificate.
ImportantUn certificat CA est valide pendant un an. Pour maintenir l'accès SSL, vous devez remplacer le certificat avant son expiration.
Décompressez le package du certificat CA et téléversez le fichier JKS vers OSS. Pour plus d'informations, consultez la page Téléverser des objets.
Télécharger le pilote et les dépendances JAR
-
Rédigez un programme exemple pour accéder à la table ApsaraDB RDS for MySQL, puis compilez-le et empaquetez-le. Dans cet exemple, le fichier JAR généré est nommé
test.jar. Le code exemple utilisé est le suivant :package org.example import org.apache.spark.sql.SparkSession object Test { def main(args: Array[String]): Unit = { // The OSS path of the JKS file, for example, oss://testBucketName/folder/ApsaraDB-CA-Chain.jks. val JKS_FILE_PATH = args(0) // The username for connecting to the ApsaraDB RDS for MySQL database. val USERNAME = args(1) // The password for the database username. val PASSWORD = args(2) // The name of the ApsaraDB RDS for MySQL database. val DATABASE_NAME = args(3) // The name of the table in the database. val TABLE_NAME = args(4) // The internal endpoint of the ApsaraDB RDS for MySQL instance. val mysqlUrl = "jdbc:mysql://rm-bp11mpql1e01****.mysql.rds.aliyuncs.com:3306/?" + "useSSL=true" + s"&trustCertificateKeyStoreUrl=file:///tmp/testBucketName/folder/ApsaraDB-CA-Chain.jks" + "&trustCertificateKeyStorePassword=apsaradb" + "&trustCertificateKeyStoreType=JKS" val spark = SparkSession.builder().getOrCreate() spark.read.format("jdbc") .option("driver", "com.mysql.cj.jdbc.Driver") .option("url", mysqlUrl) .option("user", USERNAME) .option("password", PASSWORD) .option("dbtable", s"${DATABASE_NAME}.${TABLE_NAME}") .load() .show() } }Le tableau ci-dessous décrit les paramètres de connexion.
Parameter
Description
useSSL
Indique si une connexion chiffrée SSL est utilisée. Valeurs possibles :
-
true : Une connexion chiffrée SSL est utilisée.
-
false (par défaut) : Aucune connexion chiffrée SSL n'est utilisée.
Dans cet exemple, définissez ce paramètre sur true.
trustCertificateKeyStoreUrl
Chemin local du fichier de certificat JKS au format
file:///tmp/<JKS_FILE_PATH>, où<JKS_FILE_PATH>représente le chemin OSS du certificat JKS.Par exemple, si le chemin OSS du certificat JKS est
oss://testBucketName/folder/ApsaraDB-CA-Chain.jks, le chemin local serafile:///tmp/testBucketName/folder/ApsaraDB-CA-Chain.jks.trustCertificateKeyStorePassword
Mot de passe du certificat JKS. La valeur est fixe : apsaradb.
trustCertificateKeyStoreType
Format de stockage du certificat. La valeur est fixe : JKS.
-
Téléversez le package
test.jarvers OSS. Pour plus d'informations, consultez la page Téléverser des objets.
Accès intracompte
Connectez-vous à la console AnalyticDB for MySQL. Dans le coin supérieur gauche, sélectionnez une région. Dans le volet de navigation de gauche, cliquez sur Clusters. Repérez le cluster à gérer et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur .
Au-dessus de l'éditeur, sélectionnez un groupe de ressources de tâches et un type de tâche. Cet exemple utilise le mode Batch.
-
Saisissez la configuration de tâche suivante dans l'éditeur.
{ "file": "oss://testBucketName/test.jar", "className": "org.example.Test", "name": "MYSQL SSL Test", "conf": { "spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES": "oss://testBucketName/folder/ApsaraDB-CA-Chain.jks", "spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES": "oss://testBucketName/folder/ApsaraDB-CA-Chain.jks", "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small", "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp17jqw3lrrobn6y****", "spark.adb.eni.securityGroupId": "sg-bp163uxgt4zandx****" } }Le tableau ci-dessous décrit les paramètres.
Parameter
Description
name
Nom de la tâche Spark.
file
Chemin OSS du fichier JAR de dépendance de la tâche Spark.
className
Nom de la classe principale du programme Java ou Scala.
Dans cet exemple, la valeur est org.example.Test.
spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES
Paramètre du pilote Spark spécifiant le chemin OSS du fichier de certificat JKS. Pour spécifier plusieurs fichiers de certificat JKS, séparez leurs chemins par une virgule. Exemple :
spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES: "oss://testBucketName/a.jks,oss://testBucketName/b.jks".spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES
Paramètre de l'exécuteur Spark spécifiant le chemin OSS du fichier de certificat JKS. Pour spécifier plusieurs fichiers de certificat JKS, séparez leurs chemins par une virgule. Exemple :
spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES: "oss://testBucketName/a.jks,oss://testBucketName/b.jks".spark.adb.eni.enabled
Indique si l'accès via une ENI est activé. Définissez ce paramètre sur true pour l'activer.
spark.adb.eni.vswitchId
ID du vSwitch. Sur la page Database Connection de l'instance ApsaraDB RDS for MySQL, survolez le VPC pour obtenir l'ID du vSwitch.
spark.adb.eni.securityGroupId
ID du groupe de sécurité auquel l'instance ApsaraDB RDS for MySQL est associée. Si aucun groupe de sécurité n'est ajouté, consultez la rubrique Configurer les règles de groupe de sécurité.
Other conf parameters
Ces configurations sont principalement identiques à celles de Spark open source. Les paramètres suivent le format
key:value. Séparez plusieurs paramètres par une virgule. Pour en savoir plus sur les paramètres de configuration des applications, consultez la rubrique Paramètres de configuration des applications Spark. Cliquez sur Run Now.
Une fois la tâche Spark exécutée avec succès, vous pouvez consulter les données de la table ApsaraDB RDS for MySQL dans les journaux Spark. Pour savoir comment afficher les journaux, reportez-vous à la section Afficher les informations d'une application Spark.
Accès intercomptes
Connectez-vous à la console AnalyticDB for MySQL. Dans le coin supérieur gauche, sélectionnez une région. Dans le volet de navigation de gauche, cliquez sur Clusters. Repérez le cluster à gérer et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur .
Au-dessus de l'éditeur, sélectionnez un groupe de ressources de tâches et un type de tâche. Cet exemple utilise le mode Batch.
-
Saisissez la configuration de tâche suivante dans l'éditeur.
{ "file": "oss://testBucketName/test.jar", "className": "org.example.Test", "name": "MYSQL SSL Test", "conf": { "spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES": "oss://testBucketName/folder/ApsaraDB-CA-Chain.jks", "spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES": "oss://testBucketName/folder/ApsaraDB-CA-Chain.jks", "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small", "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp17jqw3lrrobn6y****", "spark.adb.eni.securityGroupId": "sg-bp163uxgt4zandx****", "spark.adb.eni.roleArn": "acs:ram::testAccountID:role/testUserName" } }Le tableau ci-dessous décrit les paramètres.
Parameter
Description
spark.adb.eni.roleArn
Rôle RAM utilisé pour l'accès intercomptes à la source de données ApsaraDB RDS for MySQL. Séparez plusieurs rôles par des virgules (,). Le format est
acs:ram::testAccountID:role/testUserName.-
testAccountID: ID du compte Alibaba Cloud propriétaire de la source de données ApsaraDB RDS for MySQL. -
testUserName: Rôle RAM créé pour l'autorisation intercomptes. Pour plus d'informations, consultez la rubrique Autorisation intercomptes.
Pour plus d'informations sur les autres paramètres, consultez le tableau de description des paramètres de la section précédente.
-
Cliquez sur Run Now.
Une fois la tâche Spark exécutée avec succès, vous pouvez consulter les données de la table ApsaraDB RDS for MySQL dans les journaux Spark. Pour savoir comment afficher les journaux, reportez-vous à la section Afficher les informations d'une application Spark.