本文介绍如何通过Serverless Spark访问OSS数据源。您需要先配置访问OSS的权限,然后可以使用SQL的方式或者提交代码包(Python或者Jar包)的方式访问OSS。

配置DLA访问OSS的权限

在访问OSS数据之前,您需要先确认您是否拥有在DLA平台访问OSS数据的权限。

如果您是主账号,则默认拥有您账号下所有OSS数据以及DLA OSS表的访问权限,无需配置,可直接使用。

如果您使用RAM子账号提交代码包作业,需要配置代码包和Spark代码所访问OSS数据的权限,您可以参考配置文档RAM子账号权限配置进行配置。

如果您使用Spark SQL访问DLA OSS表的数据,您需要确保您的RAM子账号关联了DLA账号(可以参考文档DLA 子账号绑定 RAM 子账号),并且DLA账号拥有对应表的访问权限。DLA表的权限,您可以在DLA SQL执行控制台执行SQL,使用”GRANT“/”REVOKE“语法,该语法兼容MySQL协议。

Spark OSS Connector配置

配置了OSS访问权限之后,您就可以使用Spark来访问OSS数据了。在Spark的作业配置文件中,您需要添加配置项“spark.dla.connectors” : “oss”。DLA平台内置了Spark OSS Connector相关的实现,默认不生效,需要通过该参数令其生效。如果您有Spark OSS Connector的其他实现,您不需要配置该参数,您只需提交您自己的实现Jar包,并添加相应的配置即可。

Spark SQL访问OSS数据

DLA平台支持用户不提交代码包直接提交Spark SQL语句的方式来访问DLA数据表,可以参考文档Spark SQL。作业示例配置如下所示:
{
    "sqls": [
        "select * from `1k_tables`.`table0` limit 100",
        "insert into `1k_tables`.`table0` values(1, 'test')"
    ],
    "name": "sql oss test",
    "conf": {
        "spark.dla.connectors": "oss",
        "spark.driver.resourceSpec": "small",
        "spark.sql.hive.metastore.version": "dla",
        "spark.executor.instances": 10,
        "spark.dla.job.log.oss.uri": "oss://test/spark-logs",
        "spark.executor.resourceSpec": "small"
    }
}

Spark代码访问OSS数据

您可以使用Java、Scala、Python代码访问OSS数据,下面以Scala为例给以说明:
{  
  "args": ["oss://${oss-buck-name}/data/test/test.csv"],
  "name": "spark-oss-test",
  "file": "oss://${oss-buck-name}/jars/test/spark-examples-0.0.1-SNAPSHOT.jar",
  "className": "com.aliyun.spark.oss.SparkReadOss",
  "conf": {
    "spark.driver.resourceSpec": "medium",
    "spark.executor.resourceSpec": "medium",
    "spark.executor.instances": 2,
    "spark.dla.connectors": "oss"
  }
}
说明 主类中SparkReadOss对应的源码可以参考DLA Spark OSS demo