华为云用户手册

  • WebHCat 以下示例的IP为WebHCat的业务IP,端口为安装时设置的WebHCat HTTP端口。 需要在安装客户端的机器上进行kinit认证操作后才可执行示例操作。 以下示例均为https协议的示例,若要使用http协议,需要执行以下操作: 将REST接口切换成HTTP协议方式,请参见配置基于HTTPS/HTTP协议的REST接口。 将示例中的“--insecure”去掉,将https替换成http,例如 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/status' 更改为 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/status' 执行操作前需确保使用的curl版本在7.34.0以上。 可以使用以下命令查看curl版本: curl -V :version(GET) 描述 查询WebHCat支持的返回类型列表。 URL https://www.myserver.com/templeton/:version 参数 参数 描述 :version WebHCat版本号(当前必须是v1)。 返回结果 参数 描述 responseTypes WebHCat支持的返回类型列表。 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1' status (GET) 描述 获取当前服务器的状态 URL https://www.myserver.com/templeton/v1/status 参数 无 返回结果 参数 描述 status WebHCat连接正常,返回OK。 version 字符串,包含版本号,比如v1。 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/status' version (GET) 描述 获取服务器WebHCat的版本 URL https://www.myserver.com/templeton/v1/version 参数 无 返回结果 参数 描述 supportedVersions 所有支持的版本 version 当前服务器WebHCat的版本 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/version' version/hive (GET) 描述 获取服务器Hive的版本 URL https://www.myserver.com/templeton/v1/version/hive 参数 无 返回结果 参数 描述 module hive version Hive的版本 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/version/hive' version/hadoop (GET) 描述 获取服务器Hadoop的版本 URL https://www.myserver.com/templeton/v1/version/hadoop 参数 无 返回结果 参数 描述 module hadoop version Hadoop的版本 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/version/hadoop' ddl (POST) 描述 执行DDL语句 URL https://www.myserver.com/templeton/v1/ddl 参数 参数 描述 exec 需要执行的HCatalog DDL语句。 group 当DDL是创建表时,创建表使用的用户组。 permissions 当DDL是创建表时,创建表使用的权限,格式为rwxr-xr-x。 返回结果 参数 描述 stdout HCatalog执行时的标准输出值,可能为空。 stderr HCatalog执行时的错误输出,可能为空。 exitcode HCatalog的返回值。 例子 curl -i -u : --insecure --negotiate -d exec="show tables" 'https://10.64.35.144:9111/templeton/v1/ddl' ddl/database (GET) 描述 列出所有的数据库 URL https://www.myserver.com/templeton/v1/ddl/database 参数 参数 描述 like 用来匹配数据库名的正则表达式。 返回结果 参数 描述 databases 数据库名 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/ddl/database' ddl/database/:db (GET) 描述 获取指定数据库的详细信息 URL https://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 返回结果 参数 描述 location 数据库位置 comment 数据库的备注,如果没有备注则不存在 database 数据库名 owner 数据库的所有者 owertype 数据库所有者的类型 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/ddl/database/default' ddl/database/:db (PUT) 描述 创建数据库 URL https://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 group 创建数据库时使用的用户组 permission 创建数据库时使用的权限 location 数据库的位置 comment 数据库的备注,比如描述 properties 数据库属性 返回结果 参数 描述 database 新创建的数据库的名字 例子 curl -i -u : --insecure --negotiate -X PUT -HContent-type:application/json -d '{"location": "/tmp/a", "comment": "my db", "properties": {"a": "b"}}' 'https://10.64.35.144:9111/templeton/v1/ddl/database/db2' ddl/database/:db (DELETE) 描述 删除数据库 URL https://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 ifExists 如果指定数据库不存在,Hive会返回错误,除非设置了ifExists为true。 option 将参数设置成cascade或者restrict。如果选择cascade,将清除一切,包括数据和定义。如果选择restrict,表格内容为空,模式也将不存在。 返回结果 参数 描述 database 删除的数据库名字 例子 curl -i -u : --insecure --negotiate -X DELETE 'https://10.64.35.144:9111/templeton/v1/ddl/database/db3?ifExists=true' ddl/database/:db/table (GET) 描述 列出数据库下的所有表 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table 参数 参数 描述 :db 数据库名 like 用来匹配表名的正则表达式 返回结果 参数 描述 database 数据库名字 tables 数据库下表名列表 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/ddl/database/default/table' ddl/database/:db/table/:table (GET) 描述 获取表的详细信息 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 表名 format 格式:format=extended,参考额外信息(“table extended like”)。 返回结果 参数 描述 columns 列名和类型 database 数据库名 table 表名 partitioned 是否分区表,只有extended下才会显示。 location 表的位置,只有extended下才会显示。 outputformat 输出形式,只有extended下才会显示。 inputformat 输入形式,只有extended下才会显示。 owner 表的属主,只有extended下才会显示。 partitionColumns 分区的列,只有extended下才会显示。 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1?format=extended' ddl/database/:db/table/:table (PUT) 描述 创建表 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 新建表名 group 创建表时使用的用户组 permissions 创建表时使用的权限 external 指定位置,hive不使用表的默认位置。 ifNotExists 设置为true,当表存在时不会报错。 comment 备注 columns 列描述,包括列名,类型和可选备注。 partitionedBy 分区列描述,用于划分表格。参数columns列出了列名,类型和可选备注。 clusteredBy 分桶列描述,参数包括columnNames、sortedBy、和numberOfBuckets。参数columnNames包括columnName和排列顺序(ASC为升序,DESC为降序)。 format 存储格式,参数包括rowFormat,storedAs,和storedBy。 location HDFS路径 tableProperties 表属性和属性值(name-value对) 返回结果 参数 描述 database 数据库名 table 表名 例子 curl -i -u : --insecure --negotiate -X PUT -HContent-type:application/json -d '{"columns": [{"name": "id", "type": "int"}, {"name": "name","type": "string"}], "comment": "hello","format": {"storedAs": "orc"} }' 'https://10.64.35.144:9111/templeton/v1/ddl/database/db3/table/tbl1' ddl/database/:db/table/:table (POST) 描述 重命名表 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 已有表名 rename 新表表名 返回结果 参数 描述 database 数据库名 table 新表表名 例子 curl -i -u : --insecure --negotiate -d rename=table1 'https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/tbl1' ddl/database/:db/table/:table (DELETE) 描述 删除表 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 表名 ifExists 当设置为true时,不报错。 返回结果 参数 描述 database 数据库名 table 表名 例子 curl -i -u : --insecure --negotiate -X DELETE 'https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/table2?ifExists=true' ddl/database/:db/table/:existingtable/like/:newtable (PUT) 描述 创建一张和已经存在的表一样的表 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:existingtable/like/:newtable 参数 参数 描述 :db 数据库名 :existingtable 已有表名 :newtable 新表名 group 创建表时使用的用户组。 permissions 创建表时使用的权限。 external 指定位置,hive不使用表的默认位置。 ifNotExists 当设置为true时,如果表已经存在,Hive不报错。 location HDFS路径 返回结果 参数 描述 database 数据库名 table 表名 例子 curl -i -u : --insecure --negotiate -X PUT -HContent-type:application/json -d '{"ifNotExists": "true"}' 'https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/like/tt1' ddl/database/:db/table/:table/partition(GET) 描述 列出表的分区信息 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 partitions 分区属性值和分区名 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition ddl/database/:db/table/:table/partition/:partition(GET) 描述 列出表的某个具体分区的信息 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition/:partition 参数 参数 描述 :db 数据库名 :table 表名 :partition 分区名,解码http引用时,需当心。比如country=%27algeria%27。 返回结果 参数 描述 database 数据库名 table 表名 partition 分区名 partitioned 如果设置为true,为分区表 location 表的存储路径 outputFormat 输出格式 columns 列名,类型,备注 owner 所有者 partitionColumns 分区的列 inputFormat 输入格式 totalNumberFiles 分区下文件个数 totalFileSize 分区下文件总大小 maxFileSize 最大文件大小 minFileSize 最小文件大小 lastAccessTime 最后访问时间 lastUpdateTime 最后更新时间 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=1 ddl/database/:db/table/:table/partition/:partition(PUT) 描述 增加一个表分区 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition/:partition 参数 参数 描述 :db 数据库名。 :table 表名。 group 创建新分区时使用的用户组。 permissions 创建新分区时用户的权限。 location 新分区的存放位置。 ifNotExists 如果设置为true, 当分区已经存在,系统报错。 返回结果 参数 描述 database 数据库名 table 表名 partitions 分区名 例子 curl -i -u : --insecure --negotiate -X PUT -HContent-type:application/json -d '{}' https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=10 ddl/database/:db/table/:table/partition/:partition(DELETE) 描述 删除一个表分区 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition/:partition 参数 参数 描述 :db 数据库名。 :table 表名。 group 删除新分区时使用的用户组。 permissions 删除新分区时用户的权限, 格式为rwxrw-r-x。 ifExists 如果指定分区不存在,Hive报错。参数值设置为true除外。 返回结果 参数 描述 database 数据库名 table 表名 partitions 分区名 例子 curl -i -u : --insecure --negotiate -X DELETE -HContent-type:application/json -d '{}' https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=10 ddl/database/:db/table/:table/column(GET) 描述 获取表的column列表 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 columns 列名字和类型 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column ddl/database/:db/table/:table/column/:column(GET) 描述 获取表的某个具体的column的信息 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column/:column 参数 参数 描述 :db 数据库名 :table 表名 :column 列名 返回结果 参数 描述 database 数据库名 table 表名 column 列名字和类型 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column/id ddl/database/:db/table/:table/column/:column(PUT) 描述 增加表的一列 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column/:column 参数 参数 描述 :db 数据库名 :table 表名 :column 列名 type 列类型,比如string和int comment 列备注,比如描述 返回结果 参数 描述 database 数据库名 table 表名 column 列名 例子 curl -i -u : --insecure --negotiate -X PUT -HContent-type:application/json -d '{"type": "string", "comment": "new column"}' https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column/name ddl/database/:db/table/:table/property(GET) 描述 获取表的property URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 properties 属性列表 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property ddl/database/:db/table/:table/property/:property(GET) 描述 获取表的某个具体的property的值 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property/:property 参数 参数 描述 :db 数据库名 :table 表名 :property 属性名 返回结果 参数 描述 database 数据库名 table 表名 property 属性列表 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property/last_modified_by ddl/database/:db/table/:table/property/:property(PUT) 描述 增加表的property的值 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property/:property 参数 参数 描述 :db 数据库名 :table 表名 :property 属性名 value 属性值 返回结果 参数 描述 database 数据库名 table 表名 property 属性名 例子 curl -i -u : --insecure --negotiate -X PUT -HContent-type:application/json -d '{"value": "my value"}' https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property/mykey mapreduce/jar(POST) 描述 执行MR任务,在执行之前,需要将MR的jar包上传到HDFS中 URL https://www.myserver.com/templeton/v1/mapreduce/jar 参数 参数 描述 jar 需要执行的MR的jar包。 class 需要执行的MR的分类。 libjars 需要加入的classpath的jar包名,以逗号分隔。 files 需要拷贝到MR集群的文件名,以逗号分隔。 arg Main类接受的输入参数。 define 设置hadoop的配置,格式为:define=NAME=VALUE。 statusdir WebHCat会将执行的MR任务的状态写入到statusdir中。如果设置了这个值,那么需要用户手动进行删除。 enablelog 如果statusdir设置,enablelog设置为true,收集Hadoop任务配置和日志到$statusdir/logs。此后,成功和失败的尝试,都将记录进日志。$statusdir/logs下,子目录布局为: logs/$job_id (directory for $job_id) logs/$job_id/job.xml.html logs/$job_id/$attempt_id (directory for $attempt_id) logs/$job_id/$attempt_id/stderr logs/$job_id/$attempt_id/stdout logs/$job_id/$attempt_id/syslog 仅支持Hadoop 1.X。 callback 在MR任务执行完的回调地址,使用$jobId,将任务ID嵌入回调地址。在回调地址中,任务ID替换该$jobId。 返回结果 参数 描述 id 任务ID,类似“job_201110132141_0001” 例子 curl -i -u : --insecure --negotiate -d jar="/tmp/word.count-0.0.1-SNAPSHOT.jar" -d class=com.huawei.word.count.WD -d statusdir="/output" -d enablelog=true "https://10.64.35.144:9111/templeton/v1/mapreduce/jar" mapreduce/streaming(POST) 描述 以Streaming方式提交MR任务 URL https://www.myserver.com/templeton/v1/mapreduce/streaming 参数 参数 描述 input Hadoop中input的路径。 output 存储output的路径。如没有规定,WebHCat将output储存在使用队列资源可以发现到的路径。 mapper mapper程序位置。 reducer reducer程序位置。 files HDFS文件添加到分布式缓存中。 arg 设置argument。 define 设置hadoop的配置变量,格式:define=NAME=VALUE cmdenv 设置环境变量,格式:cmdenv=NAME=VALUE statusdir WebHCat会将执行的MR任务的状态写入到statusdir中。如果设置了这个值,那么需要用户手动进行删除。 enablelog 如果statusdir设置,enablelog设置为true,收集Hadoop任务配置和日志到$statusdir/logs。此后,成功和失败的尝试,都将记录进日志。$statusdir/logs下,子目录布局为: logs/$job_id (directory for $job_id) logs/$job_id/job.xml.html logs/$job_id/$attempt_id (directory for $attempt_id) logs/$job_id/$attempt_id/stderr logs/$job_id/$attempt_id/stdout logs/$job_id/$attempt_id/syslog 仅支持Hadoop 1.X。 callback 在MR任务执行完的回调地址,使用$jobId,将任务ID嵌入回调地址。在回调地址中,任务ID将替换该$jobId。 返回结果 参数 描述 id 任务ID,类似job_201110132141_0001 例子 curl -i -u : --insecure --negotiate -d input=/input -d output=/oooo -d mapper=/bin/cat -d reducer="/usr/bin/wc -w" -d statusdir="/output" 'https://10.64.35.144:9111/templeton/v1/mapreduce/streaming' 本接口的使用需要前置条件,请参阅“开发规范”中的Hive规则。 /hive(POST) 描述 执行Hive命令 URL https://www.myserver.com/templeton/v1/hive 参数 参数 描述 execute hive命令,包含整个和短的Hive命令。 file 包含hive命令的HDFS文件。 files 需要拷贝到MR集群的文件名,以逗号分隔。 arg 设置argument。 define 设置hive配置,格式:define=key=value。使用post语句时需要配置实例的scratch dir。WebHCat实例使用define=hive.exec.scratchdir=/tmp/hive-scratch,WebHCat1实例使用define=hive.exec.scratchdir=/tmp/hive1-scratch,以此类推。 statusdir WebHCat会将执行的MR任务的状态写入到statusdir中。如果设置了这个值,那么需要用户手动进行删除。 enablelog 如果statusdir设置,enablelog设置为true,收集Hadoop任务配置和日志到$statusdir/logs。此后,成功和失败的尝试,都将记录进日志。$statusdir/logs下,子目录布局为: logs/$job_id (directory for $job_id) logs/$job_id/job.xml.html logs/$job_id/$attempt_id (directory for $attempt_id) logs/$job_id/$attempt_id/stderr logs/$job_id/$attempt_id/stdout logs/$job_id/$attempt_id/syslog callback 在MR任务执行完的回调地址,使用$jobId,将任务ID嵌入回调地址。在回调地址中,任务ID将替换该$jobId。 返回结果 参数 描述 id 任务ID,类似job_201110132141_0001 例子 curl -i -u : --insecure --negotiate -d execute="select count(*) from t1" -d define=hive.exec.scratchdir=/tmp/hive-scratch -d statusdir="/output" "https://10.64.35.144:9111/templeton/v1/hive" jobs(GET) 描述 获取所有的job id URL https://www.myserver.com/templeton/v1/jobs 参数 参数 描述 fields 如果设置成*,那么会返回每个job的详细信息。如果没设置,只返回任务ID。现在只能设置成*,如设置成其他值,将出现异常。 jobid 如果设置了jobid,那么只有字典顺序比jobid大的job才会返回。比如,如果jobid为"job_201312091733_0001",只有大于该值的job才能返回。返回的job的个数,取决于numrecords。 numrecords 如果设置了numrecords和jobid,jobid列表按字典顺序排列,待jobid返回后,可以得到numrecords的最大值。如果jobid没有设置, 而numrecords设置了参数值,jobid按字典顺序排列后,可以得到numrecords的最大值。相反,如果numrecords没有设置,而jobid设置了参数值,所有大于jobid的job都将返回。 showall 如果设置为true,用户可以浏览的所有job都将返回。不仅仅是用户所拥有的job。 返回结果 参数 描述 id Job id detail 如果showall为true,那么显示detail信息,否则为null。 例子 curl -i -u : --insecure --negotiate "https://10.64.35.144:9111/templeton/v1/jobs" jobs/:jobid(GET) 描述 获取指定job的信息 URL https://www.myserver.com/templeton/v1/jobs/:jobid 参数 参数 描述 jobid Job创建后的Jobid 返回结果 参数 描述 status 包含job状态信息的json对象。 profile 包含job状态的json对象。WebHCat解析JobProfile对象中的信息,该对象因Hadoop版本不同而不同。 id Job的id。 percentComplete 完成百分比,比如75% complete,如果完成后则为null。 user 创建job的用户。 callback 回调URL(如果有)。 userargs 用户提交job时的argument参数和参数值。 exitValue job退出值。 例子 curl -i -u : --insecure --negotiate "https://10.64.35.144:9111/templeton/v1/jobs/job_1440386556001_0255" jobs/:jobid(DELETE) 描述 kill任务 URL https://www.myserver.com/templeton/v1/jobs/:jobid 参数 参数 描述 :jobid 删除的Job的ID 返回结果 参数 描述 user 提交Job的用户。 status 包含Job状态信息的JSON对象。 profile 包含job信息的json对象。WebHCat解析JobProfile对象中的信息,该对象因Hadoop版本不同而不同。 id Job的id。 callback 回调的URL(如果有)。 例子 curl -i -u : --insecure --negotiate -X DELETE "https://10.64.35.143:9111/templeton/v1/jobs/job_1440386556001_0265" 父主题: 对外接口
  • 安全认证代码 目前样例代码统一调用LoginUtil类进行安全认证。 在HDFS样例工程代码中,不同的样例工程,使用的认证代码不同,包括基本安全认证和带ZooKeeper认证。 基本安全认证: com.huawei.bigdata.hdfs.examples包的HdfsExample类样例程序不需要访问HBase或ZooKeeper,所以使用基本的安全认证代码即可。示例代码如下: ... private static final String PATH_TO_HDFS_SITE_XML = HdfsExample.class.getClassLoader().getResource("hdfs-site.xml").getPath(); private static final String PATH_TO_CORE_SITE_XML = HdfsExample.class.getClassLoader().getResource("core-site.xml").getPath(); private static final String PRNCIPAL_NAME = "hdfsDeveloper"; private static final String PATH_TO_KEYTAB = HdfsExample.class.getClassLoader().getResource("user.keytab").getPath(); private static final String PATH_TO_KRB5_CONF = HdfsExample.class.getClassLoader().getResource("krb5.conf").getPath(); private static Configuration conf = null; } ... private static void authentication() throws IOException { // security mode if ("kerberos".equalsIgnoreCase(conf.get("hadoop.security.authentication"))) { System.setProperty("java.security.krb5.conf", PATH_TO_KRB5_CONF); LoginUtil.login(PRNCIPAL_NAME, PATH_TO_KEYTAB, PATH_TO_KRB5_CONF, conf); } } 带ZooKeeper认证: com.huawei.bigdata.hdfs.examples包的“ColocationExample”类样例程序不仅需要基础安全认证,还需要添加ZooKeeper服务端Principal才能完成安全认证。示例代码如下: ... private static final String ZOOKEEPER_SERVER_PRINCIPAL_KEY = "zookeeper.server.principal"; private static final String PRINCIPAL = "username.client.kerberos.principal"; private static final String KEYTAB = "username.client.keytab.file"; private static final String PRNCIPAL_NAME = "hdfsDeveloper"; private static final String LOG IN_CONTEXT_NAME = "Client"; private static final String PATH_TO_KEYTAB = System.getProperty("user.dir") + File.separator + "conf" + File.separator + "user.keytab"; private static final String PATH_TO_KRB5_CONF = ColocationExample.class.getClassLoader().getResource("krb5.conf") .getPath(); private static String zookeeperDefaultServerPrincipal = null; private static Configuration conf = new Configuration(); private static DFSColocationAdmin dfsAdmin; private static DFSColocationClient dfs; private static void init() throws IOException { LoginUtil.login(PRNCIPAL_NAME, PATH_TO_KEYTAB, PATH_TO_KRB5_CONF, conf); LoginUtil.setJaasConf(LOGIN_CONTEXT_NAME, PRNCIPAL_NAME, PATH_TO_KEYTAB); zookeeperDefaultServerPrincipal = "zookeeper/hadoop." + KerberosUtil.getKrb5DomainRealm().toLowerCase(); LoginUtil.setZookeeperServerPrincipal(ZOOKEEPER_SERVER_PRINCIPAL_KEY, zookeeperDefaultServerPrincipal); } ...
  • 场景说明 访问安全集群环境中的服务,需要先通过Kerberos安全认证。所以HDFS应用程序中需要写入安全认证代码,确保HDFS程序能够正常运行。 安全认证有两种方式: 命令行认证: 提交HDFS应用程序运行前,在HDFS客户端执行如下命令进行认证。 kinit 组件业务用户 该方式仅适用于Linux操作系统,且安装了HDFS的客户端。 代码认证: 通过获取客户端的principal和keytab文件进行认证。 注意修改代码中的PRINCIPAL_NAME变量为实际使用的值。 private static final String PRNCIPAL_NAME = "hdfsDeveloper";
  • 前提条件 配置用户的集群信息和登录账号信息: 配置文件:“样例工程文件夹\conf\UserInfo.properties”。 参数说明: userName:登录Manager系统的用户名。 password:userName对应的用户密码。 webUrl:Manager首页地址。 填写“UserInfo.properties”文件中的参数,注意填写的准确性,可以仿照以下参数示例进行填写,其中,“IP_Address”填写 FusionInsight Manager对应的浮动IP地址。 如果需要使用其他用户进行操作,请先登录FusionInsight Manager创建用户。 userName= admin password= adminPassWord webUrl= https://IP_Address:28443/web/
  • 代码样例 以下代码片段是调用firstAccess接口完成登录认证的示例,在“rest”包的“UserManager”类的main方法中。 BasicAuthAccess authAccess = new BasicAuthAccess(); HttpClient httpClient = authAccess.loginAndAccess(webUrl, userName, password, userTLSVersion); LOG.info("Start to access REST API."); HttpManager httpManager = new HttpManager(); String operationName = ""; String operationUrl = ""; String jsonFilePath = "";
  • 代码样例 Token认证机制支持API,用户可在二次开发样例的Producer()和Consumer()中对其进行配置。 Producer()配置的样例代码如下: public static Properties initProperties() { Properties props = new Properties(); KafkaProperties kafkaProc = KafkaProperties.getInstance(); // Broker地址列表 props.put(BOOTSTRAP_SERVER, kafkaProc.getValues(BOOTSTRAP_SERVER, "localhost:21007")); // 客户端ID props.put(CLIENT_ID, kafkaProc.getValues(CLIENT_ID, "DemoProducer")); // Key序列化类 props.put(KEY_SERIALIZER, kafkaProc.getValues(KEY_SERIALIZER, "org.apache.kafka.common.serialization.StringSerializer")); // Value序列化类 props.put(VALUE_SERIALIZER, kafkaProc.getValues(VALUE_SERIALIZER, "org.apache.kafka.common.serialization.StringSerializer")); // 协议类型:当前支持配置为SASL_PLAINTEXT或者PLAINTEXT props.put(SECURITY_PROTOCOL, kafkaProc.getValues(SECURITY_PROTOCOL, "SASL_PLAINTEXT")); // 服务名 props.put(SASL_KERBEROS_SERVICE_NAME, "kafka"); // 域名 props.put(KERBEROS_DOMAIN_NAME, kafkaProc.getValues(KERBEROS_DOMAIN_NAME, "hadoop.hadoop.com")); // 分区类名 props.put(PARTITIONER_NAME, kafkaProc.getValues(PARTITIONER_NAME, "com.huawei.bigdata.kafka.example.SimplePartitioner")); // 生成Token配置 StringBuilder token = new StringBuilder(); String LINE_SEPARATOR = System.getProperty("line.separator"); token.append("org.apache.kafka.common.security.scram.ScramLoginModule required").append(LINE_SEPARATOR); /** * 用户自己生成的Token的TOKENID */ token.append("username=\"PPVz2cxuQC-okwJVZnFKFg\"").append(LINE_SEPARATOR); /** * 用户自己生成的Token的HMAC */ token.append("password=\"pL5nHsIUODg5u0dRM+o62cOIf/j6yATSt6uaPBYfIb29dj/jbpiAnRGSWDJ6tL4KXo89dot0axcRIDsMagyN4g==\"").append(LINE_SEPARATOR); token.append("tokenauth=true;"); // 用户使用的SASL机制,配置为SC RAM -SHA-512 props.put("sasl.mechanism", "SCRAM-SHA-512"); props.put("sasl.jaas.config", token.toString()); return props; } Consumer()配置的样例代码如下: public static Properties initProperties() { Properties props = new Properties(); KafkaProperties kafkaProc = KafkaProperties.getInstance(); // Broker连接地址 props.put(BOOTSTRAP_SERVER, kafkaProc.getValues(BOOTSTRAP_SERVER, "localhost:21007")); // Group id props.put(GROUP_ID, kafkaProc.getValues(GROUP_ID, "DemoConsumer")); // 是否自动提交offset props.put(ENABLE_AUTO_COMMIT, kafkaProc.getValues(ENABLE_AUTO_COMMIT, "true")); // 自动提交offset的时间间隔 props.put(AUTO_COMMIT_INTERVAL_MS, kafkaProc.getValues(AUTO_COMMIT_INTERVAL_MS,"1000")); // 会话超时时间 props.put(SESSION_TIMEOUT_MS, kafkaProc.getValues(SESSION_TIMEOUT_MS, "30000")); // 消息Key值使用的反序列化类 props.put(KEY_DESERIALIZER, kafkaProc.getValues(KEY_DESERIALIZER, "org.apache.kafka.common.serialization.StringDeserializer")); // 消息内容使用的反序列化类 props.put(VALUE_DESERIALIZER, kafkaProc.getValues(VALUE_DESERIALIZER, "org.apache.kafka.common.serialization.StringDeserializer")); // 安全协议类型 props.put(SECURITY_PROTOCOL, kafkaProc.getValues(SECURITY_PROTOCOL, "SASL_PLAINTEXT")); // 服务名 props.put(SASL_KERBEROS_SERVICE_NAME, "kafka"); // 域名 props.put(KERBEROS_DOMAIN_NAME, kafkaProc.getValues(KERBEROS_DOMAIN_NAME, "hadoop.hadoop.com")); // 生成Token配置 StringBuilder token = new StringBuilder(); String LINE_SEPARATOR = System.getProperty("line.separator"); token.append("org.apache.kafka.common.security.scram.ScramLoginModule required").append(LINE_SEPARATOR); /** * 用户自己生成的Token的TOKENID */ token.append("username=\"PPVz2cxuQC-okwJVZnFKFg\"").append(LINE_SEPARATOR); /** * 用户自己生成的Token的HMAC */ token.append("password=\"pL5nHsIUODg5u0dRM+o62cOIf/j6yATSt6uaPBYfIb29dj/jbpiAnRGSWDJ6tL4KXo89dot0axcRIDsMagyN4g==\"").append(LINE_SEPARATOR); token.append("tokenauth=true;"); // 用户使用的SASL机制,配置为SCRAM-SHA-512 props.put("sasl.mechanism", "SCRAM-SHA-512"); props.put("sasl.jaas.config", token.toString()); return props; }
  • 代码样例 通过SpringBoot实现Kafka生产消费的样例代码如下: @RestController public class MessageController { private final static Logger LOG = LoggerFactory.getLogger(MessageController.class); @Autowired private KafkaProperties kafkaProperties; @GetMapping("/produce") public String produce() { Producer producerThread = new Producer(); producerThread.init(this.kafkaProperties); producerThread.start(); String message = "Start to produce messages"; LOG.info(message); return message; } @GetMapping("/consume") public String consume() { Consumer consumerThread = new Consumer(); consumerThread.init(this.kafkaProperties); consumerThread.start(); LOG.info("Start to consume messages"); // 等到180s后将consumer关闭,实际执行过程中可修改 try { Thread.sleep(consumerThread.getThreadAliveTime()); } catch (InterruptedException e) { LOG.info("Occurred InterruptedException: ", e); } finally { consumerThread.close(); } return String.format("Finished consume messages"); } }
  • WebHCat 以下示例的IP为WebHCat的业务IP,端口为安装时设置的WebHCat HTTP端口。 除“:version”、“status”、“version”、“version/hive”、“version/hadoop”以外,其他API都需要添加user.name参数。 :version(GET) 描述 查询WebHCat支持的返回类型列表。 URL http://www.myserver.com/templeton/:version 参数 参数 描述 :version WebHCat版本号(当前必须是v1)。 返回结果 参数 描述 responseTypes WebHCat支持的返回类型列表。 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1' status (GET) 描述 获取当前服务器的状态 URL http://www.myserver.com/templeton/v1/status 参数 无 返回结果 参数 描述 status WebHCat连接正常,返回OK。 version 字符串,包含版本号,比如v1。 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/status' version (GET) 描述 获取服务器WebHCat的版本 URL http://www.myserver.com/templeton/v1/version 参数 无 返回结果 参数 描述 supportedVersions 所有支持的版本 version 当前服务器WebHCat的版本 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/version' version/hive (GET) 描述 获取服务器Hive的版本 URL http://www.myserver.com/templeton/v1/version/hive 参数 无 返回结果 参数 描述 module hive version Hive的版本 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/version/hive' version/hadoop (GET) 描述 获取服务器Hadoop的版本 URL http://www.myserver.com/templeton/v1/version/hadoop 参数 无 返回结果 参数 描述 module hadoop version Hadoop的版本 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/version/hadoop' ddl (POST) 描述 执行DDL语句 URL http://www.myserver.com/templeton/v1/ddl 参数 参数 描述 exec 需要执行的HCatalog DDL语句。 group 当DDL是创建表时,创建表使用的用户组。 permissions 当DDL是创建表时,创建表使用的权限,格式为rwxr-xr-x。 返回结果 参数 描述 stdout HCatalog执行时的标准输出值,可能为空。 stderr HCatalog执行时的错误输出,可能为空。 exitcode HCatalog的返回值。 例子 curl -i -u : --negotiate -d exec="show tables" 'http://10.64.35.144:9111/templeton/v1/ddl?user.name=user1' ddl/database (GET) 描述 列出所有的数据库 URL http://www.myserver.com/templeton/v1/ddl/database 参数 参数 描述 like 用来匹配数据库名的正则表达式。 返回结果 参数 描述 databases 数据库名 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/ddl/database?user.name=user1' ddl/database/:db (GET) 描述 获取指定数据库的详细信息 URL http://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 返回结果 参数 描述 location 数据库位置 comment 数据库的备注,如果没有备注则不存在 database 数据库名 owner 数据库的所有者 owertype 数据库所有者的类型 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/ddl/database/default?user.name=user1' ddl/database/:db (PUT) 描述 创建数据库 URL http://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 group 创建数据库时使用的用户组 permission 创建数据库时使用的权限 location 数据库的位置 comment 数据库的备注,比如描述 properties 数据库属性 返回结果 参数 描述 database 新创建的数据库的名字 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{"location": "/tmp/a", "comment": "my db", "properties": {"a": "b"}}' 'http://10.64.35.144:9111/templeton/v1/ddl/database/db2?user.name=user1' ddl/database/:db (DELETE) 描述 删除数据库 URL http://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 ifExists 如果指定数据库不存在,Hive会返回错误,除非设置了ifExists为true。 option 将参数设置成cascade或者restrict。如果选择cascade,将清除一切,包括数据和定义。如果选择restrict,表格内容为空,模式也将不存在。 返回结果 参数 描述 database 删除的数据库名字 例子 curl -i -u : --negotiate -X DELETE 'http://10.64.35.144:9111/templeton/v1/ddl/database/db3?ifExists=true&user.name=user1' ddl/database/:db/table (GET) 描述 列出数据库下的所有表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table 参数 参数 描述 :db 数据库名 like 用来匹配表名的正则表达式 返回结果 参数 描述 database 数据库名字 tables 数据库下表名列表 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/ddl/database/default/table?user.name=user1' ddl/database/:db/table/:table (GET) 描述 获取表的详细信息 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 表名 format 格式:format=extended,参考额外信息(“table extended like”)。 返回结果 参数 描述 columns 列名和类型 database 数据库名 table 表名 partitioned 是否分区表,只有extended下才会显示。 location 表的位置,只有extended下才会显示。 outputformat 输出形式,只有extended下才会显示。 inputformat 输入形式,只有extended下才会显示。 owner 表的属主,只有extended下才会显示。 partitionColumns 分区的列,只有extended下才会显示。 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1?format=extended&user.name=user1' ddl/database/:db/table/:table (PUT) 描述 创建表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 新建表名 group 创建表时使用的用户组 permissions 创建表时使用的权限 external 指定位置,hive不使用表的默认位置。 ifNotExists 设置为true,当表存在时不会报错。 comment 备注 columns 列描述,包括列名,类型和可选备注。 partitionedBy 分区列描述,用于划分表格。参数columns列出了列名,类型和可选备注。 clusteredBy 分桶列描述,参数包括columnNames、sortedBy、和numberOfBuckets。参数columnNames包括columnName和排列顺序(ASC为升序,DESC为降序)。 format 存储格式,参数包括rowFormat,storedAs,和storedBy。 location HDFS路径 tableProperties 表属性和属性值(name-value对) 返回结果 参数 描述 database 数据库名 table 表名 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{"columns": [{"name": "id", "type": "int"}, {"name": "name","type": "string"}], "comment": "hello","format": {"storedAs": "orc"} }' 'http://10.64.35.144:9111/templeton/v1/ddl/database/db3/table/tbl1?user.name=user1' ddl/database/:db/table/:table (POST) 描述 重命名表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 已有表名 rename 新表表名 返回结果 参数 描述 database 数据库名 table 新表表名 例子 curl -i -u : --negotiate -d rename=table1 'http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/tbl1?user.name=user1' ddl/database/:db/table/:table (DELETE) 描述 删除表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 表名 ifExists 当设置为true时,不报错。 返回结果 参数 描述 database 数据库名 table 表名 例子 curl -i -u : --negotiate -X DELETE 'http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/table2?ifExists=true&user.name=user1' ddl/database/:db/table/:existingtable/like/:newtable (PUT) 描述 创建一张和已经存在的表一样的表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:existingtable/like/:newtable 参数 参数 描述 :db 数据库名 :existingtable 已有表名 :newtable 新表名 group 创建表时使用的用户组。 permissions 创建表时使用的权限。 external 指定位置,hive不使用表的默认位置。 ifNotExists 当设置为true时,如果表已经存在,Hive不报错。 location HDFS路径 返回结果 参数 描述 database 数据库名 table 表名 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{"ifNotExists": "true"}' 'http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/like/tt1?user.name=user1' ddl/database/:db/table/:table/partition(GET) 描述 列出表的分区信息 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 partitions 分区属性值和分区名 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition?user.name=user1 ddl/database/:db/table/:table/partition/:partition(GET) 描述 列出表的某个具体分区的信息 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition/:partition 参数 参数 描述 :db 数据库名 :table 表名 :partition 分区名,解码http引用时,需当心。比如country=%27algeria%27。 返回结果 参数 描述 database 数据库名 table 表名 partition 分区名 partitioned 如果设置为true,为分区表 location 表的存储路径 outputFormat 输出格式 columns 列名,类型,备注 owner 所有者 partitionColumns 分区的列 inputFormat 输入格式 totalNumberFiles 分区下文件个数 totalFileSize 分区下文件总大小 maxFileSize 最大文件大小 minFileSize 最小文件大小 lastAccessTime 最后访问时间 lastUpdateTime 最后更新时间 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=1?user.name=user1 ddl/database/:db/table/:table/partition/:partition(PUT) 描述 增加一个表分区 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition/:partition 参数 参数 描述 :db 数据库名。 :table 表名。 group 创建新分区时使用的用户组。 permissions 创建新分区时用户的权限。 location 新分区的存放位置。 ifNotExists 如果设置为true, 当分区已经存在,系统报错。 返回结果 参数 描述 database 数据库名 table 表名 partitions 分区名 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{}' http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=10?user.name=user1 ddl/database/:db/table/:table/partition/:partition(DELETE) 描述 删除一个表分区 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition/:partition 参数 参数 描述 :db 数据库名。 :table 表名。 group 删除新分区时使用的用户组。 permissions 删除新分区时用户的权限, 格式为rwxrw-r-x。 ifExists 如果指定分区不存在,Hive报错。参数值设置为true除外。 返回结果 参数 描述 database 数据库名 table 表名 partitions 分区名 例子 curl -i -u : --negotiate -X DELETE -HContent-type:application/json -d '{}' http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=10?user.name=user1 ddl/database/:db/table/:table/column(GET) 描述 获取表的column列表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 columns 列名字和类型 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column?user.name=user1 ddl/database/:db/table/:table/column/:column(GET) 描述 获取表的某个具体的column的信息 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column/:column 参数 参数 描述 :db 数据库名 :table 表名 :column 列名 返回结果 参数 描述 database 数据库名 table 表名 column 列名字和类型 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column/id?user.name=user1 ddl/database/:db/table/:table/column/:column(PUT) 描述 增加表的一列 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column/:column 参数 参数 描述 :db 数据库名 :table 表名 :column 列名 type 列类型,比如string和int comment 列备注,比如描述 返回结果 参数 描述 database 数据库名 table 表名 column 列名 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{"type": "string", "comment": "new column"}' http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column/name?user.name=user1 ddl/database/:db/table/:table/property(GET) 描述 获取表的property URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 properties 属性列表 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property?user.name=user1 ddl/database/:db/table/:table/property/:property(GET) 描述 获取表的某个具体的property的值 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property/:property 参数 参数 描述 :db 数据库名 :table 表名 :property 属性名 返回结果 参数 描述 database 数据库名 table 表名 property 属性列表 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property/last_modified_by?user.name=user1 ddl/database/:db/table/:table/property/:property(PUT) 描述 增加表的property的值 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property/:property 参数 参数 描述 :db 数据库名 :table 表名 :property 属性名 value 属性值 返回结果 参数 描述 database 数据库名 table 表名 property 属性名 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{"value": "my value"}' http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property/mykey?user.name=user1 mapreduce/jar(POST) 描述 执行MR任务,在执行之前,需要将MR的jar包上传到HDFS中 URL http://www.myserver.com/templeton/v1/mapreduce/jar 参数 参数 描述 jar 需要执行的MR的jar包。 class 需要执行的MR的分类。 libjars 需要加入的classpath的jar包名,以逗号分隔。 files 需要拷贝到MR集群的文件名,以逗号分隔。 arg Main类接受的输入参数。 define 设置hadoop的配置,格式为:define=NAME=VALUE。 statusdir WebHCat会将执行的MR任务的状态写入到statusdir中。如果设置了这个值,那么需要用户手动进行删除。 enablelog 如果statusdir设置,enablelog设置为true,收集Hadoop任务配置和日志到$statusdir/logs。此后,成功和失败的尝试,都将记录进日志。$statusdir/logs下,子目录布局为: logs/$job_id (directory for $job_id) logs/$job_id/job.xml.html logs/$job_id/$attempt_id (directory for $attempt_id) logs/$job_id/$attempt_id/stderr logs/$job_id/$attempt_id/stdout logs/$job_id/$attempt_id/syslog 仅支持Hadoop 1.X。 callback 在MR任务执行完的回调地址,使用$jobId,将任务ID嵌入回调地址。在回调地址中,任务ID替换该$jobId。 返回结果 参数 描述 id 任务ID,类似“job_201110132141_0001” 例子 curl -i -u : --negotiate -d jar="/tmp/word.count-0.0.1-SNAPSHOT.jar" -d class=com.huawei.word.count.WD -d statusdir="/output" "http://10.64.35.144:9111/templeton/v1/mapreduce/jar?user.name=user1" mapreduce/streaming(POST) 描述 以Streaming方式提交MR任务 URL http://www.myserver.com/templeton/v1/mapreduce/streaming 参数 参数 描述 input Hadoop中input的路径。 output 存储output的路径。如没有规定,WebHCat将output储存在使用队列资源可以发现到的路径。 mapper mapper程序位置。 reducer reducer程序位置。 files HDFS文件添加到分布式缓存中。 arg 设置argument。 define 设置hadoop的配置变量,格式:define=NAME=VALUE cmdenv 设置环境变量,格式:cmdenv=NAME=VALUE statusdir WebHCat会将执行的MR任务的状态写入到statusdir中。如果设置了这个值,那么需要用户手动进行删除。 enablelog 如果statusdir设置,enablelog设置为true,收集Hadoop任务配置和日志到$statusdir/logs。此后,成功和失败的尝试,都将记录进日志。$statusdir/logs下,子目录布局为: logs/$job_id (directory for $job_id) logs/$job_id/job.xml.html logs/$job_id/$attempt_id (directory for $attempt_id) logs/$job_id/$attempt_id/stderr logs/$job_id/$attempt_id/stdout logs/$job_id/$attempt_id/syslog 仅支持Hadoop 1.X。 callback 在MR任务执行完的回调地址,使用$jobId,将任务ID嵌入回调地址。在回调地址中,任务ID将替换该$jobId。 返回结果 参数 描述 id 任务ID,类似job_201110132141_0001 例子 curl -i -u : --negotiate -d input=/input -d output=/oooo -d mapper=/bin/cat -d reducer="/usr/bin/wc -w" -d statusdir="/output" 'http://10.64.35.144:9111/templeton/v1/mapreduce/streaming?user.name=user1' 本接口的使用需要前置条件,请参阅“开发规范”中的Hive规则。 /hive(POST) 描述 执行Hive命令 URL http://www.myserver.com/templeton/v1/hive 参数 参数 描述 execute hive命令,包含整个和短的Hive命令。 file 包含hive命令的HDFS文件。 files 需要拷贝到MR集群的文件名,以逗号分隔。 arg 设置argument。 define 设置Hive的配置,格式:define=key=value,如果使用多实例,需要配置实例的scratch dir,如WebHCat实例使用define=hive.exec.scratchdir=/tmp/hive-scratch,WebHCat1实例使用define=hive.exec.scratchdir=/tmp/hive1-scratch,以此类推。 statusdir WebHCat会将执行的MR任务的状态写入到statusdir中。如果设置了这个值,那么需要用户手动进行删除。 enablelog 如果statusdir设置,enablelog设置为true,收集Hadoop任务配置和日志到$statusdir/logs。此后,成功和失败的尝试,都将记录进日志。$statusdir/logs下,子目录布局为: logs/$job_id (directory for $job_id) logs/$job_id/job.xml.html logs/$job_id/$attempt_id (directory for $attempt_id) logs/$job_id/$attempt_id/stderr logs/$job_id/$attempt_id/stdout logs/$job_id/$attempt_id/syslog callback 在MR任务执行完的回调地址,使用$jobId,将任务ID嵌入回调地址。在回调地址中,任务ID将替换该$jobId。 返回结果 参数 描述 id 任务ID,类似job_201110132141_0001 例子 curl -i -u : --negotiate -d execute="select count(*) from t1" -d statusdir="/output" -d define=hive.exec.scratchdir=/tmp/hive-scratch "http://10.64.35.144:9111/templeton/v1/hive?user.name=user1" jobs(GET) 描述 获取所有的job id URL http://www.myserver.com/templeton/v1/jobs 参数 参数 描述 fields 如果设置成*,那么会返回每个job的详细信息。如果没设置,只返回任务ID。现在只能设置成*,如设置成其他值,将出现异常。 jobid 如果设置了jobid,那么只有字典顺序比jobid大的job才会返回。比如,如果jobid为"job_201312091733_0001",只有大于该值的job才能返回。返回的job的个数,取决于numrecords。 numrecords 如果设置了numrecords和jobid,jobid列表按字典顺序排列,待jobid返回后,可以得到numrecords的最大值。如果jobid没有设置, 而numrecords设置了参数值,jobid按字典顺序排列后,可以得到numrecords的最大值。相反,如果numrecords没有设置,而jobid设置了参数值,所有大于jobid的job都将返回。 showall 如果设置为true,用户可以获取所有job,如果设置为false,则只获取当前用户提交的job。默认为false。 返回结果 参数 描述 id Job id detail 如果showall为true,那么显示detail信息,否则为null。 例子 curl -i -u : --negotiate "http://10.64.35.144:9111/templeton/v1/jobs?user.name=user1" jobs/:jobid(GET) 描述 获取指定job的信息 URL http://www.myserver.com/templeton/v1/jobs/:jobid 参数 参数 描述 jobid Job创建后的Jobid 返回结果 参数 描述 status 包含job状态信息的json对象。 profile 包含job状态的json对象。WebHCat解析JobProfile对象中的信息,该对象因Hadoop版本不同而不同。 id Job的id。 percentComplete 完成百分比,比如75% complete,如果完成后则为null。 user 创建job的用户。 callback 回调URL(如果有)。 userargs 用户提交job时的argument参数和参数值。 exitValue job退出值。 例子 curl -i -u : --negotiate "http://10.64.35.144:9111/templeton/v1/jobs/job_1440386556001_0255?user.name=user1" jobs/:jobid(DELETE) 描述 kill任务 URL http://www.myserver.com/templeton/v1/jobs/:jobid 参数 参数 描述 :jobid 删除的Job的ID 返回结果 参数 描述 user 提交Job的用户。 status 包含Job状态信息的JSON对象。 profile 包含job信息的json对象。WebHCat解析JobProfile对象中的信息,该对象因Hadoop版本不同而不同。 id Job的id。 callback 回调的URL(如果有)。 例子 curl -i -u : --negotiate -X DELETE "http://10.64.35.143:9111/templeton/v1/jobs/job_1440386556001_0265?user.name=user1" 父主题: 对外接口
  • 场景说明 在安全集群环境下,各个组件之间的相互通信不能够简单的互通,而需要在通信之前进行相互认证,以确保通信的安全性。 用户在提交MapReduce应用程序时,需要与Yarn、HDFS等之间进行通信。那么提交MapReduce的应用程序中需要写入安全认证代码,确保MapReduce程序能够正常运行。 安全认证有两种方式: 命令行认证: 提交MapReduce应用程序运行前,在MapReduce客户端执行如下命令获得认证。 kinit 组件业务用户 代码认证: 通过获取客户端的principal和keytab文件在应用程序中进行认证。
  • 华为云 数据治理 平台 数据治理总体架构 数据治理中心 DataArtsStudio https://support.huaweicloud.com/dataartsstudio/index.html 数据湖探索 DLI https://support.huaweicloud.com/dli/index.html 数据仓库 服务DWS https://support.huaweicloud.com/dws/index.html 数据复制服务 DRS https://support.huaweicloud.com/function-drs/index.html 云数据迁移 CDM https://support.huaweicloud.com/cdm/ 应用与 数据集成平台 ROMAConnect https://support.huaweicloud.com/roma/index.html 父主题: 实施步骤
  • 应用场景 中软国际数据治理专业服务解决方案,旨在基于 华为云计算 底座,通过 DataArts Studio 等大数据相关产品,为企业提供数据治理服务。 在数字政府行业,帮助政府建设数据专区,通过数据开发利用,实现数据分析决策。丰富的数据应用场景,让数据在应用中发挥作用,提升政府行政执法效率;激活政府数据资产,让数据在决策中呈现价值,帮助政府了解营商数据,更好的招商引资。 在数字航空行业,帮助企业构建数据治理标准体系,构建统一的数仓,推动航班运行控制智能决策。通过一站式的大数据平台和数据治理服务为客户搭建数据底座,并以数据服务、指标、算法、报表、可视化等多种方式,对业务系统进行数据赋能。 在数字能源行业,帮助企业打通数据壁垒,建设统一的数据标准质量,将各类数据指标通过大屏展示。通过数据使能构建,各类报表大屏定制化开发,帮助企业领导决策。
  • 方案架构 中软国际数据治理专业服务解决方案,承载帮助企业实现数字化转型能,具备“方法论+数据平台+数据应用+行业场景”所需的全套能力体系,从咨询规划设计、交付实施落地、定制开发,到后期的数据运维运营,为客户量身定制一站式数据治理服务解决方案;帮助企业从多角度、多层次、多粒度挖掘数据价值,实现数据驱动运营,完成数字化转型。 数据治理专业服务解决方案,以数据治理为基础,数据智能为动力,驱动企业加速发展,主要由5个核心服务组成: 数据治理咨询服务:帮助客户了解什么是数据治理,数据治理如何实施,是否需要做数据治理,同行企业如何做数据治理,能为企业带来哪些价值。 数据治理实施服务:帮助企业将结构化数据、非结构化数据,通过数据集成服务采集到数仓、 数据湖 里,通过数据治理平台完成数治理,最后将数据以API形式开放。 定制开发服务:帮助企业定制开发报表、大屏、应用。 数据运维服务:帮助企业数据运维。包括日常的数据作业监控管理、云上资源环境监控、数据日常维护、日常告警处理等。 数据运营服务:帮助企业数据资产运营。包括数据发布审批、新数据的接入、新数据API接口开放需求处理,数据需求管理等。 图1 业务架构图 方案采用云服务的方式部署交付,整体部署架构如下: 图2 部署架构图 架构描述: 本架构基于某客户数据治理项目实践输出,作为最佳实践案例,不代表数据治理的完整集成架构。客户作为零售服务企业,零售数据来源多个POS平台以及APP和小程序,平台应用由不同的软件厂商提供,导致数据标准不统一,和银行方、渠道方对账错误频发,且无法追溯。本方案架构旨在梳理并打通客户数据的汇聚、数据存储、数据治理、数据分类、数据推送等通路,构建数据质量管理体系,实现专题数据自动对账、自动入账、 数据可视化 。其中数据集成,主要通过数据复制服务DRS、云数据迁移CDM,将数据采集,根据数据类型分类,其中事务数据存入云数据库RDS中,分析型数据存入数仓DWS中。在数据治理中心DataArts Studio中进行数据治理作业,最后通过应用与数据集成平台ROMAConnect开放接口,提供数据给第三方综合结算系统。
  • 方案优势 依托华为云大数据产品,结合中软国际数据治理专业服务能力,为企业数字化转型奠定数据基础。该方案具备以下几个优势: 一站式数据治理专业服务解决方案 为客户提供咨询服务、交付实施、定制开发、数据运维运营一站式数据治理服务。 安全可靠云大数据产品 云上大数据产品,可以降低企业的运营成本,提升企业的运维效率,提高数据的安全性,减少企业的空间占用。 深耕多年行业经验案例 在政府、航空、能源行业,深耕多年,有着丰富的行业经验 和 N个标杆级成功案例,包括智慧城市、机场、电网等。
  • 定制开发服务 定制开发服务分类 大屏、报表定制设计开发:根据客户报表需求,设计报表,并定制开发。 移动端、PC端应用设计开发:按照第三方对账系统要求,开放接口,并提供数据对接测试。 定制开发服务流程 服务阶段 里程碑说明 启动阶段 1、组织项目开工会,组建项目团队; 2、与相关干系人沟通,明确项目目标与验收标准,基线化文档; 3、制定项目组织架构与运作机制; 4、制定SOW与项目计划。 方案阶段 1、获取业务需求,识别遗漏和不完整需求,定义需求类型; 2、通过原型、业务调研、差异分析、功能匹配等方法进行需求分析; 3、对需求已明确的新开发系统展开架构设计。目的是综合运用各种设计方法和手段,依据设计原则及质量安全设计确定产品应用架构、技术架构、数据架构、集成架构、物理部署架构,合理分配被开发系统的内外部需求到各子系统或模块; 4、在方案选择建议的基础上,采用选定的设计方法和技术,基于需求规格进行概要设计,其中必须包含数据模型设计,输出项目方案,必要时进行同行评审,经确认完成后基线并文档化。 实施阶段 1、在项目方案的基础上,实施工程师针对需求,采用选定的设计方法和技术及相关技术、安全等规范,进行详细设计; 2、实施工程师按照开发规范、安全规范编写代码及配套文档; 3、按定义的工作任务,对开发单元、软件包配置和构建实施单元测试,并完成缺陷记录和修复,达到质量要求后结束; 4、组织QC组,对代码及配套文档、实施指南、用户手册、运维手册进行同行评审; 5、根据项目计划制定项目测试计划,包括测试方案、时间计划、测试轮次等等,输出项目测试计划; 6、依据需求规格、项目方案,必要时参考产品架构设计,设计集成验证场景与用例。 验证阶段 1、组织用户及相关参与人员对应用进行验证,确认应用是否符合业务要求; 2、登记并验证缺陷修复情况; 3、输出验证测试报告。 部署阶段 1、协助客户购买云上计算、存储、网络等资源 2、在云上部署应用 试运行阶段 1、组织制定试运行计划,并于业务相关方沟通确认; 2、组织试运行; 3、编制试运行报告。 关闭阶段 1、试运行结束后创建项目满意度调查问卷,项目经理收集调查名单后组织完成满意度调查; 2、项目经理负责按照项目总结报告模板要求完成项目总结报告编制; 3、项目经理召集项目关闭会议,将项目数据、文档等归档,并释放资源,如果涉及资源采购,则此活动完成人员退场;对于涉及区域的项目,区域IT代表.负责项目经验共享,收集项目文档及总结报告并在区域内共享; 4、根据项目相关活动及交付情况,进行完成情况审视; 5、发布项目关闭信息。
  • 数据治理实施 本实施方案基于某客户数据治理项目实践输出,作为最佳实践案例,不代表数据治理实施完整方案。 数据治理方案设计 数据指标分析与设计 数据整合流程设计 数据治理实施服务流程 服务阶段 里程碑说明 启动阶段 1、组织项目开工会,组建项目团队; 2、与相关干系人沟通,明确项目目标与验收标准,基线化文档; 3、制定项目组织架构与运作机制; 4、制定SOW与项目计划。 方案阶段 1、获取数据治理需求,识别遗漏和不完整需求,定义需求类型; 2、通过数据指标、数据调研、数据分析、功能匹配等方法进行需求分析; 3、对需求已明确的数据指标要求展开方案设计。目的是综合运用各种数据治理方法和手段,依据设计原则及质量安全设计确定数治理架构、技术架构、数据流架构、云上部署架构等; 4、在方案选择建议的基础上,采用选定的设计方法和技术,基于需求规格进行概要设计,其中必须包含数仓分层设计、数据模型设计、数据采集设计、数据标准设计等,输出设计方案,必要时进行同行评审,经确认完成后基线并文档化。 准备阶段 1、按照方案设计,协助客户购买相关云上大数据产品。 2、协助可以配置大数据产品网络、安全等。 实施阶段 1、在项目方案的基础上,实施工程师针对需求,采用选定的设计方法和技术及相关技术、安全等规范,进行详细设计; 2、实施工程师按照数据开发规范、安全规范进行数据治理及配套文档; 3、按定义的工作任务,对治理作业实施单元测试,并完成缺陷记录和修复,达到质量要求后结束; 4、组织QC组,对治理作业及配套文档进行评审; 5、根据项目计划制定项目测试计划,包括测试方案、时间计划、测试轮次等等,输出项目测试计划; 6、依据需求规格、项目方案,必要时参考数据治理方案设计,设计集成验证场景与用例。 验证阶段 1、组织用户及相关参与人员对平台、数据进行验证,确认平台、数据是否符合业务要求; 2、登记并验证缺陷修复情况; 3、输出验证测试报告。 试运行阶段 1、组织制定试运行计划,并于业务相关方沟通确认; 2、组织试运行; 3、编制试运行报告。 关闭阶段 1、试运行结束后创建项目满意度调查问卷,项目经理收集调查名单后组织完成满意度调查; 2、项目经理负责按照项目总结报告模板要求完成项目总结报告编制; 3、项目经理召集项目关闭会议,将项目数据、文档等归档,并释放资源,如果涉及资源采购,则此活动完成人员退场;对于涉及区域的项目,区域IT代表.负责项目经验共享,收集项目文档及总结报告并在区域内共享; 4、根据项目相关活动及交付情况,进行完成情况审视; 5、发布项目关闭信息。
  • 数据治理诊断 企业现状调研 了解客户的核心业务流程、需求、挑战和目标。分析客户的核心业务流程和组织结构,理解客户的业务模式。识别业务中的关键挑战和机会,为业务优化提供方向。明确业务目标和战略方向,为业务增长提供支持。采用访谈交流、现场观察、市场分析和竞争对手研究等多种方法进行业务调研。 执行步骤如下: 调查问卷。要求企业按调查问卷要求填写信息。 高层访谈。对企业高层CEO、CIO、CTO面对面访谈,了解高层对数据的诉求。 业务部门访谈。对企业各个业务部门主管面对面访谈,了解业务部门对数据诉求。 调研数据汇总。将问卷信息、访谈信息汇总,提炼、总结,编写诊断报告。 调研总结会议。展示调研内容、过程、结果。 数据现状调研 数据调研,目的在于了解客户当前数据的质量、一致性、可信度和可用性。 了解客户整体数据资产及其关系:通过调研,可以深入探究客户不同业务系统间的数据资产,并揭示数据之间的相关性和相互影响。 识别并改进数据质量问题:调研过程能够识别客户的数据质量问题,包括数据准确性、完整性、时效性等,并针对这些问题提出具体的改进措施。 评估数据治理成熟度:通过对组织的数据治理能力进行深入评估,确保公司的数据管理能力符合不断复杂化和快速变化的市场需求,以及相关的法律法规要求。 明确数据治理的目标与策略:通过数据调研,帮助确定客户的数据治理目标和策略,涵盖数据采集、处理、存储、分析等各个方面的具体需求和目标。 调研的方式涵盖访谈交流、数据探查、实地考察、集体研讨等多种方法。 执行步骤如下: 业务系统识别:根据数据指标,识别需要调研哪些业务系统。 业务部门访谈:根据数据指标,调研业务系统数据情况,包括数据位置、数据库、数据质量情况等。 制定数据标准:根据调研情况,结合公司业务,制定数据质量标准。 数据库表整理 通过对客户业务系统数据库表整理,了解客户的数据资产,知道有哪些数据库、表、字段。分析数据库表的结构、属性、关系等,可以了解数据的完整性、一致性。初步评估数据的质量,识别缺失和错误的数据。确定最佳的数据库整合和数据迁移方案,以实现数据的同源共享。
  • 资源和成本规划 以某行业客户为例,客户的需求为构建全公司统一的数据平台,在数据平台中对数据进行治理,并支撑上层的数据应用。 根据客户现有数据量,以及考虑到增量的数据集成方式、数据入湖入仓的膨胀系数、以及客户对平台性能的要求,设计了以下的资源与成本清单。实际收费应以账单为准: 资源与成本清单 表1 云服务清单 云资源 规格 数量 数据治理中心(DataArts Studio) 企业版,cdm.medium,4核 8 GB,作业并发数8,作业节点调度次数5,000次/天,技术资产数量5,000,数据模型数量100 1 云数据迁移(CDM: Cloud Data Migration) cdm.xlarge,16核 32GB,并发作业数32 1 数据复制服务(DRS: Data Replication Service) / 1 数据湖探索(DLI: Data Lake Insight) 通用队列,512CUs 1 数据仓库服务(DWS: Data Warehouse Service) X86 | dwsx3.32U128G.32DPU | 32 vCPUs | 128 GB 1 应用与数据集成平台 ROMAConnect X86 2RCU可支持API转发 2000 TPS,或可支持托管API数量 200 个 1 表2 专业服务清单 类别 报价项 量纲 数据治理咨询服务 数据治理诊断 30人天 数据治理实施服务 数据集成 20人天 数据架构 15人天 数据开发 30人天 数据质量 15人天 数据资产 10人天 数据服务 10人天 数据安全 5人天 定制开发服务 报表设计开发(定制) 50人天 PC端应用设计开发 15人天 合计: 200人天
  • 计费周期 华为云U CS 服务按小时计费,每一个小时整点结算一次费用(以UTC+8时间为准),结算完毕后进入新的计费周期。计费的起点以所创建集群成功接入UCS的时间为准,终点以注销所接入集群的时间为准。 例如,您在8:45:30将集群接入了UCS,计费模式选择按需计费,然后在8:55:30将接入UCS的集群删除,则会在8:45:30 ~ 8:55:30间产生费用,计费周期为8:00:00 ~ 9:00:00,该计费周期内的计费时长为600秒。
  • 适用计费项 以下计费项支持按需计费。 表1 适用计费项 计费项 说明 UCS集群管理服务 UCS集群管理服务费用由集群类型(包括华为云集群、本地集群、附着集群、多云集群和伙伴云集群)、集群vCPU数量和购买时长决定。如需了解如何查看所接入集群的vCPU数量,请参见查看集群的vCPU数量。 UCS服务管理费用不包括任何资源(例如计算节点、网络服务等)相关的费用。 假设您计划在UCS服务中添加一个华为云集群。在注册集群的页面底部,您将看到按需计费模式下的所需费用,如图 配置费用示例所示。 图1 配置费用示例 按需计费模式按照华为云UCS服务实际使用量与使用时长计费,具体计费周期为按小时计费。
  • 包年/包月 某用户通过UCS服务管理华为云集群和本地集群,其使用时间轴见图1。 图1 使用时间轴 具体操作如下: 该用户于2023/07/16 09:00:00购买华为云UCS套餐包且选择立即生效,购买规格为:华为云集群套餐包80 vCPU*1个月,本地集群套餐包40 vCPU*1个月 该用户于2023/07/20 09:00:00注销所有集群 套餐包于2023/08/16 23:59:59到期 则在该时间段,用户产生的费用将以包年/包月模式进行预先扣费,且该预付费用不随注销集群等操作而变化。具体费用的计算方法如下表所示。 计费时间段 计费时长(月) 计入包月计费的集群接入规格(vCPU) 规格单价(元/10vCPU/月) 费用(元) 2023/07/16 09:00:00至2023/08/16 23:59:59 1 华为云集群vCPU数量: 80 本地集群vCPU数量: 40 华为云集群单价 : 300 本地集群单价: 900 华为云集群管理服务费用: 8 * 1 * 300 = 2400 本地集群管理服务费用: 4 * 1 * 900 = 3600 由此可见,UCS总共产生的费用为:2400 + 3600 = 6000元。 上述价格仅为示例,实际计算请以华为云UCS价格详情中的价格为准。 父主题: 计费样例
  • 在续费管理页面开通自动续费 在费用中心开通自动续费的方法适合所有资源,包括集群、节点、云硬盘、弹性公网IP等。 登录UCS控制台。 单击“控制台”页面上方“费用”,在下拉菜单中选择“续费管理”。 进入“续费管理”页面。 自定义查询条件。 可在“自动续费项”页签查询已经开通自动续费的服务。 可对“手动续费项”、“到期转按需项”、“到期不续费项”页签的服务开通自动续费。 图1 续费管理 为包年/包月云服务开通自动续费。 单个资源开通自动续费:选择需要开通自动续费的资源,单击操作列“更多”,并选择“开通自动续费”。 图2 单个资源开通自动续费 批量资源开通自动续费:选择需要开通自动续费的资源,单击列表左上角的“开通自动续费”。 图3 多个资源开通自动续费 选择续费时长,并根据需要设置自动续费次数,单击“开通”。 在“续费管理”页面开通的自动续费,自动续费周期以实际选择的续费时长以及自动续费次数为准。例如:您选择了续费时长3个月,不限次数,即在每次到期前自动续费3个月。 图4 开通自动续费
  • 包年/包月服务 对于包年/包月计费模式的云服务,用户在购买时会一次性付费,服务将在到期后自动停止使用。 如果在计费周期内不再使用包年/包月资源,您可以执行退订操作,系统将根据资源是否属于五天无理由退订、是否使用代金券和折扣券等条件返还一定金额到您的帐户,详细的退订规则请参见云服务退订规则概览。UCS服务不属于五天无理由退订服务。 如果您已开启“自动续费”功能,为避免继续产生费用,请在自动续费扣款日(默认为到期前7日)之前关闭自动续费。
  • 计费模式概述 华为云UCS提供包年/包月和按需计费两种计费模式,以满足不同场景下的用户需求。 包年/包月:一种预付费模式,即先付费再使用,按照订单的购买周期进行结算。购买周期越长,享受的折扣越大。一般适用于接入集群规模长期稳定的成熟业务。 按需计费:一种后付费模式,即先使用再付费,按照华为云UCS实际使用时长计费,按小时结算。按需计费模式允许您根据实际业务需求灵活地调整服务使用,无需提前购买付费,灵活性高。一般适用于接入集群规模较小的业务场景。 表1列出了两种计费模式的区别。 表1 计费模式 计费模式 包年/包月 按需计费 付费方式 预付费 后付费 计费周期 按订单的购买周期计费。 按照华为云UCS服务实际使用时长计费。具体计费周期为按小时计费。 适用计费项 UCS集群管理服务 UCS集群管理服务 停止计费 订单购买周期到期后计费停止,自动转为按需计费模式。注销集群等操作对包年/包月计费无影响。 按使用量计费。接入集群后计费开始,注销集群后计费停止。 变更计费模式 不支持变更为按需计费模式。但若包年/包月计费模式超额或到期,按需计费模式自动生效。 购买套餐包后即变更为包年/包月计费模式。 变更规格 已购买的套餐包不支持变更规格。若接入UCS的集群规模超出购买额,则超出部分采用按需计费模式收费。 按需计费模式按照接入UCS的集群规模计费。 适用场景 适用于可预估服务使用周期的场景,价格比按需计费模式更优惠。对于长期使用者,推荐该方式。 适用于服务需求波动的场景,可以随时开通,随时删除。 父主题: 计费模式
  • 计费周期 包年/包月UCS服务的计费周期是根据您购买的时长来确定的(以UTC+8时间为准)。在生效时间选择“支付完成后立即生效”情况下,一个计费周期的起点是您支付套餐包的时间(精确到秒),终点则是到期日的23:59:59。 例如,如果您在2023/03/08 15:50:04购买了华为云UCS的套餐月包,那么其计费周期为:2023/03/08 15:50:04 ~ 2023/04/08 23:59:59。
  • 适用场景 包年/包月计费模式需要用户预先支付选定规格下一定时长的费用,适用于长期、稳定的业务需求。以下是一些适用于包年/包月计费模式的业务场景: 稳定业务需求:对于长期运行且资源需求相对稳定的业务,如企业官网、在线商城、博客等,包年/包月计费模式能提供较高的成本效益。 长期项目:对于周期较长的项目,如科研项目、大型活动策划等,包年/包月计费模式可以确保在整个项目周期内资源的稳定使用。 业务高峰预测:如果能预测到业务高峰期,如电商促销季、节假日等,可提前购买包年/包月资源以应对高峰期的需求,避免资源紧张。 数据安全要求高:对于对数据安全性要求较高的业务,包年/包月计费模式可确保资源的持续使用,降低因资源欠费而导致的数据安全风险。
  • 适用计费项 以下计费项支持包年/包月。 表1 适用计费项 计费项 说明 UCS集群管理服务 UCS集群管理服务费由集群类型(包括华为云集群、本地集群、附着集群、多云集群和伙伴云集群)、集群vCPU数量和购买时长决定。如需了解如何查看所接入集群的vCPU数量,请参见查看集群的vCPU数量。 UCS服务管理费用不包括任何资源(例如计算节点、网络服务等)相关的费用。 假设您计划购买一个UCS服务的套餐包,则需要选择或设置所需的套餐包规格,如图1所示。其中,需要您配置的规格如表2所示。 图1 配置费用示例 表2 套餐包规格配置 规格 取值 解释 集群类型 华为云集群、伙伴云集群、本地集群、附着集群 涉及包年/包月计费模式的集群类型为华为云集群、伙伴云集群、本地集群和附着集群,多云集群不涉及包年/包月计费模式。 套餐包类型 资源套餐月包、资源套餐年包 购买的套餐包类型。 示例: 若选择套餐包类型为月包,则单位购买时长为一个自然月;若选择套餐包类型为年包,则单位购买时长为一个自然年。 购买数量 大于1的数。 购买的集群规模,以10vCPU为步长。 示例: 若设置购买数量=2.5,则对应购买的集群规模为10vCPU*2.5=25vCPU。 购买时长 正整数。 购买的总时长。 示例: 若选择购买时长=3: 当选择套餐包类型为月包时,套餐包总购买时长为3个月。 当选择套餐包类型为年包时,套餐包总购买时长为3年。 生效时间 支付完成后立即生效、指定生效时间 支付完成后立即生效:套餐包的生效时间为支付时间。 指定生效时间:套餐包的生效时间为指定时间。若支付时间晚于指定生效时间,套餐包将在支付后立即生效。
  • 计费项 使用华为云UCS服务时,会产生UCS服务管理费用,具体内容如表1所示。 表1 华为云UCS计费项 计费项 说明 适用的计费模式 计费公式 UCS集群管理服务 UCS集群管理服务费用由集群类型(包括华为云集群、本地集群、附着集群、多云集群和伙伴云集群)、集群vCPU数量和购买时长决定。如需了解如何查看所接入集群的vCPU数量,请参见查看集群的vCPU数量。 UCS服务管理费用不包括任何资源(例如计算节点、网络服务等)相关的费用。 包年/包月、按需计费 集群规模 *规格单价 *购买时长 具体 定价 请参见华为云UCS价格详情。 华为云UCS是一个分布式集群的统一管理平台,其产生的费用仅为集群管理服务费用。虽然您可通过华为云UCS控制台注册集群,但是所接入集群涉及的其他云服务、云资源产生的计费项并不归入华为云UCS进行计费。
  • 查看集群的vCPU数量 如需查看所接入集群的vCPU数量(计入UCS服务管理费用的部分),可运行以下命令: kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"} {.status.conditions[?(@.type=="Ready")].status}{"\t"} {.status.capacity.cpu}{"\n"}' | grep True 集群状态的变化会影响UCS对其vCPU数量的统计,从而影响UCS服务的计费。若集群需要使用UCS服务,请保证其在正常运行状态;若集群不再需要使用,请及时注销,避免持续扣款。不同集群状态是否造成UCS计费的情况见表2。 表2 集群状态与计费 集群状态 是否计费 运行中 是 不可用 是 注意: 当集群接入UCS之后,UCS会获取用户集群vCPU的使用量并记录。如果之后集群状态变为“不可用”,导致UCS无法获取到最新的集群vCPU使用量信息,UCS会根据最后一次记录到的vCPU使用量进行计费。 等待接入 否 注册超时 否 注销中 否 注销失败 否
  • 按需计费 某用户通过UCS服务管理华为云集群和本地集群,其使用时间轴见图1。 图1 使用时间轴 具体操作如下: 该用户于2023/06/15 08:00:00成功接入集群,接入集群规模为:华为云集群40 vCPU,本地集群10 vCPU 该用户于2023/06/15 08:30:00因业务需要将集群扩容,扩容后接入集群规模为:华为云集群60 vCPU,本地集群30 vCPU 该用户于2023/06/15 09:00:00注销所有集群 则在该时间段,用户产生的费用将以按需计费模式进行扣费,具体费用的计算方法如下表所示。 计费时间段 计费时长(小时) 计入按需计费的集群接入规格(vCPU) 规格单价(元/vCPU/小时) 费用(元) 2023/06/15 08:00:00至2023/06/15 09:00:00 1 华为云集群vCPU数量: 40 * 30 / 60 + 60 * 30 / 60 = 50 本地集群vCPU数量: 10 * 30 / 60 + 30 * 30 / 60 = 20 华为云集群单价 : 0.0556 本地集群单价: 0.1668 华为云集群管理服务费用: 50 * 1* 0.0556 = 2.78 本地集群管理服务费用: 20 * 1 * 0.1668 = 3.336 由此可见,UCS总共产生的费用为:2.78 + 3.336 = 6.116元。 上述价格仅为示例,实际计算请以华为云UCS价格详情中的价格为准。 父主题: 计费样例
  • 计费构成分析 可以将UCS的使用阶段按照计费模式进行统计,各个时间段涉及的计费模式如图2所示。 若您仅需要了解按需计费模式下的计费情况,请参考按需计费①的计费统计方式。 若您仅需要了解虽购买了套餐包,但在使用过程中超出额度的计费情况,请参考包月计费①与按需计费②的计费统计方式。 若您仅需要了解在套餐包到期后并未续费,自动转为按需的计费情况,请参考按需计费③的计费统计方式。 若您仅需要了解在套餐包期内注销集群后的计费情况,请参考包月计费②的计费统计方式。 图2 计费构成轴 表1 包月计费统计 计费时间段 计费时长(月) 计入包月计费的集群接入规格(vCPU) 规格单价(元/10vCPU/月) 费用(元) 包月计费① 2023/06/15 09:00:00至2023/07/15 23:59:59 1 华为云集群vCPU数量: 60 本地集群vCPU数量: 30 华为云集群单价 : 300 本地集群单价: 900 华为云集群管理服务费用: 6*1*300 = 1800 本地集群管理服务费用: 3*1*900 = 2700 包月计费② 2023/07/16 09:00:00至2023/08/16 23:59:59 1 华为云集群vCPU数量: 80 本地集群vCPU数量: 40 华为云集群管理服务费用: 8*1*300 = 2400 本地集群管理服务费用: 4*1*900 = 3600 表2 按需计费统计 计费时间段 计费时长(小时) 计入按需计费的集群接入规格(vCPU) 规格单价(元/vCPU/小时) 费用(元) 按需计费① 2023/06/15 08:00:00至2023/06/15 09:00:00 1 华为云集群vCPU数量: 40 * 30 / 60 + 60 * 30 / 60 = 50 本地集群vCPU数量: 10 * 30 / 60 + 30 * 30 / 60 = 20 华为云集群单价 : 0.0556 本地集群单价: 0.1668 华为云集群管理服务费用: 50 * 1 * 0.0556 = 2.78 本地集群管理服务费用: 20 * 1 * 0.1668 = 3.336 按需计费② 2023/07/14 08:00:00至2023/07/15 23:59:59 40 华为云集群vCPU数量: 80 - 60 = 20 本地集群vCPU数量: 40 - 30 = 10 华为云集群管理服务费用: 20 * 40 * 0.0556 = 44.48 本地集群管理服务费用: 10 * 40 * 0.1668 = 66.72 按需计费③ 2023/07/15 23:59:59至2023/07/16 09:00:00 9 华为云集群vCPU数量: 80 本地集群vCPU数量: 40 华为云集群管理服务费用: 80 * 9 * 0.0556 = 40.032 本地集群管理服务费用: 40 * 9 * 0.1668 = 60.048 由此可见,在2023年6月15日至同年8月16日,UCS总共产生的费用为:2.78 + 3.336 + 44.48 + 66.72 + 40.032 + 60.048 + 1800 + 2700 + 2400 + 3600 = 10717.396元。 上述价格仅为示例,实际计算请以华为云UCS价格详情中的价格为准。
共100000条