云服务器内容精选

  • 如何处理终端输出中文乱码问题? 针对终端输出中文乱码的问题,解决方式有如下两种: 在运行配置启动参数中加入VMOptions参数: -Dfile.encoding=gbk; 这种方法可以解决部分的乱码问题,考虑到实际项目中可能用到Scanner的交互式输入的场景比较少,可以先尝试此方法。 将输出重定向到调试控制台里面:将运行配置中Console设置项中的integrated改成internal。 父主题: CodeArts IDE for Java常见问题
  • 临时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 deleteResource(DLIClient client) throws DLIException { String resourceName = "xxxxx"; //group:资源包不在分组内,可不传入该参数 String group= "xxxxxx"; // 调用DLIClient对象的deleteResource方法删除资源 client.deleteResource(resourceName,group); System.out.println("---------- deleteResource success ---------"); }
  • 查询指定资源包 您可以使用该接口查询指定的资源包信息,示例代码如下: 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); }
  • 将临时启动配置保存为永久配置 您可以将临时启动配置保存为永久配置,以防止其被删除。 在CodeArts IDE主工具栏上的配置列表中,选择Edit Configuration。 在打开的Debug Configuration中,在左侧的配置列表中,选择要保存为永久配置的配置。然后,在配置参数中,将Temporary切换为False。 或者,您可以在launch.json中找到相应的启动配置记录,并为其提供"temporary": false顶级属性,例如: { "type": "javadbg", "name": "Java Class", "request": "launch", "mainClass": { "name": "com.example.Main", "console": "integrated" }, "temporary": false }
  • 向现有的launch.json添加新的配置 执行以下任一操作: 在launch.json编辑器中,单击编辑器右下角的 Add Configuration按钮,或将光标放置在configurations数组内,并使用代码完成(“Ctrl+I” / “Ctrl+Space” / “Ctrl+Shift+Space”(IDEA键盘映射))。 在CodeArts IDE主工具栏上的配置列表中选择Add Configuration。 在弹出的建议列表中,选择要使用的启动配置模板。 在launch.json中,使用代码完成(“Ctrl+I” / “Ctrl+Space” / “Ctrl+Shift+Space”(IDEA键盘映射))查看可用属性及其值的列表。
  • 变量替换 CodeArts IDE将常用路径和其他值作为变量提供,并支持在launch.json中的字符串中进行变量替换,因此您不必在启动配置中使用绝对路径。 支持以下预定义变量: ${cwd} - CodeArts IDE启动时任务运行器的当前工作目录。 ${defaultBuildTask} - 默认构建任务的名称。 ${extensionInstallFolder} - 指定扩展安装的路径。 ${fileBasenameNoExtension} - 当前打开文件的无扩展名的基本名称。 ${fileBasename} - 当前打开文件的基本名称。 ${fileDirname} - 当前打开文件的目录名。 ${fileExtname} - 当前打开文件的扩展名。 ${file} - 当前打开的文件。 ${lineNumber} - 活动文件中当前选定的行号。 ${pathSeparator} - 操作系统用于分隔文件路径组件的字符。 ${relativeFileDirname} - 相对于workspaceFolder的当前打开文件的目录名。 ${relativeFile} - 相对于workspaceFolder的当前打开文件。 ${selectedText} - 活动文件中当前选定的文本。 ${workspaceFolderBasename} - 在CodeArts IDE中打开的文件夹的名称,不包含任何斜杠(/)。 ${workspaceFolder} - 在CodeArts IDE中打开的文件夹的路径。