すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:Spark SQLを使用してMySQLデータを読み取る

最終更新日:Sep 06, 2024

AnalyticDB for MySQLを使用すると、Spark SQLジョブを送信して、ビューモードまたはカタログモードで自己管理型MySQLデータベース、ApsaraDB RDS for MySQL、またはPolarDB for MySQLにアクセスできます。 このトピックでは、Spark SQLを使用してApsaraDB RDS for MySQLデータにアクセスする方法について説明します。

前提条件

  • AnalyticDB for MySQL Data Lakehouse Editionクラスターが作成されます。

  • AnalyticDB for MySQLクラスターは、ApsaraDB RDS for MySQLインスタンスと同じリージョンにあります。

  • AnalyticDB for MySQLクラスターのジョブリソースグループが作成されます。 詳細については、「リソースグループの作成」をご参照ください。

  • AnalyticDB for MySQLクラスター用のデータベースアカウントが作成されます。

  • ApsaraDB RDS for MySQLインスタンスがセキュリティグループに追加されました。 セキュリティグループのインバウンドルールとアウトバウンドルールは、ApsaraDB RDS for MySQLインスタンスのポートからのリクエストを許可します。 詳細については、「ApsaraDB RDS For MySQLインスタンスのセキュリティグループの設定」および「セキュリティグループルールの追加」をご参照ください。

ステップ1: データの準備

ApsaraDB RDS for MySQLインスタンスにデータベースを作成し、データベースにテーブルを作成してから、テーブルにデータを挿入します。 サンプル文:

CREATE DATABASE `db`;

