访问OSS数据源

更新时间:

云原生数据仓库 AnalyticDB MySQL 版Spark支持访问同账号或其他阿里云账号(跨账号)下对象存储OSS中的数据,本文介绍同账号或跨账号访问对象存储OSS数据的具体方法。

前提条件

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

  • AnalyticDB for MySQL集群与OSS存储空间位于相同地域。

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

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

  • 已完成授权操作。具体操作,请参见快速授权

    重要

    同账号访问时,需具备AliyunADBSparkProcessingDataRole权限;跨账号访问时,需要对其他阿里云账号授权。

步骤一:数据准备

  1. 准备用于数据读取的文本文件,将文本文件上传至OSS。本文示例的文本文件名为readme.txt。具体操作,请参见上传文件

    云原生数据仓库AnalyticDB MySQL版
    数据库产品
  2. 编写Python程序,将Python程序上传至OSS。本文示例的Python程序名为example.py,用于读取文本文件readme.txt的第一行内容。

    import sys
    
    from pyspark.sql import SparkSession
    
    # 初始Spark
    spark = SparkSession.builder.appName('OSS Example').getOrCreate()
    # 读取指定的文件,文件路径由args传入的参数值来指定
    textFile = spark.sparkContext.textFile(sys.argv[1])
    # 计算文件行数并打印
    print("File total lines: " + str(textFile.count()))
    # 打印文件的第一行内容
    print("First line is: " + textFile.first())
    

步骤二:访问OSS数据

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在企业版、基础版或湖仓版页签下,单击目标集群ID。

  2. 在左侧导航栏,单击作业开发 > Spark Jar 开发

  3. 在编辑器窗口上方,选择Job型资源组和Spark应用类型。本文以Batch类型为例。

  4. 在编辑器中输入以下Spark代码。读取OSS中的文件并打印出来行数和第一行内容。

    同账号访问OSS数据

    {
      "args": ["oss://testBucketName/data/readme.txt"],
      "name": "spark-oss-test",
      "file": "oss://testBucketName/data/example.py",
      "conf": {
        "spark.driver.resourceSpec": "small",
        "spark.executor.resourceSpec": "small",
        "spark.executor.instances": 1
      }
    }

    参数说明:

    参数名称

    参数说明

    args

    传入Spark应用的参数值,多个参数值之间以英文逗号(,)分隔。

    本文示例将文本文件的OSS路径赋值给textFile

    name

    Spark应用的名称。

    file

    Spark应用主文件的存储路径。主文件是入口类所在的JAR包或者Python的入口执行文件。

    重要

    Spark应用主文件目前只支持存储在OSS中。

    spark.adb.roleArn

    跨账号访问外部数据源时使用的RAM角色。多个角色之间使用英文逗号(,)隔开。格式为acs:ram::<testAccountID>:role/<testUserName>

    • <testAccountID>:外部数据源所在的阿里云账号ID。

    • <testUserName>:跨账号授权时,所创建的RAM角色名称。详细信息,请参见账号授权

    说明

    同账号访问OSS数据源时无需配置该参数。

    conf

    与开源Spark中的配置项基本一致,参数格式为key: value形式,多个参数之间以英文逗号(,)分隔。与开源Spark用法不一致的配置参数及AnalyticDB for MySQL特有的配置参数,请参见Spark应用配置参数说明

    跨账号访问OSS数据

    {
      "args": ["oss://testBucketName/data/readme.txt"],
      "name": "CrossAccount",
      "file": "oss://testBucketName/data/example.py",
      "conf": {
        "spark.adb.roleArn": "acs:ram::testAccountID:role/<testUserName>",
        "spark.driver.resourceSpec": "small",
        "spark.executor.resourceSpec": "small",
        "spark.executor.instances": 1  
      }
    }

    参数说明:

    参数名称

    参数说明

    args

    传入Spark应用的参数值,多个参数值之间以英文逗号(,)分隔。

    本文示例将文本文件的OSS路径赋值给textFile

    name

    Spark应用的名称。

    file

    Spark应用主文件的存储路径。主文件是入口类所在的JAR包或者Python的入口执行文件。

    重要

    Spark应用主文件目前只支持存储在OSS中。

    spark.adb.roleArn

    跨账号访问外部数据源时使用的RAM角色。多个角色之间使用英文逗号(,)隔开。格式为acs:ram::<testAccountID>:role/<testUserName>

    • <testAccountID>:外部数据源所在的阿里云账号ID。

    • <testUserName>:跨账号授权时,所创建的RAM角色名称。详细信息,请参见账号授权

    说明

    同账号访问OSS数据源时无需配置该参数。

    conf

    与开源Spark中的配置项基本一致,参数格式为key: value形式,多个参数之间以英文逗号(,)分隔。与开源Spark用法不一致的配置参数及AnalyticDB for MySQL特有的配置参数,请参见Spark应用配置参数说明

  5. 单击立即执行

    执行完成后,您可以在Spark Jar开发页面应用列表页签中的日志查看数据。详情请参见Spark开发编辑器

相关文档