-
临时AK/SK认证方式样例代码 方法定义 DwsRestClient(String endpoint, String accessKey, String secretKey, String securityToken) 参数说明 参数名 是否必填 描述 endpoint 是 FabricSQL提供的服务地址。 accessKey 是 临时接入键标识 secretKey 是 临时安全接入键 securityToken 是 临时访问密钥Token 代码样例 // 从环境变量读取参数(推荐方式)
String endpoint = "example.com";
String accessKey = System.getenv("FABRICLSQL_AC
CES S_KEY");
String secretKey = System.getenv("FABRICLSQL_SECRET_KEY")
String securityToken = System.getenv("FABRICLSQL_SECURITY_TOKEN");
// 验证参数是否为空(可选)
if (endpoint == null || accessKey == null || secretKey == null || securityToken == null) {
throw new IllegalArgumentException("Missing required environment variables");
}
DwsRestClient client = new DwsRestClient(endpoint, accessKey, secretKey, securityToken);
-
永久AK/SK认证方式样例代码 方法定义 DwsRestClient(String endpoint, String accessKey, String secretKey) 参数说明 参数名 是否必填 描述 endpoint 是 FabricSQL提供的服务地址。 accessKey 是 接入键标识 secretKey 是 安全接入键 代码样例 // 从环境变量读取参数(推荐方式)
String endpoint = "example.com";
String accessKey = System.getenv("FABRICLSQL_ACCESS_KEY");
String secretKey = System.getenv("FABRICLSQL_SECRET_KEY");
// 验证参数是否为空(可选)
if (endpoint == null || accessKey == null || secretKey == null) {
throw new IllegalArgumentException("Missing required environment variables");
}
DwsRestClient client = new DwsRestClient(endpoint, accessKey, secretKey); 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 本示例以AK和SK保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量FABRICLSQL_ACCESS_KEY和FABRICLSQL_SECRET_KEY。
-
AK/SK认证方式样例代码 代码样例 1
2
3
4
5
6 String ak = System.getenv("xxx_SDK_AK");//访问密钥ID。
String sk = System.getenv("xxx_SDK_SK");//与访问密钥ID结合使用的密钥。
String regionName = "regionname";
String projectId = "project_id";
DLI Info dliInfo = new DLIInfo(regionName, ak, sk, projectId);
DLIClient client = new DLIClient(AuthenticationMode.AKSK, dliInfo);
参数说明及获取方式 参数说明 ak:账号 Access Key sk:账号 Secret Access Key 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放, 使用时解密, 确保安全。 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量xxx_SDK_AK和xxx_SDK_SK。 regionName :所属区
域名 称 projectId :项目ID 通过以下方式可获取AK/SK,项目ID及对应的region信息。 登录管理控制台。 鼠标指向界面右上角的登录用户名,在下拉列表中单击“我的凭证”。 在左侧导航栏中选择“访问密钥”,单击“新增访问密钥”。根据提示输入对应信息,单击“确定”。 在弹出的提示页面单击“立即下载”。下载成功后,打开凭证文件,获取AK/SK信息。 左侧导航栏单击“API凭证”,在“项目列表”中获取“项目ID”即为project_id值,对应的“项目”即为region的值。
-
Token认证方式样例代码 代码样例 1
2
3
4
5
6
7 String domainName = "domainname";
String userName = "username";
String password = "password";
String regionName = "regionname";
String projectId = "project_id";
DLIInfo dliInfo = new DLIInfo(regionName, domainName, userName, password, projectId);
DLIClient client = new DLIClient(AuthenticationMode.TOKEN, dliInfo);
参数说明 参数获取方式请参考获取账号、
IAM 用户、项目、用户组、区域、委托的名称和ID。 domainname:账号名。 username:用户名 password:用户名密码 regionname:所属区域名称 project_id:项目ID 认证用的password硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 可以通过set方式修改endpoint,即dliInfo.setServerEndpoint(endpoint)。
-
查询作业状态 相关链接 查询作业状态 示例代码 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 private static void checkRunning(DliClient dliClient, String jobId) throws DLIException {
while (true) {
ShowSqlJobStatusResponse resp;
try {
resp = dliClient.showSqlJobStatus(new ShowSqlJobStatusRequest().withJobId(jobId));
} catch (Exception e) {
throw new DLIException("Failed to get job status by id: " + jobId, e);
}
String status = resp.getStatus().getValue();
logger.info(String.format("SparkSQL Job id %s status: %s", jobId, status));
if ("FINISHED".equals(status)) {
return;
}
if ("FAILED".equals(status) || "CANCELLED".equals(status)) {
throw new DLIException("Run job failed or cancelled, details: " + resp.getMessage());
}
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
throw new DLIException("Check job running interrupted.");
}
}
}
-
查询作业结果 相关链接: SELECT查询语句 作业参数设置 关键SDK API: com.huawei.dli.sdk.read.ResultSet,纯OBS读数据相关API调用,DLI提供了一个默认 OBS csv reader实现,可依据业务需求自定义实现。具体操作参考OBS API参考。 com.huawei.dli.sdk.SQLJob#submitQuery(),需要开启结果写作业桶特性,否则默认只预览前1000条数据。 您可以通过查询作业状态API响应体中的 result_path 来判断是否已开启作业结果写作业桶特性。 待作业运行结束后,如果result_path 以 obs:// 开头,则已开启作业结果写作业桶特性,否则未开启。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 private static String queryData(DLIInfo dliInfo, String selectSql)
throws DLIException {
SQLJob sqlJob = new SQLJob(dliInfo, selectSql);
// 如有需要,您可在此处设置作业参数,比如:sqlJob.setConf()
// 1. 提交查询作业到DLI,使用DLI封装实现提交并等待结果。
// 注1:此处需要根据SQL执行时长预取设置超时时间,默认5min。
// 注2:此处需要开启作业结果写作业桶特性,否则默认只预览前1000条数据。
sqlJob.setJobTimeout(30 * 60);
ResultSet resultSet1 = null;
try {
resultSet1 = sqlJob.submitQuery();
handleResult(resultSet1);
} finally {
if (resultSet1 != null) {
resultSet1.close();
}
}
return sqlJob.getJobId();
}
-
查询指定作业的结果 使用说明 com.huawei.dli.sdk.SQLJob#getResultSet(),OBS读数据相关API调用,DLI提供了一个OBS csv reader实现,可依据业务需求自定义实现。 使用本方法的前提是需要开启结果写作业桶特性。可通过查询作业状态API响应体中的 result_path 来判断是否已开启作业结果写作业桶特性。待作业运行结束后,如果result_path 以 obs:// 开头,则已开启作业结果写作业桶特性,否则未开启。 相关链接 SQL语法参考基本语句 OBS文档 查询作业状态API 示例代码 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 private static void queryDataByJobId(DLIInfo dliInfo, String jobId)
throws DLIException {
// 检查该jobId对应的作业是否已运行结束,如未运行结束,则等待运行结束
SQLJob sqlJob = new SQLJob(dliInfo, null);
sqlJob.setJobId(jobId);
checkRunning(V3ClientUtils.getDliClient(dliInfo), jobId);
// 根据jobId,获取结果数据的schema、结果数据在用户作业桶中的存储路径
ShowSqlJobStatusResponse resp = V3ClientUtils.getDliClient(dliInfo)
.showSqlJobStatus(new ShowSqlJobStatusRequest().withJobId(jobId));
sqlJob.setJobStatus(resp.getStatus().getValue());
sqlJob.setResultSchema(SchemaUtils.getSchemaFromJson(resp.getDetail()));
sqlJob.setResultPath(resp.getResultPath());
sqlJob.setResultCount(resp.getResultCount() != null ? resp.getResultCount() : 0);
ResultSet resultSet = null;
try {
// 获取该jobId对应的查询结果, 并返回结果迭代器。
resultSet = sqlJob.getResultSet();
handleResult(resultSet);
} finally {
if (resultSet != null) {
resultSet.close();
}
}
}
-
操作前准备 获取AK/SK,项目ID及对应的Region信息。 管理控制台。 单击界面右上角的登录用户名,在下拉列表中单击“我的凭证”。 在左侧导航栏中选择“访问密钥”,单击“新增访问密钥”。根据提示输入对应信息,单击“确定”。 在弹出的提示页面单击“立即下载”。下载成功后,打开凭证文件,获取AK/SK信息。 左侧导航栏单击“API凭证”,在“项目列表”中获取“项目ID”即为project_id值,对应的“项目”即为region的值。
-
查询所有资源包 DLI提供查询资源列表接口,您可以使用该接口并选择相应的资源来执行作业。示例代码如下: 1
2
3
4
5
6
7
8
9
10
11 private static void listAllResources(DLIClient client) throws DLIException {
System.out.println("list all resources...");
// 通过调用DLIClient对象的listAllResources方法查询队列资源列表
Resources resources = client.listAllResources();
for (PackageResource packageResource : resources.getPackageResources()) {
System.out.println("Package resource name:" + packageResource.getResourceName());
}
for (ModuleResource moduleResource : resources.getModuleResources()) {
System.out.println("Module resource name:" + moduleResource.getModuleName());
}
}
-
查询指定资源包 您可以使用该接口查询指定的资源包信息,示例代码如下: private static void getResource(DLIClient client) throws DLIException {
String resourceName = "xxxxx";
//group:资源包不在分组内,可不传入该参数
String group= "xxxxxx";
// 调用DLIClient对象的getResource方法查询指定资源包
PackageResource packageResource=client.getResource(resourceName,group);
System.out.println(packageResource);
}
-
删除资源包 您可以使用该接口删除已上传的资源包,示例代码如下: private static void deleteResource(DLIClient client) throws DLIException {
String resourceName = "xxxxx";
//group:资源包不在分组内,可不传入该参数
String group= "xxxxxx";
// 调用DLIClient对象的deleteResource方法删除资源
client.deleteResource(resourceName,group);
System.out.println("---------- deleteResource success ---------");
}
-
代码示例 - 初始化MpcClient Endpoint调用前请您根据实际情况填写,并替换如下变量:"SDK_AK"、"SDK_SK"、{your endpoint string}和{your project id}。 package com.huaweicloud.sdk.test;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
public class InitMpc {
private static HttpConfig httpConfig;
private static BasicCredentials auth;
private static String endpoint;
private static MpcClient mpcClient;
public static MpcClient getMpcClient() {
httpConfig = HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxx").withProxyPort(xxxxx).withProxyUsername("xxxxx").
// withProxyPassword("xxxxx");
String ak = System.getenv("SDK_AK");
String sk = System.getenv("SDK_SK");
String projectId = System.getenv("PROJECT_ID");
endpoint = "https://mpc.region01.myhuaweicloud.com";
auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
mpcClient = MpcClient.newBuilder()
.withHttpConfig(httpConfig)
.withCredential(auth)
.withEndpoint(endpoint)
.build();
return mpcClient;
}
}
-
初始化Client 初始化HotWordClient,其参数包括AuthInfo和SisConfig。 表1 AuthInfo 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 region 是 String 区域,如cn-north-4,参考终端节点。 projectId 是 String 项目ID,同region一一对应,参考获取项目ID。 endpoint 否 String 终端节点,参考地区和终端节点。 表2 SisConfig 参数名称 是否必选 参数类型 描述 connectionTimeout 否 Integer 连接超时,默认10000,单位ms。 readTimeout 否 Integer 读取超时,默认10000,单位ms。
-
请求参数 请求类为HotWordRequest,详见表3。 表3 HotWordRequest 参数名称 是否必选 参数类型 描述 name 是 String 热词表名,创建时不可重复。内容限制为字母,数字,下中划线和井号,长度不超过32字节。 language 是 String 热词表语言类型,目前支持汉语普通话“chinese_mandarin”。 contents 是 Array of String 热词库,单词库支持热词数上限10000。中文单个热词长度上限32字节。 description 否 String 热词表描述,长度不超过255字节。
-
功能说明 OBS客户端支持通过访问密钥、请求方法类型、请求参数等信息生成一个在Query参数中携带鉴权信息的URL,可将该URL提供给其他用户进行临时访问。在生成URL时,您需要指定URL的有效期来限制访客用户的访问时长。 如果您想授予其他用户对桶或对象临时进行其他操作的权限(例如上传或下载对象),则需要生成带对应请求的URL后(例如使用生成PUT请求的URL上传对象),将该URL提供给其他用户。 如果遇到跨域报错、签名不匹配问题,请参考以下步骤排查问题: 未配置跨域,需要在控制台配置CORS规则,请参考配置桶允许跨域请求。 签名计算问题,请参考URL中携带签名排查签名参数是否正确;比如上传对象功能,后端将Content-Type参与计算签名生成授权URL,但是前端使用授权URL时没有设置Content-Type字段或者传入错误的值,此时会出现跨域错误。解决方案为:Content-Type字段前后端保持一致。 不支持通过
CDN加速 后的域名生成临时访问URL。