通过Spark SQL读写AWS S3外表

更新时间:

本文主要介绍如何在云原生数据仓库 AnalyticDB MySQL 版(AnalyticDB for MySQL)中使用Spark SQL读写AWS S3中的数据。

前提条件

  • AnalyticDB for MySQL集群的产品系列为企业版、基础版或湖仓版

  • 已创建AnalyticDB for MySQL集群的数据库账号。

  • 已在AnalyticDB for MySQL集群中创建Job型资源组。具体操作,请参见新建资源组

  • 已授权AnalyticDB for MySQL扮演AliyunADBSparkProcessingDataRole角色来访问其他云资源。具体操作,请参见账号授权

  • 已配置Spark公网环境。具体操作,请参见Spark应用访问公网配置说明

  • 已开通OSS服务并创建存储空间。具体操作,请参见开通OSS服务创建存储空间

操作步骤

  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. SQLConsole窗口,选择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. 单击立即执行,执行完成后,您可以在Spark Jar 开发页面应用列表页签中的日志查看数据。详情请参见Spark开发编辑器