CREATE TABLE `db`.`test` (
  `id` int(11) DEFAULT NULL,
  `first_name` varchar(32) DEFAULT NULL,
  `laster_name` varchar(32) DEFAULT NULL,
  `age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;

INSERT INTO test VALUES(1,'a','b',5);
INSERT INTO test VALUES(2,'c','d',6);
INSERT INTO test VALUES(3,'e','f',7);

手順2: (オプション) CA証明書とApsaraDB RDS for MySQLドライバーのアップロード

説明

SSL接続を介してApsaraDB RDS for MySQLデータにアクセスしたくない場合は、この手順をスキップしてSpark SQLジョブを送信できます。 詳細については、このトピックの「手順3: Spark SQLジョブの送信」を参照してください。

  1. ApsaraDB RDS for MySQLインスタンスのSSL暗号化を有効にし、CA証明書をダウンロードします。 詳細については、「SSL暗号化機能の設定」をご参照ください。

    重要
    • SSL暗号化を有効にすると、内部接続を暗号化するかパブリック接続を暗号化するかを選択できます。 この例では、内部接続は暗号化されています。

    • CA証明書のデフォルトの有効期間は1年です。 CA証明書の有効期限が切れた場合、別の証明書を生成する必要があります。 期限切れのCA証明書を使用して、SSL接続を介してApsaraDB RDS for MySQLにアクセスすることはできません。

  2. エンジンバージョンのApsaraDB RDS for MySQLインスタンスと互換性のあるドライバーを https://dev.mysql.com/downloads/connector/j/ からダウンロードします。

    この例では、mysql-connector-java-8.0.29.jarパッケージが使用されています。

  3. CA証明書パッケージを解凍します。 JKSファイルとApsaraDB RDS for MySQLドライバーをObject Storage Service (OSS) にアップロードします。 詳細については、オブジェクトのアップロード」をご参照ください。

手順3: Spark SQLジョブの送信

  1. AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。   [Data Lakehouse Edition] タブで、管理するクラスターを見つけ、クラスターIDをクリックします。

  2. 左側のナビゲーションウィンドウで、[ジョブの開発]> [SQLの開発] を選択します。

  3. [SQLConsole] タブで、Sparkエンジンとジョブリソースグループを選択します。

  4. SQLConsoleタブで、さまざまなアクセスモードに基づいてパラメーターを設定します。

    表示モード

    表示モードでデータにアクセスすると、一時的な表示が作成されます。 仕事を始めるたびに、ビューを作成する必要があります。 表示モードでは、elastic network interface (ENI) またはSSL接続を介してApsaraDB RDS for MySQLデータにアクセスするかどうかを選択できます。

    ENI経由でApsaraDB RDS for MySQLデータにアクセスする

    set spark.adb.eni.enabled=true;
    set spark.adb.eni.vswitchId=<vsw-bp1sxxsodv28ey5dl****>;   
    set spark.adb.eni.securityGroupId=<sg-bp19mr685pmg4ihc****>;    
    
    CREATE TEMPORARY VIEW table_tmp
    USING org.apache.spark.sql.jdbc
    OPTIONS (
      url '<jdbc:mysql://rm-bp1k87323a7ia****.mysql.rds.aliyuncs.com:3306>',     
      dbtable '<db.test>',    
      user '<user>',       
      password '<password>'      
    );
    
    select * from table_tmp;

    下表に、各パラメーターを説明します。

    パラメーター

    説明

    spark.adb.eni.enabled

    ENIを有効にするかどうかを指定します。

    データにアクセスするときは、spark.adb.eni.enabledパラメーターをtrueに設定する必要があります。

    spark.adb.eni.vswitchId

    ApsaraDB RDS for MySQLインスタンスのvSwitch ID。 vSwitch IDを表示するには、データベース接続ページのVPC上にポインターを移動します。

    spark.adb.eni.securityGroupId

    ApsaraDB RDS for MySQLインスタンスが追加されたセキュリティグループのID。 詳細については、「ApsaraDB RDS For MySQLインスタンスのセキュリティグループの設定」をご参照ください。

    table_tmp

    ビューの名前。 この例では、table_tmpが使用されています。

    USING org.apache.spark.sql.jdbc

    このパラメーターの値は、自動的にUSING org.apache.spark.sql.jdbcに設定されます。

    OPTIONS

    • url: ApsaraDB RDS for MySQLインスタンスの内部エンドポイントとポート番号。 形式: jdbc:mysql:// rm-bp1k87323a7ia **** .mysql.rds.aliyuncs.com:3306

    • dbtable: ApsaraDB RDS for MySQLインスタンスのテーブルの名前。 形式: db_name.table_name この例では、db_1.table_11が使用されます。

    • user: ApsaraDB RDS for MySQLインスタンスのデータベースアカウントの名前。

    • password: データベースアカウントのパスワード。

    SSL接続を介したApsaraDB RDS for MySQLデータへのアクセス

    add jar oss://<bucketname>/mysql-connector-java-8.0.11.jar;
    set spark.app.name=SSL_RDS_SQL;
    set spark.adb.eni.enabled=true;
    set spark.adb.eni.vswitchId=<vsw-bp1sxxsodv28ey5dl****>;
    set spark.adb.eni.securityGroupId=<sg-bp19mr685pmg4ihc****>;
    set spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES=oss://<bucketname>/ApsaraDB-CA-Chain.jks;
    set spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES=oss://<bucketname>/ApsaraDB-CA-Chain.jks;
    
    CREATE TEMPORARY VIEW table_view
    USING org.apache.spark.sql.jdbc
    OPTIONS (
      url '<jdbc:mysql://rm-bp1k87323a7ia****.mysql.rds.aliyuncs.com:3306/?useSSL=true&clientCertificateKeyStoreUrl=file:///tmp/<bucketname>/folder/ApsaraDB-CA-Chain.jks&clientCertificateKeyStorePassword=apsaradb&trustCertificateKeyStoreUrl=file:///tmp/<bucketname>/folder/ApsaraDB-CA-Chain.jks&trustCertificateKeyStorePassword=apsaradb&trustCertificateKeyStoreType=JKS&clientCertificateKeyStoreType=JKS>',
      dbtable '<db.test>',
      user '<user>',
      password '<password>'
    );

    下表に、各パラメーターを説明します。

    パラメーター

    説明

    瓶を追加

    ApsaraDB RDS for MySQLドライバーのOSSパス。

    この例では、mysql-connector-java-8.0.11.jarパッケージのOSSパスが使用されています。

    spark.app.name

    Spark SQLジョブの名前。

    spark.adb.eni.enabled

    ENIを有効にするかどうかを指定します。

    データにアクセスするときは、spark.adb.eni.enabledパラメーターをtrueに設定する必要があります。

    spark.adb.eni.vswitchId

    ApsaraDB RDS for MySQLインスタンスのvSwitch ID。 vSwitch IDを表示するには、データベース接続ページのVPC上にポインターを移動します。

    spark.adb.eni.securityGroupId

    ApsaraDB RDS for MySQLインスタンスが追加されたセキュリティグループのID。 詳細については、「ApsaraDB RDS For MySQLインスタンスのセキュリティグループの設定」をご参照ください。

    spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES

    Sparkドライバーパラメーター。JKS証明書ファイルのOSSパスを指定します。 複数のJKS証明書ファイルをコンマ (,) で区切ります。 例: spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES: "oss:// testBucketName/a.jks,oss:// testBucketName/b.jks"

    spark.exe cutorEnv.ADB_SPARK_DOWNLOAD_FILES

    Spark executorパラメーター。JKS証明書ファイルのOSSパスを指定します。 複数のJKS証明書ファイルをコンマ (,) で区切ります。 例: spark.exe cutor.ADB_SPARK_DOWNLOAD_FILES: "oss:// testBucketName/a.jks,oss:// testBucketName/b.jks"

    table_view

    ビューの名前。 この例では、table_viewが使用されています。

    USING org.apache.spark.sql.jdbc

    このパラメーターの値は、自動的にUSING org.apache.spark.sql.jdbcに設定されます。

    OPTIONS

    • url: ApsaraDB RDS for MySQLインスタンスの内部エンドポイント、ポート番号、およびSSLパラメーター。 形式:jdbc:mysql:// rm-bp1k87323a7ia **** .mysql.rds.aliyuncs.com:3306/?useSSL=true&clientCertificateKeyStoreUrl=file:/// tmp/<trustketname>/folder/ApsaraDB-CA-Chain.jks&clientCertificateKeyStorePassword=apsaradKS&KeyadeficateKeyketa /Type&Keysaramp ApsaraDB-CA-Chain.jks.

      SSLパラメーターの詳細については、ApsaraDB RDS For MySQLのアクセストピックの「パラメーター」セクションをご参照ください。

    • dbtable: ApsaraDB RDS for MySQLインスタンスのテーブルの名前。 形式: db_name.table_name この例では、db.testが使用されます。

    • user: ApsaraDB RDS for MySQLインスタンスのデータベースアカウントの名前。

    • password: データベースアカウントのパスワード。

    カタログモード

    set spark.adb.eni.enabled=true;
    set spark.adb.eni.vswitchId=<vsw-bp1d14ddiw46fkgu1****>;
    set spark.adb.eni.securityGroupId=<sg-bp19varsa8j0hyb****>;
    set spark.sql.catalog.jdbc=org.apache.spark.sql.execution.datasources.v2.jdbc.JDBCTableCatalog;
    set spark.sql.catalog.jdbc.url=<jdbc:mysql://rm-bp11mpql1e01l****.mysql.rds.aliyuncs.com:3306>;
    set spark.sql.catalog.jdbc.user=<user>;
    set spark.sql.catalog.jdbc.password=<password>;
    use jdbc;
    select * from db.test;

    下表に、各パラメーターを説明します。

    パラメーター

    説明

    spark.sql.ca talog.jdbc

    Spark SQLがデータソースを構成するために使用するメソッド。

    このパラメーターの値は、自動的にorg.apache.spark.sql.exe cution.datasources.v2.jdbc.JDBCTableCatalogに設定されます。

    説明

    spark.sql.catalog.ca taloge_nameパラメーターには、カスタムのcatalog_name値を設定できます。 この例では、jdbcが使用されます。

    talog.jdbc.url spark.sql.ca

    ApsaraDB RDS for MySQLインスタンスの内部エンドポイントとポート番号。 形式: jdbc:mysql:// rm-bp1k87323a7ia **** .mysql.rds.aliyuncs.com:3306

    spark.sql.catalog.jdbc.us er

    ApsaraDB RDS for MySQLインスタンスのデータベースアカウントの名前。

    talog.jdbc.passwordをspark.sql.caする

    データベースアカウントのパスワードを設定します。

    説明

    Java Database Connectivity (JDBC) を使用してデータソースにアクセスするために必要なパラメーターの詳細については、「JDBC to Other Databases」をご参照ください。