AnalyticDB for MySQL permite acessar dados no ApsaraDB RDS for MySQL na mesma conta da Alibaba Cloud ou em contas diferentes. É possível acessar os dados do ApsaraDB RDS for MySQL por meio de uma ENI ou de uma conexão SSL. A conexão SSL oferece maior segurança que a ENI, pois criptografa a conexão de rede para garantir a proteção dos dados. Este tópico descreve os métodos específicos para acessar dados do ApsaraDB RDS for MySQL usando uma ENI e uma conexão SSL.
Pré-requisitos
Crie um cluster AnalyticDB for MySQL Enterprise Edition, Basic Edition ou Data Lakehouse Edition.
O cluster AnalyticDB for MySQL e a instância do ApsaraDB RDS for MySQL devem estar na mesma região. Para mais informações, consulte Create a cluster e Create an ApsaraDB RDS for MySQL instance.
A job resource group is created para o cluster AnalyticDB for MySQL.
-
Crie uma conta de banco de dados para o cluster AnalyticDB for MySQL.
Se você usar uma conta da Alibaba Cloud, basta create a privileged account.
Se você usar um usuário do Resource Access Management (RAM), é necessário create a privileged account and a standard account e associate the standard account with the RAM user.
A instância do ApsaraDB RDS for MySQL deve pertencer a um grupo de segurança com regras que permitam acesso à porta da instância. Para mais informações, consulte Set security group rules e Add a security group rule.
Ative o serviço OSS e crie um bucket na mesma região do cluster AnalyticDB for MySQL. Para mais informações, consulte Activate OSS e Create a bucket.
-
Verifique se você possui as permissões necessárias. Para mais informações, consulte Account authorization.
ImportantePara acesso na mesma conta, a função
AliyunADBSparkProcessingDataRoleé obrigatória. Para acesso entre contas, conceda permissões à outra conta da Alibaba Cloud.
Preparar dados
Na sua instância do ApsaraDB RDS for MySQL, crie um banco de dados e uma tabela e insira dados. Por exemplo:
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);
Acessar dados do RDS MySQL por uma ENI
Fazer upload do driver e da dependência JAR
-
Escreva um programa de exemplo para acessar uma tabela do ApsaraDB RDS for MySQL, compile-o e empacote-o. O pacote JAR gerado é uma dependência para o job Spark e, neste artigo, recebe o nome de
rds_test.jar. O código de exemplo é o seguinte: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() } } -
Baixe o driver compatível com a versão do seu ApsaraDB RDS for MySQL no site oficial do MySQL.
Este tópico usa mysql-connector-java-8.0.11.jar como exemplo.
Faça upload da dependência JAR do job Spark e do driver do ApsaraDB RDS for MySQL para o OSS. Para mais informações, consulte Upload objects.
Acesso na mesma conta
Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo do console, selecione uma região. No painel de navegação à esquerda, clique em Clusters. Localize o cluster que deseja gerenciar e clique no ID do cluster.
No painel de navegação à esquerda, clique em .
Acima do editor, selecione um grupo de recursos de job e um tipo de job. Este tópico usa Batch como exemplo.
-
Insira a seguinte configuração de job no editor.
{ "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" } }A tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
name
Nome do job Spark.
jars
Caminho do OSS para o driver do ApsaraDB RDS for MySQL.
Este exemplo usa o caminho do OSS do pacote mysql-connector-java-8.0.11.jar.
file
Caminho do OSS para o arquivo JAR de dependência do job Spark.
className
Nome da classe de entrada do programa Java ou Scala.
Este exemplo usa com.aliyun.spark.SparkRDS.
spark.adb.eni.enabled
Define se o acesso por ENI deve ser ativado. Defina como true para ativar.
spark.adb.eni.vswitchId
ID do vSwitch. Na página Database Connection da instância do ApsaraDB RDS for MySQL, passe o mouse sobre a Virtual Private Cloud (VPC) para obter o ID do vSwitch.
spark.adb.eni.securityGroupId
ID do grupo de segurança ao qual a instância do ApsaraDB RDS for MySQL foi adicionada. Se nenhum grupo de segurança tiver sido adicionado, consulte Set security group rules.
Outros parâmetros conf
Essas configurações são praticamente idênticas às do Spark open-source. Os parâmetros seguem o formato
key:value. Separe múltiplos parâmetros com vírgula. Para mais informações sobre parâmetros de configuração de aplicação, consulte Spark application configuration parameters. Clique em Run Now.
Após a execução bem-sucedida do job Spark, visualize os dados da tabela do ApsaraDB RDS for MySQL nos logs do Spark. Para saber como visualizar logs, consulte View information about a Spark application.
Acesso entre contas
Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo do console, selecione uma região. No painel de navegação à esquerda, clique em Clusters. Localize o cluster que deseja gerenciar e clique no ID do cluster.
No painel de navegação à esquerda, clique em .
Acima do editor, selecione um grupo de recursos de job e um tipo de job. Este tópico usa Batch como exemplo.
-
Insira a seguinte configuração de job no editor.
{ "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" } }A tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
spark.adb.eni.roleArn
Função RAM usada para acesso entre contas à fonte de dados do ApsaraDB RDS for MySQL. Separe múltiplas funções com vírgulas (,). O formato é
acs:ram::testAccountID:role/testUserName.-
testAccountID: ID da conta da Alibaba Cloud proprietária da fonte de dados do ApsaraDB RDS for MySQL. -
testUserName: Função RAM criada para autorização entre contas. Para mais informações, consulte Cross-account authorization.
Para mais informações sobre os demais parâmetros, consulte a tabela parameter description na seção anterior.
-
Clique em Run Now.
Após a execução bem-sucedida do job Spark, visualize os dados da tabela do ApsaraDB RDS for MySQL nos logs do Spark. Para saber como visualizar logs, consulte View information about a Spark application.
Acessar dados por uma conexão SSL
Para acessar dados em uma instância do ApsaraDB RDS for MySQL por uma conexão SSL, ative a criptografia SSL na instância e garanta que o endpoint interno esteja criptografado. Para mais informações, consulte Enable SSL encryption for an ApsaraDB RDS for MySQL instance.
Baixar e fazer upload do certificado CA
Faça login no console do ApsaraDB RDS. No canto superior esquerdo, selecione a região da sua instância. No painel de navegação à esquerda, clique em Instances e clique no ID da instância desejada.
No painel de navegação à esquerda, clique em Security Controls.
-
Clique em Download CA Certificate.
ImportanteUm certificado CA tem validade de um ano. Para manter o acesso SSL, substitua o certificado antes que ele expire.
Descompacte o pacote do certificado CA e faça upload do arquivo JKS para o OSS. Para mais informações, consulte Upload objects.
Fazer upload do driver e da dependência JAR
-
Escreva um programa de exemplo para acessar a tabela do ApsaraDB RDS for MySQL, compile-o e empacote-o. Neste exemplo, o pacote JAR gerado recebe o nome de
test.jar. O seguinte código de exemplo é utilizado: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() } }A tabela a seguir descreve os parâmetros de conexão.
Parâmetro
Descrição
useSSL
Define se uma conexão criptografada por SSL deve ser usada. Valores válidos:
-
true: Uma conexão criptografada por SSL é utilizada.
-
false (padrão): Nenhuma conexão criptografada por SSL é utilizada.
Neste exemplo, defina este parâmetro como true.
trustCertificateKeyStoreUrl
Caminho local do arquivo de certificado JKS no formato
file:///tmp/<JKS_FILE_PATH>, onde<JKS_FILE_PATH>é o caminho do OSS para o certificado JKS.Por exemplo, se o caminho do OSS para o certificado JKS for
oss://testBucketName/folder/ApsaraDB-CA-Chain.jks, o caminho local seráfile:///tmp/testBucketName/folder/ApsaraDB-CA-Chain.jks.trustCertificateKeyStorePassword
Senha do certificado JKS. O valor é fixo como apsaradb.
trustCertificateKeyStoreType
Formato de armazenamento do certificado. O valor é fixo como JKS.
-
Faça upload do pacote
test.jarpara o OSS. Para mais informações, consulte Upload objects.
Acesso na mesma conta
Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo do console, selecione uma região. No painel de navegação à esquerda, clique em Clusters. Localize o cluster que deseja gerenciar e clique no ID do cluster.
No painel de navegação à esquerda, clique em .
Acima do editor, selecione um grupo de recursos de job e um tipo de job. Este tópico usa Batch como exemplo.
-
Insira a seguinte configuração de job no editor.
{ "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****" } }A tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
name
Nome do job Spark.
file
Caminho do OSS para o arquivo JAR de dependência do job Spark.
className
Nome da classe de entrada do programa Java ou Scala.
Este exemplo usa org.example.Test.
spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES
Parâmetro do driver Spark que especifica o caminho do OSS para o arquivo de certificado JKS. Para especificar vários arquivos de certificado JKS, separe os caminhos com vírgula. Exemplo:
spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES: "oss://testBucketName/a.jks,oss://testBucketName/b.jks".spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES
Parâmetro do executor Spark que especifica o caminho do OSS para o arquivo de certificado JKS. Para especificar vários arquivos de certificado JKS, separe os caminhos com vírgula. Exemplo:
spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES: "oss://testBucketName/a.jks,oss://testBucketName/b.jks".spark.adb.eni.enabled
Define se o acesso por ENI deve ser ativado. Defina como true para ativar.
spark.adb.eni.vswitchId
ID do vSwitch. Na página Database Connection da instância do ApsaraDB RDS for MySQL, passe o mouse sobre a VPC para obter o ID do vSwitch.
spark.adb.eni.securityGroupId
ID do grupo de segurança ao qual a instância do ApsaraDB RDS for MySQL foi adicionada. Se nenhum grupo de segurança tiver sido adicionado, consulte Set security group rules.
Outros parâmetros conf
Essas configurações são praticamente idênticas às do Spark open-source. Os parâmetros seguem o formato
key:value. Separe múltiplos parâmetros com vírgula. Para mais informações sobre parâmetros de configuração de aplicação, consulte Spark application configuration parameters. Clique em Run Now.
Após a execução bem-sucedida do job Spark, visualize os dados da tabela do ApsaraDB RDS for MySQL nos logs do Spark. Para saber como visualizar logs, consulte View information about a Spark application.
Acesso entre contas
Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo do console, selecione uma região. No painel de navegação à esquerda, clique em Clusters. Localize o cluster que deseja gerenciar e clique no ID do cluster.
No painel de navegação à esquerda, clique em .
Acima do editor, selecione um grupo de recursos de job e um tipo de job. Este tópico usa Batch como exemplo.
-
Insira a seguinte configuração de job no editor.
{ "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" } }A tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
spark.adb.eni.roleArn
Função RAM usada para acesso entre contas à fonte de dados do ApsaraDB RDS for MySQL. Separe múltiplas funções com vírgulas (,). O formato é
acs:ram::testAccountID:role/testUserName.-
testAccountID: ID da conta da Alibaba Cloud proprietária da fonte de dados do ApsaraDB RDS for MySQL. -
testUserName: Função RAM criada para autorização entre contas. Para mais informações, consulte Cross-account authorization.
Para mais informações sobre os demais parâmetros, consulte a tabela parameter description na seção anterior.
-
Clique em Run Now.
Após a execução bem-sucedida do job Spark, visualize os dados da tabela do ApsaraDB RDS for MySQL nos logs do Spark. Para saber como visualizar logs, consulte View information about a Spark application.