更新时间:2026-10-21 GMT+08:00
获取Spark作业委托临时凭证用于访问其他云服务
功能描述
AI DataLake Spark提供了一个通用接口,可用于获取用户在启动Spark作业时设置的委托的临时凭证。该接口将获取到的作业委托的临时凭证封装到com.huaweicloud.sdk.core.auth.BasicCredentials类中。
- 获取到的委托的临时认证封装到com.huawei.spark.provider.DewProvider接口的getCredentials()返回值中。
- 返回类型为com.huaweicloud.sdk.core.auth.BasicCredentials。
- 仅支持获取AK、SK、SecurityToken。
- 获取到AK、SK、SecurityToken后,请参考如何使用凭据管理服务替换硬编码的数据库账号密码查询凭据。
约束限制
- 仅支持Spark 4.0版本(Spark通用队列场景)使用委托授权访问临时凭证:
- 在创建作业时,请配置作业使用Spark4.0版本。
- 已在作业中配置允许访问DEW的委托信息。
自定义委托请参考创建自定义委托。
请注意配置参数不需要用"" 或 '' 包裹。
- Spark4.0基础镜像内置了3.1.62版本的huaweicloud-sdk-core,无需重复安装。
准备环境
已安装和配置IntelliJ IDEA、JDK和Maven。
pom文件配置中依赖包:
1 2 3 4 5 6 | <dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-core</artifactId> <version>3.1.62</version> <scope>provided</scope> </dependency> |
代码示例
本章节JAVA代码示例演示如何获取BasicCredentials,以及获取临时委托的AK、SK、SecurityToken。
- Spark Jar作业获取作业委托凭证
import com.huaweicloud.sdk.core.auth.ICredentialProvider; import org.apache.spark.sql.SparkSession; import java.util.ArrayList; import java.util.List; import java.util.ServiceLoader; public class JobAgencyCredentialUtils { // 通过SPI加载所有凭证提供者,筛选出DEW服务的DewProvider实例。 public static ICredentialProvider getICredentialProvider() { List<ICredentialProvider> credentialProviders = new ArrayList<>(); ServiceLoader.load(ICredentialProvider.class, SparkSession.class.getClassLoader()) .iterator() .forEachRemaining(credentialProviders::add); if (credentialProviders.isEmpty()) { throw new RuntimeException("No ICredentialProvider found"); } return credentialProviders.stream() .filter(p -> p.getClass().getName().equals("com.huawei.spark.provider.DewProvider")) .findFirst() .orElseThrow(() -> new RuntimeException("DewProvider not found")); } } - 获取作业委托的工具类
import org.apache.spark.sql.SparkSession; import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.auth.ICredentialProvider; import static org.example.JobAgencyCredentialUtils.getICredentialProvider; public class GetUserCredentialsSparkJar { public static void main(String[] args) throws Exception { SparkSession spark = SparkSession .builder() .appName("test_spark") .getOrCreate(); ICredentialProvider credentialProvider = getICredentialProvider(); BasicCredentials basicCredentials = (BasicCredentials) credentialProvider.getCredentials(); String ak = basicCredentials.getAk(); String sk = basicCredentials.getSk(); String securityToken = basicCredentials.getSecurityToken(); // System.out.println("ak:" + ak); System.out.println("sk:" + sk); System.out.println("securityToken:" + securityToken); spark.stop(); } }