华为云用户手册

  • SDK接口 表1 ContractStub合约信息&状态数据库访问接口 接口 说明 String funcName() 功能:获取智能合约请求中指定的智能合约函数名称 入参:无 返回值:智能合约函数名称 byte[][] parameters() 功能: 获取请求参数 入参:无 返回值:用户执行智能合约逻辑时传入的多个参数,每个参数以[]byte表示 String chainId() 功能:获取智能合约所在链ID 入参:无 返回值:链ID String contractName() 功能:获取智能合约名称 入参:无 返回值:智能合约名称 byte[] getKv(String key) throws ContractException 功能:获取状态数据库中某个key对应的value; 入参:某个键值对的key信息,只支持string类型,不可为空 返回值:value值,目前只支持[]byte类型;当key不存在时,value为null 抛出异常:当网络出错,消息超时等,抛出异常 void putKv(String key, byte[] value) throws ContractException 功能:写状态数据库操作,此接口只是将key、value形成写集,打包到交易中,只有当交易排序、出块、并校验通过之后,才会将key/value写入到状态数据库中 入参:要写入的键值对,要求key != "",并且value != null 抛出异常:当网络出错,消息超时等,抛出异常 void delKv(String key) throws ContractException 功能:删除状态数据库中的key及其对应的value,此接口只是将待删除的key放入写集,打包到交易中,只有当交易排序、出块、并校验通过之后,才会将key删除 入参:要删除的key,要求key != "" 抛出异常:当网络出错,消息超时等,抛出异常 Iterator getIterator(String startKey, String endKey) throws ContractException 功能:查询状态数据库中,按字典序,以startKey开头,以endKey结尾的所有状态数据,结果以迭代器的形式呈现;注意,查询范围是左闭右开的,[startKey, endKey) 例如:startKey="11",endKey="14",所有key都是整数的话,则查询的结果中,key值包括:"11","12","13",不包括"14" 入参:startKey是待查询状态数据的按字典序的起始key,startKey != "",endKey是待查询的状态数据的按字典序的结束key,endKey!= ""; 返回值:Iterator是查询结果的迭代器,可以通过此迭代器,按顺序读取查询结果 抛出异常:当网络出错,消息超时等,抛出异常 HistoryIterator getKeyHistoryIterator(String key) throws ContractException 功能:查询一个key对应的所有历史的value 例如:一个key的value曾经为1,2,3,当前value为4,则返回的迭代器结果中按顺序包含了1,2,3,4 入参:key是待查询历史value值的key信息,key != "" 返回值:HistoryIterator是按顺序包含了历史value结果的迭代器结构体变量 抛出异常:当网络出错,消息超时等,抛出异常 void saveComIndex(String indexName, String[] attributes, String objectKey) throws ContractException 功能:为objectKey保存索引信息,indexName_attributes_objectKey构成索引信息,注意,此处只是形成索引信息的写集,只有当含有此写集的交易经过排序、出块,并校验通过后,才会写入状态数据库 例如:存储key/value信息,key="zhangsan",value={height=175, sex="male"},如果以sex="male"作为查询条件,查询所有的key/value, 则需要反序列化所有的value,性能损耗较大,因此,为当前key/value建立一个sex相关的索引:indexName="sex",attributes=[]string{"male"},objectKey="zhangsan, 入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息,objectKey 待索引的key值,objectKey != "" 抛出异常:当网络出错,消息超时等,抛出异常 Iterator getKvByComIndex(String indexName, String[] attributes) throws ContractException 功能:通过索引信息,查找满足某种查询条件的key/value,key/value以迭代器的形式输出 入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息 返回值:满足索引条件的key/value的迭代器变量 抛出异常:当网络出错,消息超时等,抛出异常 void delComIndexOneRow(String indexName, String[] attributes, String objectKey) throws ContractException 功能:删除objectKey的某个索引,indexName_attributes_objectKey构成索引信息,注意,此处只是形成索引信息的写集,只有当含有此写集的交易经过排序、出块,并校验通过后,才会写入状态数据库 入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息,objectKey 待索引的key值,objectKey != "" 抛出异常:当网络出错,消息超时等,抛出异常 表2 Iterator迭代器接口 接口 说明 boolean next() throws ContractException 功能:检查迭代器中是否还有下一个key/value 入参:无 返回值:bool值,true代表还有下一个值 抛出异常:当网络出错,消息超时等,抛出异常 String key() throws ContractException 功能:从迭代器中获取key 入参:无 返回值:key值 抛出异常:当网络出错,消息超时等,抛出异常 byte[] value() throws ContractException 功能:从迭代器中获取value 入参:无 返回值:value值类型为字节数组 抛出异常:当网络出错,消息超时等,抛出异常 void close() 功能:使用完迭代器之后,需要关闭迭代器 入参:无 抛出异常:当网络出错,消息超时等,抛出异常 表3 HistoryIterator查询某个key历史value信息的迭代器接口 接口 说明 long blockNum(); 功能:获取当前迭代位置(某笔交易)的 BlockNum 入参:无 int txNum(); 功能:获取当前迭代位置(某笔交易)的 TxNum 入参:无 byte[] txHash(); 功能:获取当前迭代位置((某笔交易))的hash 入参:无 boolean isDeleted(); 功能:被查询的key,当前是否已经在状态数据库中被删除 入参:无 long timestamp(); 功能:返回当前迭代位置(某笔交易)的时间戳 入参:无 父主题: JAVA合约开发
  • 点位缩放 对数采数据做规整,减少应用对数据处理和适配的工作量,如从PLC采集上来的原始数据,需要经过计算后才能表达真实含义。具体操作步骤请参见点位缩放。 概述 点位缩放,提供通过线性表达式将采集值转换为真实值的功能。支持公式Y = ratio * X + base,使用线性表达式,通过配置ratio、base、accuracy来对采集值进行处理。 公式: Y=ratio×X+base ratio: 缩放的倍率,浮点型,取值范围[-10000,+10000],最大支持小数点后7位 base: 基准值,浮点型,取值范围[-10000,+10000],最大支持小数点后7位 accuracy: 缩放后结果的精度,精确到小数点后几位,直接截取,不四舍五入。整数类型,取值范围[-1, 8]。-1或界面不输入,表示不对小数位进行处理 场景示例 场景1: 机器的基准温度是100℃,但采集器上报的值只为1、2、3、4、5,即可以使用表达式进行计算,得到需要的值。 设ratio = 1, base = 100, Y = X + 100 表1 温度转换表 X Y 1 101 2 102 3 103 场景2:精度截断场景 设ratio = 0.11, base = 100, accuracy = 2 表2 X Y 精度处理后 10 101.1 101.1 100 111 111 100.11 111.0121 111.01 场景3: 驱动采集点位值的单位为W(瓦),平台接收属性的单位为KW(千瓦),可以使用点位缩放进行单位换算,公式为:Y=0.001X 设ratio = 0.001, base = 0 表3 功率换算表 X(W) Y(KW) 100 0.1 1000 1 20000 20
  • 配置流程 图1 数据采集实施步骤 创建边缘网关(专业版),请参考 边缘节点。 创建产品,选择Other协议(自定义协议要用Other)。 设备建模,产品中添加自定义service和属性。 添加子设备,请参考设备接入边缘节点。 添加驱动应用,发布版本,请参考添加驱动应用。 边缘节点部署相应的驱动应用,请参考部署应用。 创建数采连接,请参见OT数采配置。 实时值跟踪,点采集值按钮,主动查询点位值,请参见查看采集结果。 父主题: 数采配置
  • 主节点异常重装 当主节点因为一些异常原因不能够继续使用时,需要更换服务器来继续提供主节点的功能支持,需要进行主节点的重新安装动作。 主节点主机状态已经离线且不会继续进行工作,如下图所示。 手动进行原有异常主节点的卸载动作,以防后续恢复正常后影响当前主备的正常工作。 图24 重装主节点 在主备配置页签,单击主节点“重新安装”字样,获取安装命令。 请确定原有主节点主机状态已经离线且不会继续进行工作。 图25 获取主节点安装命令 登录新的主节点机器,执行主节点的重装命令。 图26 执行安装命令 如下表示主节点安装成功。 图27 安装成功 查看console界面确认主节点已在线。 图28 查看主备状态 至此,主节点重装完成。
  • 安装备节点 选择您的边缘节点,单击“节点名称”进入节点详情页。 在左侧导航栏选择“主备配置”页面获取“获取备节点安装命令”。 主节点和备节点设置绑定的网卡之间网络一定需要能够正常访问,否则会出现主备异常。 登录边缘节点主备用机器,检查主备机时间偏差,保持在30S以内,否则可能会出现备节点安装失败。 图8 安装备节点 登录边缘节点备用机器,执行安装命令。 图9 执行安装命令 如下表示备节点安装成功。 图10 安装成功 备节点默认只运行edge_agent以及edge_keepakive模块,其余模块为created状态。 图11 运行状态
  • 备节点异常重装 当备节点因为一些异常原因不能够继续使用时,需要更换服务器来继续提供备节点的功能支持,需要进行备节点的重新安装动作。 前提条件: 备节点主机状态已经离线且不会继续进行工作,如下图所示。 手动进行原有异常备节点的卸载动作,以防后续恢复正常后影响当前主备的正常工作。 图19 重装备节点 在主备配置页签,单击备节点“重新安装”字样,获取安装命令。 请确定原有备节点主机状态已经离线且不会继续进行工作。 图20 获取备节点安装命令 登录新的备节点机器,执行备节点的重装命令。 图21 执行安装命令 如下表示备节点安装成功。 图22 安装成功 查看console界面确认备节点已在线。 图23 查看主备状态 至此备节点重装完成。
  • 简单测试 模拟当前工作节点发生故障,不再往备节点发送心跳包。 停止主节点sys_edge_keepalive来模拟宕机情况 图15 模拟宕机 停止后查看应用状态,sys_edge_hub已进入created状态。查看浮动ip情况,发现原主节点vip已移除。 图16 查看IP信息 查询看备节点浮动ip和模块运行状态。 图17 查看运行状态 浮动ip已经绑定到备节点eth0网卡上,且业务模块都在原备节点上正常运行。 在console查看主备信息,工作节点已经切换到主机名为ecs-8bc3-0003的备用机器上。 图18 查看主备状态 至此,简单主备切换测试已经完成。
  • 使用约束 主备配置时,所绑定的硬件网关上的网卡,需要在同一个网络内,保证心跳正常。 主备网关之间需要设置正确的iptables,防止心跳网络异常。 建议排查防火墙设置,如果防火墙没有关闭需要增加vrrp放通策略。 专业版kubeEdge部署类型的节点不支持主备配置。 如果需要删除主备配置,建议先在后安装的备主机上进行卸载操作(执行卸载命令 sh /opt/IoTEdge-Installer/uninstall.sh),然后删除主备配置,保留第一个安装的主机。如果后安装的备主机如果没有进行卸载操作,删除主备配置默认会将应用停止掉,影响该节点的运行。 设置错误的网卡名称会导致模块edge-keepalive工作在故障状态,导致主备不能够正常工作。 当前edge-keepalive升级会导致主备切换,所以不建议对edge-keepalive进行升级操作。 主备情况下,主节点主机状态必须离线才支持重装,节点不一定离线。 备节点离线才支持重装。备节点重装时,主节点必须在线。 主备情况下,主节点重装不支持修改设备密码以及设置验证码,只能后台随机生成。 主备切换时长(切换成功并且业务恢复)与网关上安装的应用数量、应用启动时间、点位数有关。 在主备切换期间,没有办法处理数据,数据是丢失的。
  • 添加主备配置 选择您的边缘节点,单击“节点名称”进入节点详情页。 在左侧导航栏选择“主备配置”单击“主备配置”。 图4 主备配置 信息填写后,单击“确认”。 图5 网络配置 表1 主备配置 参数名称 描述 主网卡名称 表示主节点上虚拟IP所绑定使用的网卡名字,如eth0、eth1等,注意名称不要写错,写错会导致vip绑定失败。 备网卡名称 表示备节点上虚拟IP所绑定使用的网卡名字,如eth0、eth1等。 浮动虚拟IP 表示对外提供的一个虚拟IP(IPv4),供设备连接使用,具体虚拟IP按照自身业务规划设定。 IPv6地址 表示对外提供的一个IPv6地址,供设备连接使用,具体按照自身业务规划设定。 查看ip信息。使用ip a查看主节点ip信息,如果当前设置均没有错误的话,在主节点上机器上已经可以查到已绑定的虚拟IP,例如当前设置的vip为172.30.0.201,主节点绑定的网卡为eth0。 图6 查看IP信息 查看网卡名称可以使用ifconfig查看,如下: 图7 查看网卡名称
  • 响应参数 状态码:200 表4 响应Body参数 参数 参数类型 描述 face_set_id String 人脸库ID。 调用失败时无此字段。 face_set_name String 人脸库名称。 调用失败时无此字段。 faces Array of FaceSetFace objects 人脸库当中的人脸结构,详见FaceSetFace。 调用失败时无此字段。 表5 FaceSetFace 参数 参数类型 描述 bounding_box BoundingBox object 人脸在图像中的位置。 BoundingBox结构见BoundingBox。 external_fields Object 用户添加的额外字段。 external_image_id String 人脸所在的外部图片ID。 face_id String 人脸ID,由系统内部生成的唯一ID。 表6 BoundingBox 参数 参数类型 描述 width Integer 矩形框宽度。 top_left_y Integer 矩形框左上角纵坐标。 top_left_x Integer 矩形框左上角横坐标。 height Integer 矩形框高度。 状态码: 400 表7 响应Body参数 参数 参数类型 描述 error_code String 调用失败时的错误码,具体请参考错误码。 调用成功时无此字段。 error_msg String 调用失败时的错误信息。 调用成功时无此字段。
  • 功能介绍 添加人脸到人脸库中。将单张图片中的人脸添加至人脸库中,支持添加最大人脸或所有人脸。 前提条件: 请确保您已开通人脸搜索服务。 约束限制: 只支持识别JPG、PNG、JPEG、BMP格式的图片。 application/json请求的body中,请使用标准Json格式。 Base64编码中请勿使用回车换行。 系统不保存用户图片。 图片大小小于8MB,由于过大图片会导致时延较长,并且图片信息量不大,建议小于1MB。 图片分辨率小于4096*2160,图片中人脸像素大于80*80,建议120*120以上。 为保证识别效果,人脸图片建议要求如下: 光照大于200lux、无反光强光阴影现象。 人脸无遮挡、整体清晰无拖尾抖动等运动模糊。 侧脸不超过30°、俯仰角小于15°、偏转角小于15°、图片中人脸保持竖置正脸。 其他的约束限制信息请参见约束与限制章节。 建议: 由于过大图片对识别算法精度无明显提升,同时会导致时延较长,建议传入图片小于1MB,一般500KB左右足够。 OBS上存储的图片也建议小于1MB。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 用于获取操作API的权限。获取方法请参见认证鉴权。 Content-Type 是 String 发送的实体的MIME类型,参数值为“application/json”。 Enterprise-Project-Id 否 String 企业项目ID。FRS支持通过企业项目管理(EPS)对不同用户组和用户的资源使用,进行分账,当前仅支持按需计费模式。 获取方法:进入“企业项目管理”页面,单击企业项目名称,在企业项目详情页获取Enterprise-Project-Id(企业项目ID)。 说明: 创建企业项目后,在传参时,有以下三类场景。 携带正确的ID,正常使用FRS服务,账单的企业项目会被分类到企业ID对应的企业项目中。 携带格式正确但不存在的ID,正常使用FRS服务,账单的企业项目会显示对应不存在的企业项目ID。 不携带ID或格式错误ID(包含特殊字符等),正常使用FRS服务,账单的企业项目会被分类到"default"中。 表3 请求Body参数 参数名 参数类型 是否必选 说明 image_url String 与image_file、image_base64三选一 图片的URL路径,目前仅支持华为云上OBS的URL,使用时只需保证FRS有权限读取该OBS桶的数据。开通读取权限的操作请参见服务授权。 image_file File 与image_url、image_base64三选一 本地图片文件,图片不能超过8MB,建议小于1MB。上传文件时,请求格式为multipart。 image_base64 String 与image_file、image_url三选一 图像数据,Base64编码,要求: Base64编码后大小不超过8MB,建议小于1MB。 图片为JPG/JPEG/BMP/PNG格式。 external_image_id String 否 用户指定的图片外部ID,与当前图像绑定。用户没提供,系统会生成一个。 该ID长度范围为1~36位,可以包含字母、数字、中划线或者下划线,不包含其他的特殊字符。 external_fields Object 否 根据用户自定义数据类型,填入相应的数值。 需在创建人脸库时定义external_fields字段,才可以在添加人脸时使用该字段,参考自定义字段。 single boolean 否 是否将图片中的最大人脸添加至人脸库。可选值包括: true:传入的单张图片中如果包含多张人脸,则只将最大人脸添加到人脸库中。 false:默认为false。传入的单张图片中如果包含多张人脸,则将所有人脸添加至人脸库中。
  • 参数说明 表1 结果格式说明表 名称 类型 说明 project_id String 项目ID,获取方法请参见获取项目ID/账号名/AK/SK。 image_url String 图片的URL路径,目前仅支持华为云上OBS的URL,且 人脸识别服务 有权限读取该OBS桶的数据。开通读取权限的操作请参见服务授权。 image_file File 本地图片文件,图片不能超过8MB,建议小于1MB。上传文件时,请求格式为multipart。 image_base64 String 图像数据,Base64编码,要求: Base64编码后大小不超过8MB,建议。 图片为JPG/JPEG/BMP/PNG格式。 similarity Double 人脸相似度,1表示最大,0表示最小,值越大表示越相似。一般情况下超过0.93即可认为是同一个人。 face_set_name String 人脸库名称,1位到64位之间,可以包含字母、数字、中划线或者下划线,不能包含其他的特殊字符。 face_set_capacity Integer 人脸库最大的容量,填写1万整数倍的数字,例如30000。默认为100000,最大值为100000,可通过创建新的人脸库进行扩容,每个用户可使用10个人脸库,每个人脸库容量为10万个人脸特征。如需扩容单个人脸库规模,请联系华为云客服确认扩容规模与价格。 face_id String 导入人脸时,系统返回的人脸编号,为8个随机生成的大小写字母组成。 external_image_id String 用户指定的图片外部ID,与当前图像绑定。用户没提供,系统会生成一个。该ID长度范围为1~36位,可以包含字母、数字、中划线或者下划线,不包含其他的特殊字符。 external_fields Json 根据用户自定义数据类型,填入相应的数值。创建人脸库时,定义该字段。具体参见自定义字段。 top_n Integer 返回查询到最相似的N张人脸,N默认为10。如果返回前5个,则该变量N的值为5。 取值范围1~1000。 threshold Double 人脸相似度阈值,低于这个阈值则不返回,取值范围[0,1],一般情况下建议取值0.93,默认为0。 offset Integer 从第几条数据读起,默认为0。 limit Integer 读取多少条,默认为5。 video_url String 视频的URL路径,目前仅支持华为云上OBS的URL,且 人脸识别 服务有权限读取该OBS桶的数据。开通读取权限的操作请参见服务授权。视频要求: 视频Base64编码后大小不超过8MB。 限制视频时长1~15秒。 建议帧率10fps~30fps。 封装格式:mp4、avi、flv、webm、asf、mov。 视频编码格式: h261、h263、h264、hevc、vc1、vp8、vp9、wmv3。 video_file File 本地视频文件。上传文件时,请求格式为multipart。视频要求: 视频文件大小不超过8MB,建议客户端压缩到200KB~2MB。 限制视频时长1~15秒。 建议帧率10fps~30fps。 封装格式:mp4、avi、flv、webm、asf、mov。 视频编码格式: h261、h263、h264、hevc、vc1、vp8、vp9、wmv3。 video_base64 String 视频数据,Base64编码,要求: Base64编码后大小不超过8MB,建议客户端压缩到200KB~2MB。 限制视频时长1~15秒。 建议帧率10fps~30fps。 封装格式:mp4、avi、flv、webm、asf、mov。 视频编码格式: h261、h263、h264、hevc、vc1、vp8、vp9、wmv3。 actions String 动作代码顺序列表,英文逗号(,)分隔。建议单动作,目前支持的动作有: 1:左摇头 2:右摇头 3:点头 4:嘴部动作 action_time String 该参数为动作时间数组拼接的字符串,数组的长度和actions的数量一致,每一项代表了对应次序动作的起始时间和结束时间,单位为距视频开始的毫秒数。 error_code String 调用失败时的错误码。 error_msg String 调用失败时的错误信息。 attributes String 是否返回人脸属性,希望获取的属性列表,多个属性用逗号隔开。目前支持的属性有: 0:人脸姿态 2:年龄 3:人脸关键点 4:装束(帽子、眼镜) 5:笑脸
  • 响应参数 状态码:200 表5 响应Body参数 参数 参数类型 描述 face_set_info FaceSetInfo object 人脸库信息,详见FaceSetInfo。 调用失败时无此字段。 表6 FaceSetInfo 参数 参数类型 描述 face_number Integer 人脸库中已有的人脸特征的数量。 external_fields Object 用户的自定义字段。 face_set_id String 人脸库ID,随机生成的包含八个字符的字符串。 face_set_name String 人脸库名称。 create_date String 创建时间。 face_set_capacity Integer 人脸库最大的容量。创建人脸库时,请求参数如果不设置face_set_capacity参数,默认每个人脸库最大容量为10万个人脸特征。 状态码: 400 表7 响应Body参数 参数 参数类型 描述 error_code String 调用失败时的错误码,具体请参考错误码。 调用成功时无此字段。 error_msg String 调用失败时的错误信息。 调用成功时无此字段。
  • 功能介绍 创建用于存储人脸特征的人脸库。您最多可以创建10个人脸库,每个人脸库最大容量为10万个人脸特征。如有更大规格的需求请联系客服。 前提条件: 请确保您已开通人脸搜索服务。 默认情况下,一个人脸库最大可支持10万个人脸特征,一个用户最多可创建10个人脸库,最多可支持10*10万(100万)个人脸特征。 如您的需求超出100万个人脸特征,可通过工单或者服务热线( 4000-955-988或950808 转1)与我们联系,咨询具体解决方案。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 用于获取操作API的权限。获取方法请参见认证鉴权。 Content-Type 是 String 发送的实体的MIME类型,参数值为“application/json”。 Enterprise-Project-Id 否 String 企业项目ID。FRS支持通过企业项目管理(EPS)对不同用户组和用户的资源使用,进行分账,当前仅支持按需计费模式。 获取方法:进入“企业项目管理”页面,单击企业项目名称,在企业项目详情页获取Enterprise-Project-Id(企业项目ID)。 说明: 创建企业项目后,在传参时,有以下三类场景。 携带正确的ID,正常使用FRS服务,账单的企业项目会被分类到企业ID对应的企业项目中。 携带格式正确但不存在的ID,正常使用FRS服务,账单的企业项目会显示对应不存在的企业项目ID。 携带正确的ID,正常使用FRS服务,账单的企业项目会被分类到企业ID对应的企业项目中。 表3 请求Body参数 参数名 参数类型 是否必选 说明 face_id String 是 人脸ID,由系统内部生成的唯一ID。 external_image_id String 否 用户指定的图片外部ID,与当前图像绑定。用户不设置该参数时,系统会自动生成一个。该ID长度范围为[1,36],可以包含字母、数字、中划线或者下划线,不包含其他的特殊字符。 这里是待修改的参数,external_image_id和external_fields至少选一个。 external_fields Object 否 自定义字段的key值长度范围为[1,36],string类型的value长度范围为[1,256],具体参见自定义字段。 这里是待修改的参数,external_image_id和external_fields至少选一个。
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 face_number Integer 更新的人脸数量。 调用失败时无此字段。 face_set_id String 人脸库ID。 调用失败时无此字段。 face_set_name String 人脸库名称。 调用失败时无此字段。 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 调用失败时的错误码,具体请参考错误码。 调用成功时无此字段。 error_msg String 调用失败时的错误信息。 调用成功时无此字段。
  • 日志告警 如果没有对函数代码执行返回结果有特定要求,例如绑定了APIG触发器的事件函数需要返回一个APIG响应格式的结果如下: import json def handler (event, context): return { "statusCode": 200, "isBase64Encoded": False, "body": json.dumps(event), "headers": { "Content-Type": "application/json" } } 一般不建议在函数代码内捕获异常,其会导致创建的错误次数告警配置不生效。但是FunctionGraph实现了与 云日志 服务(LTS)的对接,支持在LTS服务中配置告警,LTS支持日志告警实时监控函数日志中出现的异常信息。 父主题: 使用函数访问Redis数据库
  • 使用LTS SDK相关问题 本文介绍使用LTS SDK的常见问题和相关报错的处理方法。 端侧SDK日志接入LTS时需要注意什么? 答:请用户在使用端侧SDK日志接入LTS时,建议提前做好一键关闭日志上报、逐步提升上报流量等措施,做到及时止损,如果您的移动端日志流量非常大,请提前知会LTS技术支持为您提前预留资源。 端侧SDK中的上报日志report接口和立即上报日志reportImmediately接口如何选择? 答:建议使用上报日志report接口,通过调整上报策略,配置上报间隔、上报大小等参数。重要紧急的数据使用立即上报日志reportImmediately接口,即可进行立即上报。 端侧SDK上报的数据是放到labels参数还是contents参数? 答:固定数据(例如用户ID、设备型号、渠道、系统、网络等)可以放到labels参数,方便进行维度分析;其他数据建议都放到contents参数,然后按需进行索引配置。 集成接入SDK包后对于客户App大小和性能有什么影响吗? 答:iOS端App大小增加50KB左右,Android端App大小增加200KB左右,Web端大小可以忽略不计。在上传日志数据100条/每秒的情况下对性能没有影响。 iOS SDK和Android SDK支持哪些版本? 答:iOS SDK支持iOS10及以上版本,Android SDK支持Android7及以上版本。如果需要支持更低版本,请提交工单申请开通。 按文档要求操作接入后,但在LTS控制台查询不到上报的日志数据? 答:首先检查AK,SK,region,projectId这四个参数是否正确,更多信息请参考SDK接入。其次,在App控制台查看报错提示,详细请参考错误码。最后,请检查端侧权限是否已开通LTS白名单,若有需要,请提交工单申请开通。 App控制台上报日志失败,报错提示接口403? 答:在云日志服务控制台查看日志流是否开启了匿名上报。详细请参考日志流章节中如何开启匿名写入。 集成接入SDK的时候提示SDK初始化失败。 答:可以先开启debug模式,每个参数都会打印,根据提示可以定位到初始化失败的原因。 端侧上报一条日志长度和大小限制。 答:一条日志长度是30720个字符,超过该长度的内容会被删除,只截取30*1024长度的内容,然后以字符串方式上报LTS。上报日志的大小限制为1MB。 端侧SDK日志的上报策略是什么样的? 答:端侧SDK日志有时间和空间维度的自定义上报策略,上报间隔默认3s,上报条数默认200条,哪个先触发就先上报。 端侧SDK日志发送是异步发送还是同步发送? 答:端侧SDK日志发送是异步发送。 LTS能支持多大的端侧SDK并发量? 答:端侧SDK并发量与资源容量大小有关,理论上来说只要LTS资源足够,并发量不是问题。若需要支持更多端侧SDK并发量,请提交工单申请开通。 父主题: SDK接入
  • 操作场景 HBase把Thrift结合起来可以向外部应用提供HBase服务。在HBase服务安装时可选部署ThriftServer实例,ThriftServer系统可访问HBase的用户,拥有HBase所有NameSpace和表的读、写、执行、创建和管理的权限。访问ThriftServer服务同样需要进行Kerberos认证。HBase实现了两套Thrift Server服务,此处“hbase-thrift-example”为ThriftServer实例服务的调用实现。
  • 样例代码 代码认证 以下代码在“hbase-thrift-example”样例工程的“com.huawei.bigdata.hbase.examples”包的“TestMain”类中。 private static void init() throws IOException { // Default load from conf directory conf = HBaseConfiguration.create(); String userdir = TestMain.class.getClassLoader().getResource("conf").getPath() + File.separator;[1] //In Linux environment //String userdir = System.getProperty("user.dir") + File.separator + "conf" + File.separator; conf.addResource(new Path(userdir + "core-site.xml"), false); conf.addResource(new Path(userdir + "hdfs-site.xml"), false); conf.addResource(new Path(userdir + "hbase-site.xml"), false); } [1]userdir获取的是编译后资源路径下conf目录的路径。初始化配置用到的core-site.xml、hdfs-site.xml、hbase-site.xml文件和用于安全认证的用户凭证文件,需要放置到"src/main/resources/conf"的目录下。 安全登录 请根据实际情况,修改“userName”为实际用户名,例如“developuser”。 private static void login() throws IOException { if (User.isHBaseSecurityEnabled(conf)) { userName = " developuser "; //In Windows environment String userdir = TestMain.class.getClassLoader().getResource("conf").getPath() + File.separator; //In Linux environment //String userdir = System.getProperty("user.dir") + File.separator + "conf" + File.separator; userKeytabFile = userdir + "user.keytab"; krb5File = userdir + "krb5.conf"; /* * if need to connect zk, please provide jaas info about zk. of course, * you can do it as below: * System.setProperty("java.security.auth.login.config", confDirPath + * "jaas.conf"); but the demo can help you more : Note: if this process * will connect more than one zk cluster, the demo may be not proper. you * can contact us for more help */ LoginUtil.setJaasConf(ZOOKEEPER_DEFAULT_ LOG IN_CONTEXT_NAME, userName, userKeytabFile); LoginUtil.login(userName, userKeytabFile, krb5File, conf); } } 连接ThriftServer实例 try { test = new ThriftSample(); test.test("10.120.16.170", THRIFT_PORT, conf);[2] } catch (TException | IOException e) { LOG.error("Test thrift error", e); } [2]test.test()传入参数为待访问的ThriftServer实例所在节点ip地址,需根据实际运行集群情况进行修改,且该节点ip需要配置到运行样例代码的本机hosts文件中。 “THRIFT_PORT”为ThriftServer实例的配置参数"hbase.regionserver.thrift.port"对应的值。
  • 使用Python提交Flink普通作业 获取样例工程“flink-examples/pyflink-example/pyflink-kafka”中的“pyflink-kafka.py”和“insertData2kafka.sql”。 参考准备本地应用开发环境将准备好的Python虚拟环境打包,获取“venv.zip”文件。 zip -q -r venv.zip venv/ 以root用户登录主管理节点,将1和2获取的“venv.zip”、“pyflink-kafka.py”和“insertData2kafka.sql”文件上传至客户端环境。 per-job模式:将上述文件上传到“客户端安装目录/Flink/flink”。 yarn-application模式:将上述文件和“flink-connector-kafka-实际版本号.jar”包上传到“客户端安装目录/Flink/flink/yarnship”。 修改“pyflink-kafka.py”中的“specific_jars”路径。 per-job模式:修改为SQL文件的实际路径。如:file:///客户端安装目录/Flink/flink/lib/flink-connector-kafka-实际版本号.jar yarn-application模式:修改为:file://"+os.getcwd()+"/../../../../yarnship/flink-connector-kafka-实际版本号.jar 修改“pyflink-kafka.py”中的“file_path”路径。 per-job模式:修改为sql文件的实际路径。如:客户端安装目录/Flink/flink/insertData2kafka.sql yarn-application模式:修改为os.getcwd() + "/../../../../yarnship/insertData2kafka.sql" 执行以下命令指定运行环境。 export PYFLINK_CLIENT_EXECUTABLE=venv.zip/venv/bin/python3 执行以下命令运行程序。 per-job模式: ./bin/flink run --detached -t yarn-per-job -Dyarn.application.name=py_kafka -pyarch venv.zip -pyexec venv.zip/venv/bin/python3 -py pyflink-kafka.py 运行结果: yarn-application模式 ./bin/flink run-application --detached -t yarn-application -Dyarn.application.name=py_kafka -Dyarn.ship-files=/opt/client/Flink/flink/yarnship/ -pyarch yarnship/venv.zip -pyexec venv.zip/venv/bin/python3 -pyclientexec venv.zip/venv/bin/python3 -pyfs yarnship -pym pyflink-kafka 运行结果: 父主题: PyFlink样例程序
  • Manager应用开发流程 本文档主要基于Java API对Manager进行应用开发。 开发流程中各阶段的说明如图1和表1所示。 图1 Manager应用程序开发流程 表1 Manager应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解基本认证的基本概念,了解场景需求,设计表等。 Manager应用开发简介 准备开发和运行环境 Manager REST API的应用开发程序当前推荐使用Java语言进行开发,可使用IntelliJ IDEA工具。 准备Manager应用开发和运行环境 准备样例工程 Manager REST API提供了不同场景下的样例程序,您可以导入样例工程进行程序学习。 配置并导入Manager样例工程 根据场景开发工程 提供了Java语言的样例工程,包含添加用户、查找用户、修改用户、删除用户,导出用户列表等典型应用场景。 开发Manager应用 编译并运行程序 指导用户将开发好的程序编译并提交运行。 在本地开发环境中调测Manager应用 查看程序运行结果 程序运行结果会写在用户指定的路径下。用户还可以通过UI查看应用运行情况。 查看Manager应用调测结果 父主题: Manager管理开发指南
  • 功能简介 使用REST服务,传入对应host与port组成的url以及指定的Namespace,通过HTTP协议,对Namespace进行创建、查询、删除,获取指定Namespace中表的操作。 HBase表以“命名空间:表名”格式进行存储,若在创建表时不指定命名空间,则默认存储在“default”中。其中,“hbase”命名空间为系统表命名空间,请不要对该系统表命名空间进行业务建表或数据读写等操作。
  • HetuEngine应用开发流程介绍 开发流程中各阶段的说明如图1所示: 图1 HetuEngine应用程序开发流程 表1 HetuEngine应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解HetuEngine的基本概念,了解场景需求等。 HetuEngine基本概念 准备开发和运行环境 HetuEngine的应用程序支持使用任何语言调用JDBC接口进行开发,当前样例主要是java语言。推荐使用IDEA工具,请根据指导完成不同语言的开发环境配置。HetuEngine的运行环境即客户端,请根据指导完成客户端的安装和配置。 准备本地应用开发环境 准备工程 HetuEngine提供了不同场景下的样例程序,您可以导入样例工程进行程序学习。或者您可以根据指导,新建一个HetuEngine工程。 导入并配置HetuEngine样例工程 根据场景开发工程 提供了Java语言的样例工程,包括连接HetuEngine、SQL语句执行、结果解析,断开连接等全流程的样例工程。 开发HetuEngine应用 编译并运行程序 指导用户将开发好的程序编译并提交运行。 调测HetuEngine应用 查看程序运行结果 程序运行结果会根据结果解析部分的实现显示到期望显示的地方。 调测HetuEngine应用 父主题: HetuEngine开发指南(普通模式)
  • 数据规划 在kafka中生成模拟数据(需要有Kafka权限用户)。 确保集群安装完成,包括安装HDFS、Yarn、Spark2x和Kafka服务。 将Kafka的Broker配置参数“allow.everyone.if.no.acl.found”的值修改为“true”。 创建Topic。 {zkQuorum}表示ZooKeeper集群信息,格式为IP:port。 $KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper {zkQuorum}/kafka --replication-factor 1 --partitions 1 --topic {Topic} 启动Kafka的Producer,向Kafka发送数据。 {ClassPath}表示工程jar包的存放路径,详细路径由用户指定,可参考在Linux环境中调测Spark应用章节中导出jar包的操作步骤。 java -cp $SPARK_HOME/conf:$SPARK_HOME/jars/*:$SPARK_HOME/jars/streamingClient010/*:{ClassPath} com.huawei.bigdata.spark.examples.KafkaProducer {brokerlist} {topic} {number of events produce every 0.02s} 示例: java -cp /opt/client/Spark2x/spark/conf:/opt/StructuredStreamingState-1.0.jar:/opt/client/Spark2x/spark/jars/*:/opt/client/Spark2x/spark/jars/streamingClient010/* com.huawei.bigdata.spark.examples.KafkaProducer xxx.xxx.xxx.xxx:21005,xxx.xxx.xxx.xxx:21005,xxx.xxx.xxx.xxx:21005 mytopic 10
  • 样例工程运行依赖包参考信息 Flink客户端lib目录、opt目录中都有flink jar包,其中lib目录中默认是flink核心jar包,opt目录中是对接外部组件的jar包(例如flink-connector-kafka*.jar),若应用开发中需要请手动复制相关jar包到lib目录中。 针对Flink提供的几个样例工程,其对应的运行依赖包如下: 表1 样例工程运行依赖包 样例工程 依赖包 依赖包获取地址 DataStream程序 异步Checkpoint机制程序 flink-dist_*.jar 可在Flink的客户端或者服务端安装路径的lib目录下获取。 使用Flink Jar提交SQL作业程序 FlinkServer REST API程序 flink-dist_*.jar flink-table_*.jar 可在Flink的客户端或者服务端安装路径的lib目录下获取。 向Kafka生产并消费数据程序 kafka-clients-*.jar flink-connector-kafka_*.jar kafka-clients-*.jar由Kafka组件发布提供,可在Kafka组件客户端或者服务端安装路径下的lib目录下获取。 flink-connector-kafka_*.jar可在Flink客户端或者服务端安装路径的opt目录下获取。 pipeline程序 flink-connector-netty_*.jar flink-dist_*.jar flink-connector-netty_*.jar可在二次开发样例代码编译后产生的lib文件夹下获取。 flink-dist_*.jar可在Flink的客户端或者服务端安装路径的lib目录下获取。 Stream SQL Join程序 kafka-clients-*.jar flink-connector-kafka_*.jar flink-dist_*.jar flink-table_*.jar kafka-clients-*.jar由Kafka组件发布提供,可在Kafka组件客户端或者服务端安装路径下的lib目录下获取。 flink-connector-kafka_*.jar可在Flink客户端或者服务端安装路径的opt目录下获取。 flink-dist_*.jar、flink-table_*.jar可在Flink的客户端或者服务端安装路径的lib目录下获取。 Flink读写HBase程序 flink-connector-hbase*.jar flink-dist_*.jar flink-table_*.jar hbase-clients-*.jar flink-connector-hbase_*.jar可在Flink客户端或者服务端安装路径的opt目录下获取。 flink-dist_*.jar、flink-table_*.jar可在Flink的客户端或者服务端安装路径的lib目录下获取。 hbase-clients-*.jar由HBase组件发布提供,可在HBase组件客户端或者服务端安装路径下的lib目录下获取。 Flink读写Hudi程序 hbase-unsafe-*.jar 可在二次开发样例代码编译后产生的lib文件夹下获取。
  • Flink Jar作业提交SQL样例程序(Java) 提交SQL的核心逻辑如下,目前只支持提交CREATE和INSERT语句。完整代码参见com.huawei.bigdata.flink.examples.FlinkSQLExecutor。 public class FlinkSQLExecutor { public static void main(String[] args) throws IOException { System.out.println("-------------------- begin init ----------------------"); final String sqlPath = ParameterTool.fromArgs(args).get("sql", "config/redisSink.sql"); final StreamExecutionEnvironment streamEnv = StreamExecutionEnvironment.getExecutionEnvironment(); EnvironmentSettings bsSettings = EnvironmentSettings.newInstance().inStreamingMode().build(); StreamTableEnvironment tableEnv = StreamTableEnvironment.create(streamEnv, bsSettings); StatementSet statementSet = tableEnv.createStatementSet(); String sqlStr = FileUtils.readFileToString(FileUtils.getFile(sqlPath), "utf-8"); String[] sqlArr = sqlStr.split(";"); for (String sql : sqlArr) { sql = sql.trim(); if (sql.toLowerCase(Locale.ROOT).startsWith("create")) { System.out.println("----------------------------------------------\nexecuteSql=\n" + sql); tableEnv.executeSql(sql); } else if (sql.toLowerCase(Locale.ROOT).startsWith("insert")) { System.out.println("----------------------------------------------\ninsert=\n" + sql); statementSet.addInsertSql(sql); } } System.out.println("---------------------- begin exec sql --------------------------"); statementSet.execute(); } } 需将当前样例需要的依赖包,即编译之后lib文件下面的jar包复制到客户端的lib文件夹内。 以对接普通模式Kafka提交SQL为例: create table kafka_sink ( uuid varchar(20), name varchar(10), age int, ts timestamp(3), p varchar(20) ) with ( 'connector' = 'kafka', 'topic' = 'input2', 'properties.bootstrap.servers' = 'Kafka的Broker实例业务IP:Kafka端口号', 'properties.group.id' = 'testGroup2', 'scan.startup.mode' = 'latest-offset', 'format' = 'json' ); create TABLE datagen_source ( uuid varchar(20), name varchar(10), age int, ts timestamp(3), p varchar(20) ) WITH ( 'connector' = 'datagen', 'rows-per-second' = '1' ); INSERT INTO kafka_sink SELECT * FROM datagen_source; 父主题: Flink Jar作业提交SQL样例程序
  • 在Linux环境中调测ClickHouse Springboot样例程序 ClickHouse springboot应用程序也支持在Linux环境中运行。在程序代码完成开发后,您可以上传Jar包至准备好的Linux运行环境中运行。 前提条件 Linux环境已安装JDK,版本号需要和IntelliJ IDEA导出Jar包使用的JDK版本一致,并设置好Java环境变量。 编译并运行程序 在IDEA中右侧单击“Maven”,展开“Lifecycle”,双击“package”,对当前工程进行打包。 使用root用户登录ClickHouse客户端节点,创建运行目录,例如“/opt/test”,在IDEA的“target”目录下获取带有“-with-dependencies”的jar包,并将jar包和idea中conf文件夹一同上传到“/opt/test”目录,如: 执行如下命令,配置环境变量并运行jar包: cd 客户端安装路径 source bigdata_env cd /opt/test java -jar clickhouse-examples-1.0-SNAPSHOT-jar-with-dependencies.jar 显示结果如下: 调用ClickHouse的SpringBoot样例接口触发样例代码运行: Windows环境运行方式: 打开浏览器,输入:http://ClickHouse客户端节点IP:8080/clickhouse/executeQuery,查看浏览器返回信息: ClickHouse springboot client runs normally. Linux环境下执行运行方式: 登录ClickHouse客户端节点,执行如下命令,查看linux下shell日志打印和日志文件打印: curl http://localhost:8080/clickhouse/executeQuery vi clickhouse-springboot-example.log
  • 操作步骤 客户端机器必须安装有Python3,其版本不低于3.6。 在客户端机器的命令行终端输入python3可查看Python版本号。如下显示Python版本为3.8.2。 Python 3.8.2 (default, Jun 23 2020, 10:26:03) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux Type "help", "copyright", "credits" or "license" for more information. 客户端机器必须安装有setuptools,版本为47.3.1。 具体软件,请到对应的官方网站获取。 https://pypi.org/project/setuptools/#files 将下载的setuptools压缩文件复制到客户端机器上,解压后进入解压目录,在客户端机器的命令行终端执行python3 setup.py install。 如下内容表示安装setuptools的47.3.1版本成功。 Finished processing dependencies for setuptools==47.3.1 安装Python客户端到客户端机器。 参考获取 MRS 应用开发样例工程,获取样例代码解压目录中“src\hive-examples”目录下的样例工程文件夹“python3-examples”。 进入“python3-examples”文件夹。 根据python3的版本,选择进入“dependency_python3.6”或“dependency_python3.7”或“dependency_python3.8”文件夹。 执行whereis easy_install命令,找到easy_install程序路径。如果有多个路径,使用easy_install --version确认选择setuptools对应版本的easy_install,如/usr/local/bin/easy_install 使用对应的easy_install命令,依次安装dependency_python3.x文件夹下的egg文件。如: /usr/local/bin/easy_install future-0.18.2-py3.8.egg 输出以下关键内容表示安装egg文件成功。 Finished processing dependencies for future==0.18.2
共100000条