华为云用户手册

  • 手工用例执行 测试工程师角色可在用例执行阶段执行手工用例。 测试工程师进入到用例管理页面,选择手工用例,点击【执行】。 图6 执行手工用例 进入到用例执行页面,按照执行情况填写相关信息。其中,用例实际结果输入框为富文本框,支持点击最大化按钮全屏显示该富文本框。 实际结果:用例步骤执行的实际结果,支持最大化,支持粘贴截图; 备注:用例步骤执行的备注信息(可选); 附件:用例执行的附件文件(可选); 用例状态:包含待执行、执行中、执行完毕,选择其一; 结果备注:对于整个用例执行结果的备注信息。 如果用例状态选择”执行完毕”,必须选择执行结果,包含通过、不通过、带条件通过、不涉及。 图7 手工用例执行页面 完成后点击【确定】或者【确定并下一个用例】,保存该用例的执行信息,点击【上一个用例】【下一个用例】可以快速进入上一个/下一个用例的执行界面。
  • 步骤5:在 DLI 作业开发时使用LakeFormation元数据 DLI对接LakeFormation默认实例且完成LakeFormation的资源授权后,即可以在作业开发时使用LakeFormation元数据。 DLI SQL: LakeFormation SQL语法说明请参考DLI Spark SQL语法参考。 在执行SQL作业时,您可以在控制台选择执行SQL所在的catalog,如图2所示,或在SQL命令中指定catalogName。catalogName是DLI控制台的数据目录映射名。 图2 在SQL编辑器页面选择数据目录 对接LakeFormation实例场景,在创建数据库时需要指定数据库存储的OBS路径。 对接LakeFormation实例场景,在创建表时不支持设置表生命周期和多版本。 对接LakeFormation实例场景,LOAD DATA语句不支持datasource表,且LOAD DATA分区表必须指定分区。 在LakeFormation控制台创建的数据库和表中包含中文字符时,不支持在DLI执行相关数据库和表的操作。 对接LakeFormation实例场景,不支持指定筛选条件删除分区。 对接LakeFormation实例场景,不支持创建Truncate Datasource/Hive外表。 DLI暂不支持使用LakeFormation行过滤条件功能。 DLI读取binary类型的数据进行console展示时,会对binary数据进行Base64转换。 在DLI暂不支持LakeFormation的路径授权。 DLI Spark Jar: 本节介绍在DLI管理控制台提交Spark Jar作业时使用LakeFormation元数据的配置操作。 Spark Jar 示例 SparkSession spark = SparkSession.builder() .enableHiveSupport() .appName("java_spark_demo") .getOrCreate(); spark.sql("show databases").show(); DLI管理控制台Spark Jar作业配置说明 (推荐)方式一:使用控制台提供的参数项(委托、元数据来源等)配置Spark Jar作业访问LakeFormation元数据 新建或编辑Spark Jar作业时,请参考表3Spark Jar作业访问LakeFormation元数据。 表3 配置Spark Jar作业访问LakeFormation元数据 参数 说明 配置示例 Spark版本 Spark 3.3.x及以上版本支持对接LakeFormation。 3.3.1 委托 使用Spark 3.3.1及以上版本的引擎执行作业时,需要您先在 IAM 页面创建相关委托,并在此处添加新建的委托信息。选择该参数后系统将自动为您的作业添加以下配置: spark.dli.job.agency.name=agency 委托权限示例请参考创建DLI自定义委托权限和常见场景的委托权限策略。 - 访问元数据 配置开启Spark作业访问元数据功能。 是 元数据来源 配置Spark作业访问的元数据类型。本场景下请选择Lakeformation。 选择该参数后系统将自动为您的作业添加以下配置项用于加载lakeformation相关依赖。 spark.sql.catalogImplementation=hive spark.hadoop.hive-ext.dlcatalog.metastore.client.enable=true spark.hadoop.hive-ext.dlcatalog.metastore.session.client.class=com.huawei.cloud.dalf.lakecat.client.hiveclient.LakeCatMetaStoreClient og // lakeformation相关依赖加载 spark.driver.extraClassPath=/usr/share/extension/dli/spark-jar/lakeformation/* spark.executor.extraClassPath=/usr/share/extension/dli/spark-jar/lakeformation/* “元数据来源”还支持在Spark(--conf)参数中配置,且系统优先以Spark(--conf)中配置信息为准。 优先推荐您使用控制台提供的“元数据来源”参数项进行配置。 Lakeformation 数据目录名称 配置Spark作业访问的数据目录名称。 此处选择的是在DLI管理控制台创建的数据目录,即DLI与Lakeformation默认实例下的数据目录的映射,该数据目录连接的是LakeFormation默认实例下的数据目录。如需指定LakeFormation其他实例请参考◦方式二:使用Spark(--conf)参数配置...在Spark(--conf)中配置连接的Lakeformation实例和数据目录。 选择该参数后系统将自动为您的作业添加以下配置项用于连接Lakeformation默认实例下的数据目录。 spark.hadoop.lakecat.catalogname.default=lfcatalog “数据目录名称”还支持在Spark(--conf)参数中配置,且系统优先以Spark(--conf)中配置信息为准。 优先推荐您使用控制台提供的“数据目录名称”参数项进行配置。 - Spark参数(--conf) “元数据来源”和“数据目录名称”均支持在Spark(--conf)参数中配置,且系统优先以Spark(--conf)中配置信息为准。 如果您需要配置访问Hudi数据表,可在Spark(--conf)参数中填加以下配置项。 spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension spark.hadoop.hoodie.write.lock.provider=org.apache.hudi.lakeformation.LakeCatMetastoreBasedLockProvider 如果您需要配置访问Delta数据表,可在Spark(--conf)参数中填加以下配置项。 spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension - 方式二:使用Spark(--conf)参数配置Spark Jar作业访问LakeFormation元数据 新建或编辑Spark Jar作业时,请在作业配置页面的Spark(--conf)参数中按需配置以下信息以访问LakeFormation元数据。 spark.sql.catalogImplementation=hive spark.hadoop.hive-ext.dlcatalog.metastore.client.enable=true spark.hadoop.hive-ext.dlcatalog.metastore.session.client.class=com.huawei.cloud.dalf.lakecat.client.hiveclient.LakeCatMetaStoreClient spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension //支持hudi,可选 spark.hadoop.hoodie.write.lock.provider=org.apache.hudi.lakeformation.LakeCatMetastoreBasedLockProvider //支持hudi,可选 // 使用有OBS和lakeformation权限的委托访问,建议用户设置最小权限集 spark.dli.job.agency.name=agencyForLakeformation //需要访问的lakeformation实例ID,在lakeformation console查看。可选,如不填写访问Lakeformation的默认实例 spark.hadoop.lakeformation.instance.id=xxx //需要访问的lakeformation侧的CATA LOG 名称,在lakeformation console查看。可选,如不填写则默认值为hive spark.hadoop.lakecat.catalogname.default=lfcatalog // lakeformation相关依赖加载 spark.driver.extraClassPath=/usr/share/extension/dli/spark-jar/lakeformation/* spark.executor.extraClassPath=/usr/share/extension/dli/spark-jar/lakeformation/* DLI Flink OpenSource SQL 示例1:委托的方式对接Lakeformation 创建Flink OpenSource SQL作业并配置如下参数: 参数 说明 配置示例 Flink版本 Flink 1.15及以上版本支持对接LakeFormation。 1.15 委托 使用Flink 1.15及以上版本的引擎执行作业时,需要您先在IAM页面创建相关委托,并在此处添加新建的委托信息。选择该参数后系统将自动为您的作业添加以下配置: flink.dli.job.agency.name=agency 委托权限示例请参考创建DLI自定义委托权限和常见场景的委托权限策略。 - 开启checkpoint 勾选开启checkpoint。 开启 自定义参数 配置Flink作业访问的元数据类型。 本场景下请选择Lakeformation。 flink.dli.job.catalog.type=lakeformation 配置Flink作业访问的数据目录名称。 flink.dli.job.catalog.name=[lakeformation中的catalog名称] 此处选择的是在DLI管理控制台创建的数据目录,即DLI与Lakeformation默认实例下的数据目录的映射,该数据目录连接的是LakeFormation默认实例下的数据目录。 - 示例中关于Catalog的参数说明请参考表4 表4 Flink OpenSource SQL示例中关于Catalog的参数说明 参数 说明 是否必填 参数值 type catalog类型 是 固定值hive hive-conf-dir hive-conf路径,固定值/opt/flink/conf 是 固定值/opt/flink/conf default-database 默认数据库名称 否 默认default库 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 27 28 29 30 31 CREATE CATALOG hive WITH ( 'type' = 'hive', 'hive-conf-dir' = '/opt/flink/conf', -- 固定配置/opt/flink/conf 'default-database'='default' ); USE CATALOG hive; CREATE TABLE IF NOT EXISTS dataGenSource612 (user_id string, amount int) WITH ( 'connector' = 'datagen', 'rows-per-second' = '1', 'fields.user_id.kind' = 'random', 'fields.user_id.length' = '3' ); CREATE table IF NOT EXISTS printSink612 (user_id string, amount int) WITH ('connector' = 'print'); INSERT INTO printSink612 SELECT * FROM dataGenSource612; 示例2:DEW的方式对接Lakeformation 创建Flink OpenSource SQL作业并配置如下参数: 参数 说明 配置示例 Flink版本 Flink 1.15及以上版本支持对接LakeFormation。 1.15 委托 使用Flink 1.15及以上版本的引擎执行作业时,需要您先在IAM页面创建相关委托,并在此处添加新建的委托信息。选择该参数后系统将自动为您的作业添加以下配置: flink.dli.job.agency.name=agency 委托权限示例请参考创建DLI自定义委托权限和常见场景的委托权限策略。 - 开启checkpoint 勾选开启checkpoint。 开启 自定义参数 配置Flink作业访问的元数据类型。 本场景下请选择Lakeformation。 flink.dli.job.catalog.type=lakeformation 配置Flink作业访问的数据目录名称。 flink.dli.job.catalog.name=[lakeformation中的catalog名称] 此处选择的是在DLI管理控制台创建的数据目录,即DLI与Lakeformation默认实例下的数据目录的映射,该数据目录连接的是LakeFormation默认实例下的数据目录。 - 示例中关于Catalog的参数说明请参考表5 需要指定properties.catalog.lakeformation.auth.identity.util.class参数值为com.huawei.flink.provider.lakeformation.FlinkDewIdentityGenerator,并且配置dew相关配置。 表5 Flink OpenSource SQL示例中关于Catalog的参数说明(DEW方式) 参数 说明 是否必填 参数值 type catalog类型 是 固定值hive hive-conf-dir hive-conf路径,固定值/opt/flink/conf 是 固定值/opt/flink/conf default-database 默认数据库名称 否 不填默认default库 properties.catalog.lakecat.auth.identity.util.class 认证信息获取类 是 dew方式必填,固定配置为com.huawei.flink.provider.lakeformation.FlinkDewIdentityGenerator properties.catalog.dew.projectId DEW所在的项目ID, 默认是Flink作业所在的项目ID。 是 使用dew方式必填 properties.catalog.dew.endpoint 指定要使用的DEW服务所在的endpoint信息。 是 使用dew方式必填。 配置示例:kms.xxx.com properties.catalog.dew.csms.secretName 在DEW服务的凭据管理中新建的通用凭据的名称。 是 使用dew方式必填 properties.catalog.dew.csms.version 在DEW服务的凭据管理中新建的通用凭据的版本号。 是 使用dew方式必填 properties.catalog.dew.access.key 在DEW服务的凭据中配置access.key值对应的key 是 使用dew方式必填 properties.catalog.dew.secret.key 在DEW服务的凭据中配置secret.key值对应的key 是 使用dew方式必填 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 27 28 29 30 31 32 33 34 35 36 CREATE CATALOG myhive WITH ( 'type' = 'hive', 'hive-conf-dir' = '/opt/flink/conf', 'default-database'='default', --下边是dew相关配置,请根据实际情况修改参数值 'properties.catalog.lakeformation.auth.identity.util.class' = 'com.huawei.flink.provider.lakeformation.FlinkDewIdentityGenerator', 'properties.catalog.dew.endpoint'='kms.xxx.com', 'properties.catalog.dew.csms.secretName'='obsAksK', 'properties.catalog.dew.access.key' = 'myak', 'properties.catalog.dew.secret.key' = 'mysk', 'properties.catalog.dew.projectId'='330e068af1334c9782f4226xxxxxxxxx', 'properties.catalog.dew.csms.version'='v9' ); USE CATALOG myhive; create table IF NOT EXISTS dataGenSource_dew612( user_id string, amount int ) with ( 'connector' = 'datagen', 'rows-per-second' = '1', 'fields.user_id.kind' = 'random', 'fields.user_id.length' = '3' ); create table IF NOT EXISTS printSink_dew612( user_id string, amount int ) with ( 'connector' = 'print' ); insert into printSink_dew612 select * from dataGenSource_dew612; 示例3:委托的方式对接Lakeformation写hudi表 创建Flink OpenSource SQL作业并配置如下参数: 参数 说明 配置示例 Flink版本 Flink 1.15及以上版本支持对接LakeFormation。 1.15 委托 使用Flink 1.15及以上版本的引擎执行作业时,需要您先在IAM页面创建相关委托,并在此处添加新建的委托信息。选择该参数后系统将自动为您的作业添加以下配置: flink.dli.job.agency.name=agency 委托权限示例请参考创建DLI自定义委托权限和常见场景的委托权限策略。 - 开启checkpoint 勾选开启checkpoint。 开启 自定义参数 配置Flink作业访问的元数据类型。 本场景下请选择Lakeformation。 flink.dli.job.catalog.type=lakeformation 配置Flink作业访问的数据目录名称。 flink.dli.job.catalog.name=[lakeformation中的catalog名称] 此处选择的是在DLI管理控制台创建的数据目录,即DLI与Lakeformation默认实例下的数据目录的映射,该数据目录连接的是LakeFormation默认实例下的数据目录。 - 示例中关于Catalog的参数说明请参考表6。 表6 hudi类型Catalog参数说明 参数 说明 是否必填 参数值 type catalog类型 是 hudi表配置为hudi。 hive-conf-dir hive-conf路径,固定值/opt/flink/conf 是 固定值/opt/flink/conf。 default-database 默认数据库名称 否 默认default库。 mode 取值'hms' 或 'non-hms'。 'hms' 表示创建的 Hudi Catalog 会使用 Hive Metastore 存储元数据信息。 'non-hms'表示不使用Hive Metastore存储元数据信息。 是 固定值hms。 表7 hudi类型sink表的connector参数 参数 说明 是否必填 参数值 connector flink connector类型。 配置为hudi表示sink表是hudi表。 是 hudi path 表的基本路径。如果该路径不存在,则会创建它。 是 请参考示例代码中的配置值。 hoodie.datasource.write.recordkey.field hoodie表的唯一键字段名 否 这里配置order_id为唯一键。 EXTERNAL 是否外表 是 hudi表必填,且设置为true true CREATE CATALOG hive_catalog WITH ( 'type'='hive', 'hive-conf-dir' = '/opt/flink/conf', 'default-database'='test' ); USE CATALOG hive_catalog; create table if not exists genSource618 ( order_id STRING, order_name STRING, price INT, weight INT ) with ( 'connector' = 'datagen', 'rows-per-second' = '1', 'fields.order_id.kind' = 'random', 'fields.order_id.length' = '8', 'fields.order_name.kind' = 'random', 'fields.order_name.length' = '5' ); CREATE CATALOG hoodie_catalog WITH ( 'type'='hudi', 'hive.conf.dir' = '/opt/flink/conf', 'mode'='hms' -- supports 'dfs' mode that uses the DFS backend for table DDLs persistence ); CREATE TABLE if not exists hoodie_catalog.`test`.`hudiSink618` ( `order_id` STRING PRIMARY KEY NOT ENFORCED, `order_name` STRING, `price` INT, `weight` INT, `create_time` BIGINT, `create_date` String ) PARTITIONED BY (create_date) WITH ( 'connector' = 'hudi', 'path' = 'obs://xxx/catalog/dbtest3/hudiSink618', 'hoodie.datasource.write.recordkey.field' = 'order_id', 'write.precombine.field' = 'create_time', 'EXTERNAL' = 'true' -- must be set ); insert into hoodie_catalog.`test`.`hudiSink618` select order_id, order_name, price, weight, UNIX_TIMESTAMP() as create_time, FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyyMMdd') as create_date from genSource618; DLI Flink Jar 示例1:委托方式对接Lakeformation 开发Flink jar程序,编译并上传jar包到obs,本例上传到obs://obs-test/dlitest/目录 示例代码如下: 本例通过DataGen表产生随机数据并输出到Print结果表中。 其他connector类型可参考Flink 1.15支持的connector列表。 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 package com.huawei.test; import org.apache.flink.api.java.utils.ParameterTool; import org.apache.flink.contrib.streaming.state.RocksDBStateBackend; import org.apache.flink.runtime.state.filesystem.FsStateBackend; import org.apache.flink.streaming.api.CheckpointingMode; import org.apache.flink.streaming.api.environment.CheckpointConfig; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.EnvironmentSettings; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.SimpleDateFormat; @SuppressWarnings({"deprecation", "rawtypes", "unchecked"}) public class GenToPrintTaskAgency { private static final Logger LOGGER = LoggerFactory.getLogger(GenToPrintTaskAgency.class); private static final String datePattern = "yyyy-MM-dd_HH-mm-ss"; public static void main(String[] args) { LOGGER.info("Start task."); ParameterTool paraTool = ParameterTool.fromArgs(args); String checkpointInterval = "180000000"; // set up execution environment StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); EnvironmentSettings settings = EnvironmentSettings.newInstance() .inStreamingMode().build(); StreamTableEnvironment tEnv = StreamTableEnvironment.create(env, settings); env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE); env.getCheckpointConfig().setCheckpointInterval(Long.valueOf(checkpointInterval)); env.getCheckpointConfig().enableExternalizedCheckpoints( CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); SimpleDateFormat dateTimeFormat = new SimpleDateFormat(datePattern); String time = dateTimeFormat.format(System.currentTimeMillis()); RocksDBStateBackend rocksDbBackend = new RocksDBStateBackend( new FsStateBackend("obs://obs/xxx/testcheckpoint/" + time), true); env.setStateBackend(rocksDbBackend); String createCatalog = "CREATE CATALOG lf_catalog WITH (\n" + " 'type' = 'hive',\n" + " 'hive-conf-dir' = '/opt/hadoop/conf'\n" + " );"; tEnv.executeSql(createCatalog); String dataSource = "CREATE TABLE if not exists lf_catalog.`testdb`.`dataGenSourceJar618_1` (\n" + " user_id string,\n" + " amount int\n" + ") WITH (\n" + " 'connector' = 'datagen',\n" + " 'rows-per-second' = '1',\n" + " 'fields.user_id.kind' = 'random',\n" + " 'fields.user_id.length' = '3'\n" + ")"; /*testdb是用户自定义的数数据库*/ tEnv.executeSql(dataSource); String printSink = "CREATE TABLE if not exists lf_catalog.`testdb`.`printSinkJar618_1` (\n" + " user_id string,\n" + " amount int\n" + ") WITH ('connector' = 'print')"; tEnv.executeSql(printSink); /*testdb是用户自定义的数数据库*/ String query = "insert into lf_catalog.`test`.`printSinkJar618_1` " + "select * from lf_catalog.`test`.`dataGenSourceJar618_1`"; tEnv.executeSql(query); } } 创建Flink jar作业并配置如下参数。 参数 说明 配置示例 Flink版本 Flink 1.15及以上版本支持对接LakeFormation。 1.15 委托 使用Flink 1.15及以上版本的引擎执行作业时,需要您先在IAM页面创建相关委托,并在此处添加新建的委托信息。选择该参数后系统将自动为您的作业添加以下配置: flink.dli.job.agency.name=agency 委托权限示例请参考创建DLI自定义委托权限和常见场景的委托权限策略。 - 优化参数 配置Flink作业访问的元数据类型。 本场景下请选择Lakeformation。 flink.dli.job.catalog.type=lakeformation 配置Flink作业访问的数据目录名称。 flink.dli.job.catalog.name=[lakeformation中的catalog名称] 此处选择的是在DLI管理控制台创建的数据目录,即DLI与Lakeformation默认实例下的数据目录的映射,该数据目录连接的是LakeFormation默认实例下的数据目录。 - 示例2:DEW方式对接Lakeformation 开发Flink jar程序,编译并上传jar包到obs,本例上传到obs://obs-test/dlitest/目录 示例代码如下: 本例通过DataGen表产生随机数据并输出到Print结果表中。 其他connector类型可参考Flink 1.15支持的connector列表。 package com.huawei.test; import org.apache.flink.api.java.utils.ParameterTool; import org.apache.flink.contrib.streaming.state.RocksDBStateBackend; import org.apache.flink.runtime.state.filesystem.FsStateBackend; import org.apache.flink.streaming.api.CheckpointingMode; import org.apache.flink.streaming.api.environment.CheckpointConfig; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.EnvironmentSettings; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.SimpleDateFormat; @SuppressWarnings({"deprecation", "rawtypes", "unchecked"}) public class GenToPrintTaskDew { private static final Logger LOGGER = LoggerFactory.getLogger(GenToPrintTaskAgency.class); private static final String datePattern = "yyyy-MM-dd_HH-mm-ss"; public static void main(String[] args) { LOGGER.info("Start task."); ParameterTool paraTool = ParameterTool.fromArgs(args); String checkpointInterval = "180000000"; // set up execution environment StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); EnvironmentSettings settings = EnvironmentSettings.newInstance() .inStreamingMode().build(); StreamTableEnvironment tEnv = StreamTableEnvironment.create(env, settings); env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE); env.getCheckpointConfig().setCheckpointInterval(Long.valueOf(checkpointInterval)); env.getCheckpointConfig().enableExternalizedCheckpoints( CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); SimpleDateFormat dateTimeFormat = new SimpleDateFormat(datePattern); String time = dateTimeFormat.format(System.currentTimeMillis()); RocksDBStateBackend rocksDbBackend = new RocksDBStateBackend( new FsStateBackend("obs://obs/xxx/testcheckpoint/" + time), true); env.setStateBackend(rocksDbBackend); String createCatalog = "CREATE CATALOG lf_catalog WITH (\n" + " 'type' = 'hive',\n" + " 'hive-conf-dir' = '/opt/hadoop/conf',\n" + " 'properties.catalog.lakeformation.auth.identity.util.class' = 'com.huawei.flink.provider.lakeformation.FlinkDewIdentityGenerator',\n" + " 'properties.catalog.dew.endpoint'='kms.xxx.xxx.com',\n" + " 'properties.catalog.dew.csms.secretName'='obsAksK',\n" + " 'properties.catalog.dew.access.key' = 'ak',\n" + " 'properties.catalog.dew.secret.key' = 'sk',\n" + " 'properties.catalog.dew.projectId'='330e068af1334c9782f4226xxxxxxxxxx',\n" + " 'properties.catalog.dew.csms.version'='v9'\n" + " );"; tEnv.executeSql(createCatalog); String dataSource = "CREATE TABLE if not exists lf_catalog.`testdb`.`dataGenSourceJarDew618_1` (\n" + " user_id string,\n" + " amount int\n" + ") WITH (\n" + " 'connector' = 'datagen',\n" + " 'rows-per-second' = '1',\n" + " 'fields.user_id.kind' = 'random',\n" + " 'fields.user_id.length' = '3'\n" + ")"; tEnv.executeSql(dataSource); /*testdb是用户自定义的数数据库*/ String printSink = "CREATE TABLE if not exists lf_catalog.`testdb`.`printSinkJarDew618_1` (\n" + " user_id string,\n" + " amount int\n" + ") WITH ('connector' = 'print')"; tEnv.executeSql(printSink); /*testdb是用户自定义的数数据库*/ String query = "insert into lf_catalog.`test`.`printSinkJarDew618_1` " + "select * from lf_catalog.`test`.`dataGenSourceJarDew618_1`"; tEnv.executeSql(query); } } 创建Flink jar作业并配置如下参数。 参数 说明 配置示例 Flink版本 Flink 1.15及以上版本支持对接LakeFormation。 1.15 委托 使用Flink 1.15及以上版本的引擎执行作业时,需要您先在IAM页面创建相关委托,并在此处添加新建的委托信息。选择该参数后系统将自动为您的作业添加以下配置: flink.dli.job.agency.name=agency 委托权限示例请参考创建DLI自定义委托权限和常见场景的委托权限策略。 - 优化参数 配置Flink作业访问的元数据类型。 本场景下请选择Lakeformation。 flink.dli.job.catalog.type=lakeformation 配置Flink作业访问的数据目录名称。 flink.dli.job.catalog.name=[lakeformation中的catalog名称] 此处选择的是在DLI管理控制台创建的数据目录,即DLI与Lakeformation默认实例下的数据目录的映射,该数据目录连接的是LakeFormation默认实例下的数据目录。 - 示例3:Flink jar支持Hudi表 开发Flink jar程序,编译并上传jar包到obs,本例上传到obs://obs-test/dlitest/目录 示例代码如下: 本例通过DataGen表产生随机数据并输出到Hudi结果表中。 其他connector类型可参考Flink 1.15支持的connector列表。 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 package com.huawei.test; import org.apache.flink.api.java.utils.ParameterTool; import org.apache.flink.contrib.streaming.state.RocksDBStateBackend; import org.apache.flink.runtime.state.filesystem.FsStateBackend; import org.apache.flink.streaming.api.CheckpointingMode; import org.apache.flink.streaming.api.environment.CheckpointConfig; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.EnvironmentSettings; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.text.SimpleDateFormat; public class GenToHudiTask4 { private static final Logger LOGGER = LoggerFactory.getLogger(GenToHudiTask4.class); private static final String datePattern = "yyyy-MM-dd_HH-mm-ss"; public static void main(String[] args) throws IOException { LOGGER.info("Start task."); ParameterTool paraTool = ParameterTool.fromArgs(args); String checkpointInterval = "30000"; // set up execution environment StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); EnvironmentSettings settings = EnvironmentSettings.newInstance() .inStreamingMode().build(); StreamTableEnvironment tEnv = StreamTableEnvironment.create(env, settings); env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE); env.getCheckpointConfig().setCheckpointInterval(Long.valueOf(checkpointInterval)); env.getCheckpointConfig().enableExternalizedCheckpoints( CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); SimpleDateFormat dateTimeFormat = new SimpleDateFormat(datePattern); String time = dateTimeFormat.format(System.currentTimeMillis()); RocksDBStateBackend rocksDbBackend = new RocksDBStateBackend( new FsStateBackend("obs://xxx/jobs/testcheckpoint/" + time), true); env.setStateBackend(rocksDbBackend); String catalog = "CREATE CATALOG hoodie_catalog\n" + " WITH (\n" + " 'type'='hudi',\n" + " 'hive.conf.dir' = '/opt/hadoop/conf',\n" + " 'mode'='hms'\n" + " )"; tEnv.executeSql(catalog); String dwsSource = "CREATE TABLE if not exists genSourceJarForHudi618_1 (\n" + " order_id STRING,\n" + " order_name STRING,\n" + " price INT,\n" + " weight INT\n" + ") WITH (\n" + " 'connector' = 'datagen',\n" + " 'rows-per-second' = '1',\n" + " 'fields.order_id.kind' = 'random',\n" + " 'fields.order_id.length' = '8',\n" + " 'fields.order_name.kind' = 'random',\n" + " 'fields.order_name.length' = '8'\n" + ")"; tEnv.executeSql(dwsSource); /*testdb是用户自定义的数数据库*/ String printSinkdws = "CREATE TABLE if not exists hoodie_catalog.`testdb`.`hudiSinkJarHudi618_1` (\n" + " order_id STRING PRIMARY KEY NOT ENFORCED,\n" + " order_name STRING,\n" + " price INT,\n" + " weight INT,\n" + " create_time BIGINT,\n" + " create_date String\n" + ") WITH (" + "'connector' = 'hudi',\n" + "'path' = 'obs://xxx/catalog/dbtest3/hudiSinkJarHudi618_1',\n" + "'hoodie.datasource.write.recordkey.field' = 'order_id',\n" + "'EXTERNAL' = 'true'\n" + ")"; tEnv.executeSql(printSinkdws); /*testdb是用户自定义的数数据库*/ String query = "insert into hoodie_catalog.`testdb`.`hudiSinkJarHudi618_1` select\n" + " order_id,\n" + " order_name,\n" + " price,\n" + " weight,\n" + " UNIX_TIMESTAMP() as create_time,\n" + " FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyyMMdd') as create_date\n" + " from genSourceJarForHudi618_1"; tEnv.executeSql(query); } } 表8 hudi类型sink表的connector参数 参数 说明 是否必填 参数值 connector flink connector类型。 配置为hudi表示sink表是hudi表。 是 hudi path 表的基本路径。如果该路径不存在,则会创建它。 是 请参考示例代码中的配置值。 hoodie.datasource.write.recordkey.field hoodie表的唯一键字段名 否 这里配置order_id为唯一键。 EXTERNAL 是否外表 是 hudi表必填,且设置为true true 创建Flink jar作业并配置如下参数。 参数 说明 配置示例 Flink版本 Flink 1.15及以上版本支持对接LakeFormation。 1.15 委托 使用Flink 1.15及以上版本的引擎执行作业时,需要您先在IAM页面创建相关委托,并在此处添加新建的委托信息。选择该参数后系统将自动为您的作业添加以下配置: flink.dli.job.agency.name=agency 委托权限示例请参考创建DLI自定义委托权限和常见场景的委托权限策略。 - 优化参数 配置Flink作业访问的元数据类型。 本场景下请选择Lakeformation。 flink.dli.job.catalog.type=lakeformation 配置Flink作业访问的数据目录名称。 flink.dli.job.catalog.name=[lakeformation中的catalog名称] 此处选择的是在DLI管理控制台创建的数据目录,即DLI与Lakeformation默认实例下的数据目录的映射,该数据目录连接的是LakeFormation默认实例下的数据目录。 -
  • 步骤4:授权使用LakeFormation资源 SQL作业场景 在进行SQL作业提交之前,需完成LakeFormation元数据、数据库、表、列和函数等资源授权,确保作业在执行过程中能够顺利访问所需的数据和资源。LakeFormation SQL资源权限支持列表提供了LakeFormation权限支持列表。 使用LakeFormation资源需要分别完成LakeFormation的IAM细粒度授权和LakeFormation SQL资源授权。 LakeFormation的IAM细粒度授权:授权使用LakeFormation API。 IAM服务通常提供了管理用户、组和角色的访问权限的方式。您可以在IAM控制台中创建策略(Policy),定义哪些用户或角色可以调用LakeFormation的API。然后,将这些策略附加到相应的用户或角色上。 方法1:基于角色授权: 即IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。 例如参考LakeFormation权限管理授予用户只读权限,允许查询LakeFormation相关元数据资源的权限。 或如下示例授予LakeFormation相关元数据资源的所有操作权限。 示例: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "lakeformation:table:*", "lakeformation:database:*", "lakeformation:catalog:*", "lakeformation:function:*", "lakeformation:transaction:*", "lakeformation:policy:describe", "lakeformation:credential:describe" ] } ] } 方法2:基于策略的精细化授权: IAM提供的细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。 LakeFormation权限策略请参考LakeFormation权限和授权项。 IAM授权的具体操作请参考创建用户并授权使用LakeFormation。 LakeFormation SQL资源授权:授权使用LakeFormation具体资源(元数据、数据库、表、列和函数等)。 LakeFormation资源授权是指允许用户对特定资源的访问的权限,以此来控制对LakeFormation的数据和元数据的访问。 LakeFormation资源授权有两种方式: 方式一:在LakeFormation管理控制台对资源授权。 了解LakeFormation SQL资源权限请参考数据权限概述。 方式二:在DLI管理控制台使用GRANT SQL语句授权 GRANT语句是SQL语言中用于授权的一种方式。 您可以使用GRANT语句来授予用户或角色对数据库、表、列、函数等的访问权限。 LakeFormation SQL资源权限支持列表提供了LakeFormation资源授权的策略。 Catalog资源暂时不支持在DLI SQL授权,请参考▪方式一:在LakeFormation管理控制台...在LakeFormation 管理控制台完成授权。 Spark Jar、Flink OpenSource SQL、Flink Jar作业场景: 方式1:使用委托授权:使用Spark 3.3.1及以上版本、Flink 1.15版本的引擎执行作业时,需要您先在IAM页面创建相关委托,并在配置作业时添加新建的委托信息。 委托权限示例请参考创建DLI自定义委托权限和常见场景的委托权限策略。 方式2:使用DEW授权: 已为授予IAM用户所需的IAM和Lakeformation权限,具体请参考•SQL作业场景的IAM授权的操作步骤。 已在DEW服务创建通用凭证,并存入凭据值。具体操作请参考创建通用凭据。 已创建DLI访问DEW的委托并完成委托授权。该委托需具备以下权限: DEW中的查询凭据的版本与凭据值ShowSecretVersion接口权限,csms:secretVersion:get。 DEW中的查询凭据的版本列表ListSecretVersions接口权限,csms:secretVersion:list。 DEW解密凭据的权限,kms:dek:decrypt。 委托权限示例请参考创建DLI自定义委托权限和常见场景的委托权限策略。
  • 步骤3:在DLI管理控制台创建数据目录 在DLI管理控制台需要创建到Catalog的连接,才可以访问LakeFormation实例中存储的Catalog。 DLI仅支持对接LakeFormation默认实例,请在LakeFormation设置实例为默认实例。 LakeFormation中每一个数据目录只能创建一个映射,不能创建多个。 例如用户在DLI创建了映射名catalogMapping1对应LakeFormation数据目录:catalogA。创建成功后,在同一个项目空间下,不能再创建到catalogA的映射。 登录DLI管理控制台。 选择“SQL编辑器 ”。 在SQL编辑器页面,选择“数据目录”。 单击创建数据目录。 配置数据目录相关信息。 表2 数据目录配置信息 参数名称 是否必填 说明 外部数据目录名称 是 LakeFormation默认实例下的Catalog名称。 类型 是 当前只支持LakeFormation。 该选项已固定,无需填写。 数据目录映射名称 是 在DLI使用的Catalog映射名,用户在执行SQL语句的时候需要指定Catalog映射,以此来标识访问的外部的元数据。建议与外部数据目录名称保持一致。 当前仅支持连接LakeFormation默认实例的数据目录。 描述 否 自定义数据目录的描述信息。 单击“确定”创建数据目录。
  • 操作场景 LakeFormation是企业级一站式 湖仓构建 服务,提供元数据统一管理能力,支持无缝对接多种计算引擎及大数据云服务,便捷高效地构建 数据湖 和运营相关业务,加速释放业务数据价值。 在DLI的Spark作业和SQL作业场景,支持对接LakeFormation实现元数据的统一管理,本节操作介绍配置DLI与LakeFormation的数据连接的操作步骤。 LakeFormation Spark语法请参考Spark语法参考。 LakeFormation Flink语法请参考Flink语法参考。 HetuEngine SQL语法请参考HetuEngine SQL语法参考。
  • 约束限制 在表1中提供了支持对接LakeFormation获取元数据的队列和引擎类型。 查看队列的引擎类型和版本请参考查看队列的基本信息。 表1 LakeFormation获取元数据的队列和引擎类型 队列类型 引擎类型和支持的版本 default队列 Spark 3.3.x:支持对接LakeFormation获取元数据的队列和引擎。 HetuEngine 2.1.0:支持对接LakeFormation获取元数据的队列和引擎。 SQL队列 Spark 3.3.x:支持对接LakeFormation获取元数据的队列和引擎。 HetuEngine 2.1.0:支持对接LakeFormation获取元数据的队列和引擎。 通用队列 Flink作业场景:Flink 1.15及以上版本且使用弹性资源池队列时支持对接LakeFormation获取元数据。 DLI仅支持对接LakeFormation默认实例,请在LakeFormation设置实例为默认实例。 DLI支持读取Lakeformation的中Avro、Json、Parquet、Csv、Orc、Text、Hudi格式的数据。 LakeFormation数据目录中的库、表权限统一由LakeFormation管理。 DLI支持对接LakeFormation后,DLI原始库表下移至dli的数据目录下。
  • 步骤1:创建LakeFormation实例用于元数据存储 LakeFormation实例为元数据的管理提供基础资源,DLI仅支持对接LakeFormation的默认实例。 创建实例 登录LakeFormation管理控制台。 单击页面右上角“立即购买”或“购买实例”,进入实例购买页面。 首次创建实例时界面显示“立即购买”,如果界面已有LakeFormation实例则显示为“购买实例”。 按需配置LakeFormation实例参数,完成实例创建。 本例创建按需计费的共享型实例。 更多参数配置及说明,请参考创建LakeFormation实例。 设置实例为默认实例 查看实例“基本信息”中“是否为默认实例”的参数值。 “true”表示当前实例为默认实例。 “false”表示当前实例不为默认实例。 如果需要设置当前实例为默认实例,请单击页面右上角“设为默认实例”。 勾选操作影响后单击“确定”,将当前实例设置为默认实例。 当前DLI仅对接LakeFormation默认实例,变更默认实例后,可能对使用LakeFormation的周边服务产生影响,请谨慎操作。
  • CSS权限 默认情况下,CSS服务管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 CSS是项目级服务,部署时通过物理区域划分,需要在各区域(如华北-北京1)对应的项目(cn-north-1)中设置策略,并且该策略仅对此项目生效,如果需要所有区域都生效,则需要在所有项目都设置策略。访问CSS时,需要先切换至授权区域。 根据授权精细程度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:CSS服务管理员能够控制IAM用户仅能对某一类云服务器资源进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分,CSS服务支持的API授权项请参见权限策略和授权项。 如表1所示,包括了CSS的所有系统权限。 对于CSS Administrator,由于各服务之间存在业务交互关系,CSS的角色依赖其他服务的角色实现功能。因此给用户授予CSS的角色时,需要同时授予依赖的角色,CSS的权限才能生效。 对于CSS FullAccess和CSS ReadOnlyAccess,可使用这些策略来控制对云服务资源的访问范围。例如,您的员工中有负责软件开发的人员,您希望这类员工拥有CSS的使用权限,但是不希望这类员工拥有删除CSS等高危操作的权限,那么您可以使用IAM为开发人员创建IAM用户,通过授予仅能使用CSS但不允许删除CSS的权限,控制员工对CSS资源的使用范围。 表1 CSS系统权限 系统角色/策略名称 类别 权限描述 依赖关系 CSS Administrator 系统角色 CSS服务的所有执行权限。 该角色有依赖,需要在同项目中勾选依赖的Tenant Guest、Server Administrator和IAM ReadOnlyAccess角色。 终端节点访问集群操作需要依赖VPCEndpoint Administrator系统角色。 使用CES监控功能时需要依赖CES Administrator系统角色。 部分操作依赖如下授权项: 查看委托列表 iam:agencies:listAgencies iam:permissions:listRolesForAgency iam:permissions:listRolesForAgencyOnProject 自动创建委托 iam:agencies:listAgencies iam:agencies:createAgency iam:permissions:grantRoleToAgency 控制台显示企业项目和预定义标签 eps:enterpriseProjects:list tms:predefineTags:list 快照、词库、日志管理功能使用 obs:bucket:Get* obs:bucket:List* obs:object:List* obs:object:Get* obs:bucket:HeadBucket obs:object:PutObject obs:object:DeleteObject 包年/包月订单创建及支付 bss:order:update bss:order:pay 更多与订单相关操作所需要的授权项请见费用中心细粒度策略。 CSS FullAccess 系统策略 基于策略授权的CSS服务的所有权限,拥有该权限的用户可以完成基于策略授权的CSS服务的所有执行权限。 该策略部分权限有依赖,如果要使用对应的功能,需要在同项目中勾选依赖的权限。 CSS ReadOnlyAccess 系统策略 CSS服务的只读权限,拥有该权限的用户仅能查看CSS服务数据。 该策略部分权限有依赖,如果要使用对应的功能,需要在全局服务中勾选依赖的权限。 部分操作依赖如下授权项: 查看委托列表 iam:agencies:listAgencies iam:permissions:listRolesForAgency iam:permissions:listRolesForAgencyOnProject 控制台显示企业项目和预定义标签 eps:enterpriseProjects:list tms:predefineTags:list 快照、词库、日志管理功能使用 obs:bucket:Get* obs:bucket:List* obs:object:List* obs:object:Get* obs:bucket:HeadBucket 如表2所示列出了CSS常用操作与系统权限的授权关系,您可以参照该表选择合适的系统权限。 表2 常用操作与系统权限的关系 操作 CSS FullAccess CSS ReadOnlyAccess CSS Administrator 备注 创建集群 √ x √ - 查询集群列表 √ √ √ - 查询集群详情 √ √ √ - 删除集群 √ x √ - 重启集群 √ x √ - 扩容集群 √ x √ - 扩容实例的数量和存储容量 √ x √ - 查询指定集群的标签 √ √ √ - 查询所有标签 √ √ √ - 加载自定义词库 √ x √ 依赖OBS和IAM权限 查询自定义词库状态 √ √ √ - 删除自定义词库 √ x √ - 自动设置集群快照的基础配置 √ x √ 依赖OBS和IAM权限 修改集群快照的基础配置 √ x √ 依赖OBS和IAM权限 设置自动创建快照策略 √ x √ - 查询集群的自动创建快照策略 √ √ √ - 手动创建快照 √ x √ - 查询快照列表 √ √ √ - 恢复快照 √ x √ - 删除快照 √ x √ - 停用快照功能 √ x √ - 更改规格 √ x √ - 缩容集群 √ x √ -
  • 什么是 云搜索服务 云搜索 服务(Cloud Search Service,简称 CS S)是一个基于Elasticsearch、OpenSearch且完全托管的在线分布式搜索服务,为用户提供结构化、非结构化文本、以及基于AI向量的多条件检索、统计、报表。云搜索服务是华为云ELK生态的一系列软件集合,为您全方位提供托管的ELK生态云服务,兼容Elasticsearch、Logstash、Kibana、Cerebro等软件。 Elasticsearch和OpenSearch Elasticsearch、OpenSearch是开源搜索引擎,可以实现单机和集群部署,并提供托管的分布式搜索引擎服务。在ELK整个生态中,Elasticsearch集群支持结构化、非结构化文本的多条件检索、统计、报表。Elasticsearch搜索引擎相关内容的深入介绍可参见《Elasticsearch:权威指南》。OpenSearch搜索引擎相关内容的深入介绍可参见《OpenSearch Documentation》。 云搜索服务支持自动部署,快速创建Elasticsearch集群和OpenSearch集群,免运维,内置搜索调优实践;拥有完善的监控体系,提供一系列系统、集群以及查询性能等关键指标,让用户更专注于业务逻辑的实现。 云搜索服务的Elasticsearch和OpenSearch集群支持通过Kibana、OpenSearch Dashboard和Cerebro访问。如果是对集群数据进行深入分析和可视化,建议选择Kibana,它提供了丰富的可视化工具和强大的数据分析能力;如果是对集群进行管理和监控,建议选择Cerebro,它能够提供直观的集群状态视图和便捷的管理功能。 Logstash Logstash是一个开源数据收集引擎,具有实时管道功能。在ELK整个生态中,Logstash承担着数据接入的重要功能,可以动态地将来自不同数据源的数据统一起来,进行标准化的转换,然后将数据发送到指定的位置。 云搜索服务支持快速创建Logstash集群,云搜索服务的Logstash是一款全托管的数据接入处理服务,100%兼容开源Logstash的能力。在生产系统中,数据会以各种各样的形式,或分散或集中地存在于很多系统中。云搜索服务的Logstash能够轻松地帮助您处理各种来源的数据并转储到云搜索服务的Elasticsearch中,从而更加方便地发现其中的价值。同时您也可以单独使用Logstash云服务处理数据发送到其他的系统中。
  • 产品功能 开源兼容 兼容开源Elasticsearch和OpenSearch软件原生接口,并支持Logstash、Beats、Kibana等周边生态。 接入多种数据源 无缝对接FTP/OBS/Hbase/Kafka等多种数据源,仅需简单配置,无需编程。 一键化操作 一键申请集群、一键扩容、一键重启,从小规模测试到大规模上线,所有主要操作都是一键可达。 灵活词库管理 支持自定义词库与拼音分词,支持词库热更新,无需重启,配置即生效。 自定义快照策略 支持用户触发以及定时触发的快照备份能力,支持恢复到本集群以及其他集群的能力,随时恢复误删数据或者迁移数据到新的搜索集群。
  • 访问方式 公有云提供了Web化的服务管理平台,即管理控制台和基于HTTPS请求的API(Application programming interface)管理方式。 API方式 如果用户需要将公有云平台上的云搜索服务集成到第三方系统,用于二次开发,请使用API方式访问云搜索服务,具体操作请参见《云搜索服务API参考》。 控制台方式 其他相关操作,请使用管理控制台方式访问云搜索服务。如果用户已注册公有云,可直接登录管理控制台,在服务列表搜索“云搜索服务”。如果未注册,请单击右上方“注册”,根据界面提示填写用户基本信息,然后单击“同意协议并注册”完成管理控制台用户注册。
  • 下架公告 华为云计划于2025/06/13 00:00(北京时间)正式下架云视频交付实施服务中如表1所示产品。 表1 下架产品列表 序号 产品 1 消费级虚拟直播 一次性 2 人物模型渲染 一次性 3 虚拟仿真模型渲染 一次性 4 3D场景模型渲染 一次性 5 大型体积视频云服务 一次性 6 单次体积视频云服务 一次性 7 精彩帧云服务 一次性 8 大型虚实融合数字场景制作服务 一次性 9 中型虚实融合数字场景制作服务 一次性 10 小型虚实融合数字场景制作服务 一次性 11 数字人动作精修 一次性 华为云计划于2025/06/13 00:00(北京时间)正式下架云视频交付实施服务中如表2所示产品。 表2 下架产品列表 序号 产品 1 3D写实数字人IP 一次性 2 3D美型数字人IP 一次性 3 3D卡通数字人IP 一次性 4 虚实结合虚拟直播 一次性 5 纯CG虚拟直播 一次性 6 3D写实服饰模型制作 一次性 7 3D写实发型模型制作 一次性 8 3D美型服饰模型制作 一次性 9 3D美型发型模型制作 一次性 10 虚实结合海报制作 一次性 11 纯CG海报制作 一次性 12 3D卡通服饰模型制作 一次性 13 3D卡通发型模型制作 一次性 14 3D写实配饰模型制作 一次性 15 3D空间集成实施服务 一次性 16 3D美型配饰模型制作 一次性 17 云霄3D数字人视频制作 一次性 18 云笙3D数字人视频制作 一次性 19 纯CG视频制作 一次性 20 3D卡通配饰模型制作 一次性 21 虚实结合视频制作 一次性 22 3D物品展示虚实融合视频制作 一次性 23 3D物品展示纯CG视频制作 一次性 24 3D物品建模 一次性 25 3D数字人模型动态特效 一次性 26 3D数字人动作动画 一次性 27 3D模型减面 一次性 28 3D场景扫描建模 一次性 29 3D场景模型制作 一次性 30 数字人视频播报-高阶版 一次性 31 新闻播报类虚实融合视频制作 一次性 32 新闻播报类纯CG视频制作 一次性 33 风格化3D数字人视频制作 一次性 34 3D风格化数字人制作 一次性 35 数字人视频播报-基础版 一次性
  • 停售公告 华为云计划于2025/02/07 00:00(北京时间)正式停售云视频交付实施服务中如表1所示产品。 表1 停售产品列表 序号 产品 1 消费级虚拟直播 一次性 2 人物模型渲染 一次性 3 虚拟仿真模型渲染 一次性 4 3D场景模型渲染 一次性 5 大型体积视频云服务 一次性 6 单次体积视频云服务 一次性 7 精彩帧云服务 一次性 8 大型虚实融合数字场景制作服务 一次性 9 中型虚实融合数字场景制作服务 一次性 10 小型虚实融合数字场景制作服务 一次性 11 数字人动作精修 一次性 华为云计划于2025/02/18 00:00(北京时间)正式停售云视频交付实施服务中如表2所示产品。 表2 停售产品列表 序号 产品 1 3D写实数字人IP 一次性 2 3D美型数字人IP 一次性 3 3D卡通数字人IP 一次性 4 虚实结合虚拟直播 一次性 5 纯CG虚拟直播 一次性 6 3D写实服饰模型制作 一次性 7 3D写实发型模型制作 一次性 8 3D美型服饰模型制作 一次性 9 3D美型发型模型制作 一次性 10 虚实结合海报制作 一次性 11 纯CG海报制作 一次性 12 3D卡通服饰模型制作 一次性 13 3D卡通发型模型制作 一次性 14 3D写实配饰模型制作 一次性 15 3D空间集成实施服务 一次性 16 3D美型配饰模型制作 一次性 17 云霄3D数字人视频制作 一次性 18 云笙3D数字人视频制作 一次性 19 纯CG视频制作 一次性 20 3D卡通配饰模型制作 一次性 21 虚实结合视频制作 一次性 22 3D物品展示虚实融合视频制作 一次性 23 3D物品展示纯CG视频制作 一次性 24 3D物品建模 一次性 25 3D数字人模型动态特效 一次性 26 3D数字人动作动画 一次性 27 3D模型减面 一次性 28 3D场景扫描建模 一次性 29 3D场景模型制作 一次性 30 数字人视频播报-高阶版 一次性 31 新闻播报类虚实融合视频制作 一次性 32 新闻播报类纯CG视频制作 一次性 33 风格化3D数字人视频制作 一次性 34 3D风格化数字人制作 一次性 35 数字人视频播报-基础版 一次性
  • 常见问题 问题一:查询OBS分区表报错,报错信息如下: DLI.0005: There should be at least one partition pruning predicate on partitioned table `xxxx`.`xxxx`.; 问题根因:查询OBS分区表时没有携带分区字段。 解决方案:查询OBS分区表时,where条件中至少包含一个分区字段。 问题二:使用DataSource语法指定OBS文件路径创建OBS表,insert数据到OBS表,显示作业运行失败,报:“DLI.0007: The output path is a file, don't support INSERT...SELECT” 错误。 问题示例语句参考如下: CREATE TABLE testcsvdatasource (name string, id int) USING csv OPTIONS (path "obs://dli-test-021/data/test.csv"); 问题根因:创建OBS表指定的OBS路径为具体文件,导致不能插入数据。例如上述示例中的OBS路径为:"obs://dli-test-021/data/test.csv"。 解决方案:使用DataSource语法创建OBS表指定的OBS文件路径改为文件目录即可,后续即可通过insert插入数据。上述示例,建表语句可以修改为: CREATE TABLE testcsvdatasource (name string, id int) USING csv OPTIONS (path "obs://dli-test-021/data"); 问题三:使用Hive语法创建OBS分区表时,提示语法格式不对。例如,如下使用Hive语法创建以classNo为分区的OBS表: CREATE TABLE IF NOT EXISTS testtable(name STRING, score DOUBLE, classNo INT) PARTITIONED BY (classNo) STORED AS TEXTFILE LOCATION 'obs://dli-test-021/data7'; 问题根因:使用Hive语法创建OBS分区表时,分区字段不能出现在表名后的字段列表中,只能定义在PARTITIONED BY后。 解决方案:使用Hive语法创建OBS分区表时,分区字段指定在PARTITIONED BY后。例如: CREATE TABLE IF NOT EXISTS testtable(name STRING, score DOUBLE) PARTITIONED BY (classNo INT) STORED AS TEXTFILE LOCATION 'obs://dli-test-021/data7';
  • 使用DataSource语法创建OBS表 以下通过创建CSV格式的OBS表举例,创建其他数据格式的OBS表方法类似,此处不一一列举。 创建OBS非分区表 指定OBS数据文件,创建csv格式的OBS表。 按照以下文件内容创建“test.csv”文件,并将“test.csv”文件上传到OBS桶“dli-test-021”的根目录下。 Jordon,88,23 Kim,87,25 Henry,76,26 登录DLI管理控制台,选择“SQL编辑器”,在SQL编辑器中“执行引擎”选择“spark”,“队列”选择已创建的SQL队列,数据库选择“testdb”,执行以下命令创建OBS表。 CREATE TABLE testcsvdatasource (name STRING, score DOUBLE, classNo INT ) USING csv OPTIONS (path "obs://dli-test-021/test.csv"); 如果是通过指定的数据文件创建的OBS表,后续不支持在DLI通过insert表操作插入数据。OBS文件内容和表数据保持同步。 查询已创建的“testcsvdatasource”表数据。 select * from testcsvdatasource; 图1 查询结果 本地修改原始的OBS表文件“test.csv”,增加一行“Aarn,98,20”数据,重新替换OBS桶目录下的“test.csv”文件。 Jordon,88,23 Kim,87,25 Henry,76,26 Aarn,98,20 在DLI的SQL编辑器中再次查询“testcsvdatasource”表数据,DLI上可以查询到新增的“Aarn,98,20”数据。 select * from testcsvdatasource; 图2 查询结果 指定OBS数据文件目录,创建csv格式的OBS表。 指定的OBS数据目录不包含数据文件。 在OBS桶“dli-test-021”根目录下创建数据文件目录“data”。 登录DLI管理控制台,选择“SQL编辑器”,在SQL编辑器中“执行引擎”选择“spark”,“队列”选择已创建的SQL队列,数据库选择“testdb”。在DLI的“testdb”数据库下创建OBS表“testcsvdata2source”。 CREATE TABLE testcsvdata2source (name STRING, score DOUBLE, classNo INT) USING csv OPTIONS (path "obs://dli-test-021/data"); 通过insert语句插入表数据。 insert into testcsvdata2source VALUES('Aarn','98','20'); insert作业运行成功后,查询OBS表“testcsvdata2source”数据。 select * from testcsvdata2source; 图3 查询结果 在OBS桶的“obs://dli-test-021/data”目录下刷新后查询,生成了csv数据文件,文件内容为insert插入的数据内容。 图4 查询结果 指定的OBS数据目录包含数据文件。 在OBS桶“dli-test-021”根目录下创建数据文件目录“data2”。创建如下内容的测试数据文件“test.csv”,并上传文件到“obs://dli-test-021/data2”目录下。 Jordon,88,23 Kim,87,25 Henry,76,26 登录DLI管理控制台,选择“SQL编辑器”,在SQL编辑器中“执行引擎”选择“spark”,“队列”选择已创建的SQL队列,数据库选择“testdb”。在DLI的“testdb”数据库下创建OBS表“testcsvdata3source”。 CREATE TABLE testcsvdata3source (name STRING, score DOUBLE, classNo INT) USING csv OPTIONS (path "obs://dli-test-021/data2"); 通过insert语句插入表数据。 insert into testcsvdata3source VALUES('Aarn','98','20'); insert作业运行成功后,查询OBS表“testcsvdata3source”数据。 select * from testcsvdata3source; 图5 查询结果 在OBS桶的“obs://dli-test-021/data2”目录下刷新后查询,生成了一个csv数据文件,内容为insert插入的表数据内容。 图6 查询结果 创建OBS分区表 创建单分区OBS表 在OBS桶“dli-test-021”根目录下创建数据文件目录“data3”。 登录DLI管理控制台,选择“SQL编辑器”,在SQL编辑器中“执行引擎”选择“spark”,“队列”选择已创建的SQL队列,数据库选择“testdb”。在DLI的“testdb”数据库下创建以“classNo”列为分区的OBS分区表“testcsvdata4source”,指定OBS目录“obs://dli-test-021/data3”。 CREATE TABLE testcsvdata4source (name STRING, score DOUBLE, classNo INT) USING csv OPTIONS (path "obs://dli-test-021/data3") PARTITIONED BY (classNo); 在OBS桶的“obs://dli-test-021/data3”目录下创建“classNo=25”的分区目录。根据以下文件内容创建数据文件“test.csv”,并上传到OBS的“obs://dli-test-021/data3/classNo=25”目录下。 Jordon,88,25 Kim,87,25 Henry,76,25 在SQL编辑器中执行以下命令,导入分区数据到OBS表“testcsvdata4source ”。 ALTER TABLE testcsvdata4source ADD PARTITION (classNo = 25) LOCATION 'obs://dli-test-021/data3/classNo=25'; 查询OBS表“testcsvdata4source ”classNo分区为“25”的数据: select * from testcsvdata4source where classNo = 25; 图7 查询结果 插入如下数据到OBS表“testcsvdata4source ”: insert into testcsvdata4source VALUES('Aarn','98','25'); insert into testcsvdata4source VALUES('Adam','68','24'); 查询OBS表“testcsvdata4source ”classNo分区为“25”和“24”的数据。 分区表在进行查询时where条件中必须携带分区字段,否则会查询失败,报:DLI.0005: There should be at least one partition pruning predicate on partitioned table。 select * from testcsvdata4source where classNo = 25; 图8 查询结果 select * from testcsvdata4source where classNo = 24; 图9 查询结果 在OBS桶的“obs://dli-test-021/data3”目录下点击刷新,该目录下生成了对应的分区文件,分别存放新插入的表数据。 图10 OBS上classNo分区为“25”文件数据 图11 OBS上classNo分区为“24”文件数据 创建多分区OBS表 在OBS桶“dli-test-021”根目录下创建数据文件目录“data4”。 登录DLI管理控制台,选择“SQL编辑器”,在SQL编辑器中“执行引擎”选择“spark”,“队列”选择已创建的SQL队列,数据库选择“testdb”。在“testdb”数据库下创建以“classNo”和“dt”列为分区的OBS分区表“testcsvdata5source”,指定OBS目录“obs://dli-test-021/data4”。 CREATE TABLE testcsvdata5source (name STRING, score DOUBLE, classNo INT, dt varchar(16)) USING csv OPTIONS (path "obs://dli-test-021/data4") PARTITIONED BY (classNo,dt); 给 testcsvdata5source表插入如下测试数据: insert into testcsvdata5source VALUES('Aarn','98','25','2021-07-27'); insert into testcsvdata5source VALUES('Adam','68','25','2021-07-28'); 根据classNo分区列查询testcsvdata5source数据。 select * from testcsvdata5source where classNo = 25; 图12 查询结果 根据dt分区列查询testcsvdata5source数据。 select * from testcsvdata5source where dt like '2021-07%'; 图13 查询结果 在OBS桶“obs://dli-test-021/data4”目录下刷新后查询,会生成如下数据文件: 文件目录1:obs://dli-test-021/data4/xxxxxx/classNo=25/dt=2021-07-27 图14 查询结果 文件目录2:obs://dli-test-021/data4/xxxxxx/classNo=25/dt=2021-07-28 图15 查询结果 在OBS桶的“obs://dli-test-021/data4”目录下创建“classNo=24”的分区目录,再在“classNo=24”目录下创建子分区目录“dt=2021-07-29”。根据以下文件内容创建数据文件“test.csv”,并上传到OBS的“obs://dli-test-021/data4/classNo=24/dt=2021-07-29”目录下。 Jordon,88,24,2021-07-29 Kim,87,24,2021-07-29 Henry,76,24,2021-07-29 在SQL编辑器中执行以下命令,导入分区数据到OBS表“testcsvdata5source ”。 ALTER TABLE testcsvdata5source ADD PARTITION (classNo = 24,dt='2021-07-29') LOCATION 'obs://dli-test-021/data4/classNo=24/dt=2021-07-29'; 根据classNo分区列查询testcsvdata5source数据。 select * from testcsvdata5source where classNo = 24; 图16 查询结果 根据dt分区列查询所有“2021-07”月的所有数据。 select * from testcsvdata5source where dt like '2021-07%'; 图17 查询结果
  • DataSource和Hive两种语法创建OBS表的区别 DataSource语法和Hive语法主要区别在于支持的表数据存储格式范围、支持的分区数等有差异。两种语法创建OBS表主要差异点参见表1。 表1 DataSource语法和Hive语法创建OBS表的差异点 语法 支持的数据类型范围 创建分区表时分区字段差异 支持的分区数 DataSource语法 支持ORC,PARQUET,JSON,CSV,AVRO类型 创建分区表时,分区字段在表名和PARTITIONED BY后都需要指定。具体可以参考DataSource语法创建单分区OBS表。 单表分区数最多允许7000个。 Hive语法 支持TEXTFILE, AVRO, ORC, SEQUENCEFILE, RCFILE, PARQUET 创建分区表时,指定的分区字段不能出现在表后,只能通过PARTITIONED BY指定分区字段名和类型。具体可以参考Hive语法创建OBS分区表。 单表分区数最多允许100000个。 创建OBS表的DataSource语法可以参考使用DataSource语法创建OBS表。 创建OBS表的Hive语法可以参考使用Hive语法创建OBS表。
  • 监控指标 表1 数据湖探索 服务支持的监控指标 指标ID 指标名称 指标含义 取值范围 单位 进制 测量对象 监控周期(原始指标) queue_cu_num 队列CU使用量 展示用户队列申请的CU数 ≥0 Count 不涉及 队列 5分钟 queue_job_launching_num 提交中作业数 展示用户队列中状态为提交中的作业数。 ≥0 Count 不涉及 队列 5分钟 queue_job_running_num 运行中作业数 展示用户队列中状态为运行中的作业数。 ≥0 Count 不涉及 队列 5分钟 queue_job_succeed_num 已完成作业数 展示用户队列中状态为已完成的作业数。 ≥0 Count 不涉及 队列 5分钟 queue_job_failed_num 已失败作业数 展示用户队列中状态为已失败的作业数。 ≥0 Count 不涉及 队列 5分钟 queue_job_cancelled_num 已取消作业数 展示用户队列中状态为已取消的作业数。 ≥0 Count 不涉及 队列 5分钟 queue_alloc_cu_num 队列CU分配量 展示用户队列的CU分配情况。 ≥0 Count 不涉及 队列 5分钟 queue_min_cu_num 队列最小CU 展示用户队列中的最小CU。 ≥0 Count 不涉及 队列 5分钟 queue_max_cu_num 队列最大CU 展示用户队列中的最大CU。 ≥0 Count 不涉及 队列 5分钟 queue_priority 队列优先级 展示用户队列的优先级。 1~100 不涉及 不涉及 队列 5分钟 queue_cpu_usage 队列CPU使用率 展示用户队列的CPU使用率。 0~100 % 不涉及 队列 该指标仅适用于普通队列。 5分钟 queue_disk_usage 队列磁盘使用率 展示用户队列的磁盘使用率。 0~100 % 不涉及 队列 该指标仅适用于普通队列。 5分钟 queue_disk_used 队列磁盘使用率最大值 展示用户队列的磁盘使用率的最大值。 0~100 % 不涉及 队列 该指标仅适用于普通队列。 5分钟 queue_mem_usage 队列内存使用率 展示用户队列的内存使用率。 0~100 % 不涉及 队列 该指标仅适用于普通队列。 5分钟 queue_mem_used 队列内存使用量 展示用户队列的内存使用量。 ≥0 MB 不涉及 队列 该指标仅适用于普通队列。 5分钟 queue_job_launching_max_duration 作业提交最大时长 该指标用于统计采样时间点提交中的作业最长的持续时间。(包括SQL作业、Flink作业、Spark作业) ≥0 Seconds 不涉及 队列 5分钟 该指标属于瞬时采样指标(非连续性采样),用于记录采样时刻为 “提交中”或者“启动中” 的作业的最大提交时长,并非对全量作业的统计性指标。不涉及对历史作业或已完成作业的数据统计。仅适用于监控队列运行状态。 queue_sql_job_running_max_duration SQL作业运行最大时长 该指标用于统计采样时间点运行中的SQL作业最长的持续时间。 ≥0 Seconds 不涉及 队列 5分钟 该指标属于瞬时采样指标(非连续性采样),用于记录采样时刻为 “运行中” 的SQL作业的最大运行时长,并非对全量作业的统计性指标。不涉及对历史作业或已完成作业的数据统计。仅适用于监控队列运行状态 queue_spark_job_running_max_duration Spark作业运行最大时长 该指标用于统计采样时间点运行中的Spark作业最长的持续时间。 ≥0 Seconds 不涉及 队列 5分钟 该指标属于瞬时采样指标(非连续性采样),用于记录采样时刻为 “运行中” 的Spark作业的最大运行时长,并非对全量作业的统计性指标。不涉及对历史作业或已完成作业的数据统计。仅适用于监控队列运行状态 flink_read_records_per_second Flink作业数据输入速率 展示用户Flink作业的数据输入速率,供监控和调试使用。 ≥0 record/s 不涉及 Flink作业 10秒钟 flink_write_records_per_second Flink作业数据输出速率 展示用户Flink作业的数据输出速率,供监控和调试使用。 ≥0 record/s 不涉及 Flink作业 10秒钟 flink_read_records_total Flink作业数据输入总数 展示用户Flink作业的数据输入总数,供监控和调试使用。 ≥0 record/s 不涉及 Flink作业 10秒钟 flink_write_records_total Flink作业数据输出总数 展示用户Flink作业的数据输出总数,供监控和调试使用。 ≥0 record/s 不涉及 Flink作业 10秒钟 flink_read_bytes_per_second Flink作业字节输入速率 展示用户Flink作业每秒输入的字节数。 ≥0 byte/s 1024(IEC) Flink作业 10秒钟 flink_write_bytes_per_second Flink作业字节输出速率 展示用户Flink作业每秒输出的字节数。 ≥0 byte/s 1024(IEC) Flink作业 10秒钟 flink_read_bytes_total Flink作业字节输入总数 展示用户Flink作业字节的输入总数。 ≥0 byte/s 1024(IEC) Flink作业 10秒钟 flink_write_bytes_total Flink作业字节输出总数 展示用户Flink作业字节的输出总数。 ≥0 byte/s 1024(IEC) Flink作业 10秒钟 flink_cpu_usage Flink作业CPU使用率 展示用户Flink作业的CPU使用率。 0~100 % 不涉及 Flink作业 10秒钟 flink_mem_usage Flink作业内存使用率 展示用户Flink作业的内存使用率。 0~100 % 不涉及 Flink作业 10秒钟 flink_max_op_latency Flink作业最大算子延迟 展示用户Flink作业的最大算子延迟时间,单位ms。 ≥0 ms 不涉及 Flink作业 10秒钟 flink_max_op_backpressure_level Flink作业最大算子反压 展示用户Flink作业的最大算子反压值,数值越大,反压越严重。 0:表示OK 50:表示Low 100:表示High 0~100 不涉及 不涉及 Flink作业 10秒钟 elastic_resource_pool_cpu_usage 弹性资源池CPU使用率 展示用户弹性资源池的CPU使用率。 0~100 % 不涉及 弹性资源池 5分钟 elastic_resource_pool_mem_usage 弹性资源池内存使用率 展示用户弹性资源池的内存使用率。 0~100 % 不涉及 弹性资源池 5分钟 elastic_resource_pool_disk_usage 弹性资源池磁盘使用率 展示用户弹性资源池的磁盘使用率。 0~100 % 不涉及 弹性资源池 5分钟 elastic_resource_pool_disk_max_usage 弹性资源池磁盘使用率最大值 展示用户弹性资源池的磁盘使用率最大值。 0~100 % 不涉及 弹性资源池 5分钟 elastic_resource_pool_cu_num 弹性资源池CU使用量 展示用户弹性资源池的CU使用量。 ≥0 Count 不涉及 弹性资源池 5分钟 elastic_resource_pool_alloc_cu_num 弹性资源池CU分配量 展示用户弹性资源池的CU分配情况。 ≥0 Count 不涉及 弹性资源池 5分钟 elastic_resource_pool_min_cu_num 弹性资源池最小CU 展示用户弹性资源池的最小CU。 ≥0 Count 不涉及 弹性资源池 5分钟 elastic_resource_pool_max_cu_num 弹性资源池最大CU 展示用户弹性资源池的最大CU。 ≥0 Count 不涉及 弹性资源池 5分钟
  • NetworkManager 选型介绍 NetworkManger作为network的替代品,功能更强大,在新版os中基本都是以NetworkManager作为主流。综合来说,Network服务更适合那些熟悉命令行和手动配置的用户,而NetworkManager则更适合普通用户或需要自动管理网络连接的情况。在大多数Linux发行版中,NetworkManager已成为默认的网络管理工具。 NetworkManager和network不可同时使用。
  • 约束限制 程序未按照2MB对齐编译时,每段中不足2MB的部分无法使用大页,建议对齐使用。 mprotect系统调用要求传入的地址按2M对齐、大小为2M的倍数,程序代码需要进行适配修改。 2MB地址对齐需要重新编译程序,并在链接器选项中加入"-Wl,-zcommon-page-size=2097152 -Wl,-zmax-page-size=2097152" 大页预留不足时会尝试申请2MB页,如果由于内存碎片等原因申请失败时,程序会回退至小页。程序中多个线程进入回退小页流程会触发SIGBUS。
  • 2024年04月 序号 功能 功能描述 阶段 相关文档 1 Flexus云服务器X实例支持Windows Server市场镜像 Windows Server操作系统是来自云商店的非自营镜像,该服务由第三方提供。为方便您选用,在公共镜像中提供入口。 商用 Flexus X实例镜像概述 2 Flexus云服务器X实例新增功能 支持对接任务中心 支持云服务器组 支持定时删除 商用 查看失败信息 管理Flexus云服务器X实例云服务器组 购买Flexus云服务器X实例 3 Flexus云服务器X实例支持包年/包月计费模式 包年/包月是一种预付费模式,即先付费再使用,按照订单的购买周期进行结算。 商用 计费说明
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的 云安全 挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的 IaaS、PaaS 和 SaaS 类云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。华为云租户的安全责任在于对使用的 IaaS、PaaS 和 SaaS 类云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、 虚拟主机 和访客虚拟机的操作系统,虚拟防火墙、API 网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 证书选型案例 表1 以下为部分典型行业证书选型案例,您在选购证书时可以进行参考。 实例 所属行业 业务特征 常用证书类型 中国农业银行 中国平安 金融、银行、保险 有严格的数据保密要求 希望在网站地址栏展示身份信息 EV 教育部 淘宝、京东 百度、新浪、今日头条 上海证券交易所 国家电网 外交部 华为云 教育、政府、互联网 有严格的数据保密要求 无需在网站地址栏展示身份信息 网站后期有多个新增站点的需求 OV泛 域名 证书 个人网站 个人业务 无数据传输业务 网站用来展示纯信息或内容 DV 父主题: 如何选购SSL证书
  • PCA证书有效期 在证书链中,根CA是整条链的信任起点,一旦根CA过期,其与其子CA签发的所有证书将不再被信任,因此根CA的有效期是其下层所有证书的有效期上限。即使签发下层证书时,可以将有效期填写超过根CA的有效期(不做强制要求下),但在校验证书链时,只要链中根CA过期,校验就会失败。 在PCA服务中,强制要求新签发的证书的到期时间不可超过其父CA的到期时间,确保从根CA到私有证书之间的链路上,有效期逐层递减。PCA服务对各类证书有效期的约束见表 证书有效期约束。 不同类型证书的有效期是根据其扮演的角色而定的。使用越频繁的证书,其密钥材料泄露风险更高,有效期应尽量设置更小。例如,根CA通常只用于签发子CA,使用频率最少,且使用最高的安全保护措施(PCA中使用KMS进行CA密钥管理),有效期一般设置为10~30年左右。子CA根据其所在的层级,越往下有效期逐级减少,最下层的证书用于签发大量的私有证书,有效期通常设置为2~5年左右。私有证书,频繁用于通信,通常根据使用场景的安全要求,将有效期设置为几个小时、几个月以及一两年不等。 表1 证书有效期约束 CA/证书 最小有效期 最大有效期 是否支持延长 有效期其它约束 根CA 1小时 30年 否 无 子CA 1小时 20年 否 在父CA有效期内 私有证书 1小时 20年 否 在父CA有效期内
  • 证书链 从根CA到私有证书之间的完整的证书链路,即各个层级证书按序链在一起的文件,用于进行身份的逐层校验。各级证书的链接关系,如图 证书链所示。 PCA服务支持创建最多七级的CA层级结构,一个好的私有CA层次结构可实现对证书的精细化控制,以及提升PKI(公钥基础设施)体系的安全性,具体请参见私有CA层次结构设计。 图3 证书链 证书校验主要体现在两方面: 证书链的完整性校验,逐层校验证书的有效性。 证书链中的根CA是否被校验方所信任(提前预置到信任列表中)。 证书校验过程中主要包含的校验项: 实体所宣称的主体信息(如服务端的域名)是否在证书可选名称的范围内。 证书是否过期。 密钥用法是否符合当前操作(如密钥协商、数字签名等)。 数字签名验证。 是否已被吊销。 此处未列举出所有校验项,X509证书允许用户增加多种自定义扩展项,详情请参考相关国际标准。
  • 证书吊销列表 证书吊销列表(Certificate Revocation List,CRL)是指在有效期内就被其父CA吊销的证书的名单,其中被吊销的CA/证书,包含子CA与私有证书。证书吊销列表是一种有固定格式的结构化数据文件,其中包含颁发者信息、吊销列表的生效时间、列表下一次更新时间、签发算法、指纹以及已被吊销证书的序列号与对应的吊销时间和吊销理由码。证书吊销列表具体内容,如图 证书吊销列表所示。如何配置证书吊销列表,请参见配置证书吊销列表。 图2 证书吊销列表
  • 证书品牌 目前 云证书管理 支持购买的证书品牌及不同品牌支持签发的证书类型如下表所示: 表2 证书品牌说明 证书品牌 说明 是否支持DV(域名型)SSL证书 是否支持OV(企业型)SSL证书 是否支持EV(增强型)SSL证书 DigiCert DigiCert(原Symantec)是全球最大、最权威的数字证书颁发机构。全球知名的数字证书提供商,服务范围超过150多个国家,拥有超过10万客户。 优势:安全、稳定、兼容性好。受银行、金融等行业青睐,适用于高安全性要求的数字交易场景。 是 支持单域名、泛域名。 是 支持单域名、多域名和泛域名和IP地址。 是 支持单域名、多域名。 GeoTrust GeoTrust是全球第二大数字证书颁发机构,也是身份认证和信任认证领域的领导者。公司服务于各大中小型企业,一直致力于用最低的价格来为客户提供最好的服务。 优势:该品牌是DigiCert旗下的子品牌。安全、稳定、兼容性好、HTTPS防护门槛低、性价比高。 说明: GeoTrust更名为Rapid,详情请参见【2023年4月17日】关于Geo Trust DV证书名称变更的通知 是 支持单域名、泛域名。 是 支持单域名、多域名和泛域名和IP地址。 是 支持单域名、多域名。 GlobalSign GlobalSign成立于1996年,是全球最早的数字证书认证机构之一。它是一家声誉卓著,备受信赖的CA中心和 SSL数字证书 提供商,并在全球拥有众多合作伙伴。 优势:签发速度快、验证速度快。该品牌是华为云、大型电商企业都在用的证书,全系标配的RSA+ECC算法,资源占用少。 否 是 支持单域名、多域名、泛域名和IP地址。 是 支持单域名、多域名。 CFCA(国产) 中国金融认证中心(CFCA)是经中国人民银行牵头组建、国家信息安全管理机构批准成立的国家级权威的安全认证机构,通过了国际Webtrust认证,受到微软、Google、苹果、火狐、Adobe认可,是全球权威行业组织CA/B重要成员,亚洲PKI论坛成员。 优势:由中国权威数字证书认证机构自主研发,国产证书,支持RSA/SM算法。7*24小时金融级的安全保障服务,具有完善的风险承保计划。中文版全球信任体系电子认证业务规则(CPS),便于用户理解双方权利和义务。 否 是 支持单域名、多域名和泛域名和IP地址。 是 支持单域名、多域名。 TrustAsia(国产) TrustAsia 是国产证书品牌,根据国内企业用户网络环境和使用习惯而建立,不仅提供支持主流RSA与ECC算法的“国际证书”,还提供支持我国商用密码SM2及相关标准算法的“国密证书”,支持中国区 OCSP。通过严密的企业级认证,为企业和个人提供安全可靠的加密数据传输和身份验证服务,全方位满足客户的不同要求。 优势:根据国内企业用户网络环境和使用习惯建立,支持RSA/ECC/SM2算法,支持中国区 OCSP,响应速度更快。 是 仅支持泛域名。 是 支持单域名、多域名和泛域名和IP地址。 是 支持单域名、多域名。 vTrus(国产) vTrus是国产证书品牌,通过了国际Webtrust认证,支持国际主流的RSA标准加密算法,同时支持我国商用密码SM2标准算法。 优势:兼容性好,支持所有主流操作系统及软件库(如iOS 5+,Android4.0,Windows Win7+,Java1.6.15+),支持99.99%的主流浏览器(如Chrome、IE、Safari、火狐等),国密证书兼容国密浏览器(如360国密浏览器、奇安信浏览器、红莲花浏览器等) 是 支持单域名、泛域名。 是 支持单域名、多域名和泛域名和IP地址。 否
  • 证书支持的加密算法 华为云 云证书管理服务 签发的SSL证书目前支持RSA、ECC、SM2三种加密算法。 RSA:目前在全球应用广泛的非对称加密算法,兼容性在三种算法中最好,支持主流浏览器和全平台操作系统。一般采用2048位或3072位的加密长度。 ECC:椭圆曲线加密算法。相比于RSA,ECC加密速度快、效率更高、服务器资源消耗低,目前已在主流浏览器中得到推广,成为新一代主流算法。一般采用256位加密长度。 SM2:中国国家密码管理局发布的ECC椭圆曲线加密算法,在中国商用密码体系中用来替代RSA算法。 不同类型的证书支持的加密算法如表 证书支持的加密算法所示。 表4 证书支持的加密算法 证书品牌 证书类型 域名类型 支持的加密算法 DigiCert DV (Basic) 单域名 RSA_2048、RSA_3072、RSA_4096 泛域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 OV 单域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 多域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 泛域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 OV Pro 单域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 多域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 泛域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 EV 单域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 多域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 EV Pro 单域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 多域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 GeoTrust DV (Basic) 说明: Geotrust DV(basic) 证书已更名为 Rapid SSL,详情请参见【2023年4月17日】关于Geo Trust DV证书名称变更的通知 单域名 RSA_2048、RSA_3072、RSA_4096 泛域名 RSA_2048、RSA_3072、RSA_4096 DV 单域名 RSA_2048、RSA_3072、RSA_4096 泛域名 RSA_2048、RSA_3072、RSA_4096 OV 单域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 多域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 泛域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 EV 单域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 多域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 GlobalSign OV 单域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 多域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 泛域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 IP地址 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 EV 单域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 多域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 CFCA(国产) OV 单域名 RSA_2048、SM2 多域名 RSA_2048、SM2 泛域名 RSA_2048、SM2 EV 单域名 RSA_2048 多域名 RSA_2048 TrustAsia(国产) DV 泛域名 RSA_2048 OV 单域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384、SM2 多域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 泛域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384、SM2 EV 单域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 多域名 RSA_2048、RSA_3072、RSA_4096、EC_P256、EC_P384 vTrus(国产) DV 单域名 RSA_2048 泛域名 RSA_2048 OV 单域名 RSA_2048、RSA_4096、SM2 多域名 RSA_2048、RSA_4096、SM2 泛域名 RSA_2048、RSA_4096、SM2
  • 证书支持的域名类型 不同域名类型的证书所支持绑定的域名区别如下表所示: 表3 域名类型 域名类型 说明 单域名 即单个SSL证书只支持绑定1个单域名。例如,example.com 多域名 即单个SSL证书可以同时绑定多个域名。 最多可以支持250个域名。 仅当证书类型为OV、OV Pro时,多个域名中可包含泛域名。其他类型的证书,仅支持绑定多个单域名。 多个域名可以分批次绑定。例如,购买多域名类型证书,域名数量为3的场景,首次申请证书时仅填写了2个域名,证书签发后可再追加填写1个域名。 当购买多域名类型证书,域名数量为3的场景,仅支持绑定3个域名。如果后续还需添加,则需要重新购买证书。 泛域名 即单个SSL证书支持绑定一个且只有一个泛域名。*.*.example.com多个通配符的泛域名不支持。 泛域名只允许添加一个通配符域名,例如*.example.com(包含a.example.com、b.example.com、......,但是不包含a.a.example.com)。 更多关于如何选择域名类型,详情请参见如何选择域名类型?
  • 证书类型 华为云SSL证书服务支持购买DV、OV和EV三种类型的SSL证书。不同证书类型适用的应用场景、信任等级和安全性不同,具体区别如表 各种证书之间的区别所示。 表1 各种证书之间的区别 证书类型 安全等级 认证强度 适用场景 支持的证书品牌 审核时长 DV(域名型) 一般 简易验证域名所有权 个人或企业测试的网站 DigiCert GeoTrust TrustAsia vTrus 数小时内快速颁发 OV(企业型) 高 全面验证组织及企业真实性和域名所有权 教育、政府、互联网、中小型企业应用、电商等服务型网站 例如,Apple Store、微信小程序等 DigiCert GeoTrust GlobalSign CFCA TrustAsia vTrus 3~5个工作日 EV(增强型) 最高 严格验证组织及企业真实性和域名所有权 有严格安全要求的大型企业、机构和组织的网站 例如,金融、保险、银行等 DigiCert GeoTrust GlobalSign CFCA TrustAsia 7~10个工作日
  • 收集范围 CCM收集及产生的个人数据如表1所示: 表1 个人数据范围列表 类型 收集方式 是否可以修改 是否必须 租户ID 在控制台进行任何操作时Token中的租户ID 在调用API接口时Token中的租户ID 否 是,租户ID是证书资源身份标识 姓名 在申请SSL证书时填写的联系人姓名 是 是,证书审核人工认证阶段必须 邮箱 在申请SSL证书或私有证书时填写的邮箱 申请SSL证书时填写的邮箱:是 申请私有证书时填写的邮箱:否 申请SSL证书时填写的邮箱:是,证书审核人工认证阶段必须 申请私有证书时填写的邮箱:否 手机号码 在申请SSL证书时填写的联系人手机号 是 是,证书审核人工认证阶段必须 企业营业执照 在申请SSL证书时,可以选择上传企业营业执照 是 否 银行开户许可 在申请SSL证书时,可以选择上传银行开户许可 是 否 企业项目ID 在申请或使用SSL证书、私有证书时,可以为证书分配企业项目 是 已开通企业项目:是 未开通企业项目:否
共100000条