通過Spark SQL讀寫AWS S3外表

更新時間:
Copy as MD

本文主要介紹如何在AnalyticDB for MySQL中使用Spark SQL讀寫AWS S3中的資料。

前提條件

操作步驟

  1. 下載AnalyticDB for MySQL Spark訪問AWS S3依賴的JAR包:hadoop-aws-3.3.2.jaraws-java-sdk-bundle-1.12.712.jar

  2. 將兩個JAR包上傳至OSS。本文上傳路徑以oss://testBucketName/path/to為例。具體操作,請參見簡單上傳

  3. 登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,然後單擊目的地組群ID。

  4. 在左側導覽列,單擊作業開發 > SQL開發

  5. SQL Console視窗,選擇Spark引擎和Job型資源群組。

  6. SQLConsole視窗中輸入以下作業內容:

    --作業配置
    SET spark.adb.eni.vswitchId=vsw-bp1spuegbpswyk9****;
    SET spark.adb.eni.securityGroupId=sg-bp18rb6aucqaab****;
    SET spark.hadoop.fs.s3a.endpoint=s3.us-west-2.amazonaws.com;
    SET spark.hadoop.fs.s3a.access.key=AKAARTMSBOR4KC****;
    SET spark.hadoop.fs.s3a.secret.key=5aJuf42w6syiVQ5UnZcwLqXiUSP5SxWnBr****;
    SET spark.sql.catalogImplementation=hive;
    
    --載入串連AWS S3需要使用的JAR包
    ADD JAR 'oss://testBucketName/path/to/hadoop-aws-3.3.2.jar';
    ADD JAR 'oss://testBucketName/path/to/aws-java-sdk-bundle-1.12.712.jar';
    
    --建立AWS S3外庫和外表
    CREATE DATABASE IF NOT EXISTS aws_test location 's3a://testBucketNameS3/spark_test/db';
    USE aws_test;
    CREATE TABLE IF NOT EXISTS test_tbl(id INT, name STRING) location 's3a://testBucketNameS3/spark_test/db/tbl';
    
    --向AWS S3外表中寫入資料
    INSERT INTO test_tbl VALUES (2, 'aaa');
    
    --讀取AWS S3資料
    SELECT * FROM test_tbl;

    參數說明如下。

    參數

    說明

    spark.adb.eni.vswitchId

    彈性網卡的交換器ID。此處需填寫為Spark公網環境中指定的交換器ID。

    spark.adb.eni.securityGroupId

    彈性網卡的安全性群組ID,此處需填寫為Spark公網環境中指定的安全性群組ID。

    spark.hadoop.fs.s3a.endpoint

    AWS S3 Bucket所在地區的Endpoint。擷取方法,請參見所在地區的Endpoint

    spark.hadoop.fs.s3a.access.key

    訪問AWS S3 Bucket許可權的AccessKey

    spark.hadoop.fs.s3a.secret.key

    訪問AWS S3 Bucket許可權的SecretKey。

    spark.sql.catalogImplementation

    Spark使用的Catalog類型,此處需填寫為hive

    其他參數請參見Spark應用配置參數說明

  7. 單擊執行SQL,執行完成後,您可以在Spark Jar 開發頁面應用列表頁簽中的日誌查看資料。詳情請參見Spark開發編輯器