云服务器内容精选

  • 步骤1:上传数据 将数据上传到 对象存储服务 OBS,为后面使用 DLI 完成数据分析做准备。 下载OBS Browser+。下载地址请参考《对象存储服务工具指南》。 安装OBS Browser+。安装步骤请参考《对象存储服务工具指南》。 登录OBS Browser+。OBS Browser+支持AK方式登录,以及授权码登录两种登录方式。登录步骤请参考《对象存储服务工具指南》。 通过OBS Browser+上传数据。 在OBS Browser+页面单击“创建桶”,按照要求选择“区域”和填写“桶名”(例如:dli-demo),其他参数保持默认或根据需要选择,创建桶成功后,返回桶列表,单击桶dli-demo。OBS Browser+提供强大的拖拽上传功能,您可以将本地的一个或多个文件或者文件夹拖拽到对象存储的对象列表或者并行文件系统的对象列表中;同时您也可以将文件或文件夹拖拽到指定的目录上,这样可以上传到指定的目录中。 单击Best_Practice_01.zip获取本示例的测试数据,将“Best_Practice_01.zip”压缩包解压。后续操作说明如下: 详单数据:将解压后Data目录下的“detail-records”文件夹上传到OBS桶根目录下。 订单数据:将解压后Data目录下的“order-records”文件夹上传到OBS桶根目录下。
  • 资源和成本规划 表1 资源和成本规划 资源 资源说明 成本说明 OBS 需要创建一个OBS桶将数据上传到对象存储服务OBS,为后面使用DLI完成数据分析做准备。 OBS的使用涉及以下几项费用: 存储费用:静态网站文件存储在OBS中产生的存储费用。 请求费用:用户访问OBS中存储的静态网站文件时产生的请求费用。 流量费用:用户使用自定义 域名 通过公网访问OBS时产生的流量费用。 实际产生的费用与存储的文件大小、用户访问所产生的请求次数和流量大小有关,请根据自己的业务进行预估。 DLI 在创建SQL作业前需购买队列,使用DLI的队列资源时,按照队列CU时进行计费。 如购买按需计费的队列,在使用队列资源时,按照队列CU时进行计费。 以小时为单位进行结算。不足一小时按一小时计费,小时数按整点计算。队列CU时按需计费的计算费用=单价*CU数*小时数。
  • 数据说明 详单数据 车辆上报的详单数据,包括定时上报的位置记录和异常的驾驶行为触发的告警事件数据。 表2 详单数据 字段名称 字段类型 字段说明 driverID string 驾驶员ID carNumber string 车牌号 latitude double 纬度 longitude double 经度 speed int 速度 direction int 方向 siteName string 地点 time timestamp 记录上报时间 isRapidlySpeedup int 急加速标识,“1”表示急加速,“0”表示非急加速 isRapidlySlowdown int 急减速 isNeutralSlide int 空挡滑行 isNeutralSlideFinished int 空挡滑行结束 neutralSlideTime bigint 空挡滑行时长 isOverspeed int 超速 isOverspeedFinished int 超速结束 overspeedTime bigint 超速时长 isFatigueDriving int 疲劳驾驶 isHthrottleStop int 停车轰油门 isOilLeak int 用油异常 订单数据 订单数据记录了货运订单相关的信息。 表3 订单数据 字段名称 字段类型 字段说明 orderNumber string 订单号 driverID string 驾驶员ID carNumber string 车牌号 customerID string 客户ID sourceCity string 出发城市 targetCity string 到达城市 expectArriveTime timestamp 期望送达时间 time timestamp 记录产生时间 action string 事件类型,包括创建订单、开始发货、货物送达、订单签收等事件
  • 步骤四:车辆分析 执行ANALYZE。 用于收集与数据库中普通表内容相关的统计信息,统计结果存储在系统表PG_STATISTIC中。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。 执行以下语句生成表统计信息: 1 ANALYZE; 查询数据表中的数据量。 执行如下语句,可以查看已加载的数据条数。 1 2 SET current_schema= traffic_data; SELECT count(*) FROM traffic_data.gcjl; 车辆精确查询。 执行以下语句,指定车牌号码和时间段查询车辆行驶路线。 GaussDB (DWS)在应对点查时秒级响应。 1 2 3 4 5 6 SET current_schema= traffic_data; SELECT hphm, kkbh, gcsj FROM traffic_data.gcjl where hphm = 'YD38641' and gcsj between '2016-01-06' and '2016-01-07' order by gcsj desc; 车辆模糊查询。 执行以下语句,指定车牌号码和时间段查询车辆行驶路线,GaussDB(DWS) 在应对模糊查询时秒级响应。 1 2 3 4 5 6 7 SET current_schema= traffic_data; SELECT hphm, kkbh, gcsj FROM traffic_data.gcjl where hphm like 'YA23F%' and kkbh in('508', '1125', '2120') and gcsj between '2016-01-01' and '2016-01-07' order by hphm,gcsj desc;
  • 支持区域 当前已上传OBS数据的区域如表1所示。 表1 区域和OBS桶名 区域 OBS桶名 华北-北京一 dws-demo-cn-north-1 华北-北京二 dws-demo-cn-north-2 华北-北京四 dws-demo-cn-north-4 华北-乌兰察布一 dws-demo-cn-north-9 华东-上海一 dws-demo-cn-east-3 华东-上海二 dws-demo-cn-east-2 华南-广州 dws-demo-cn-south-1 华南-广州友好 dws-demo-cn-south-4 中国-香港 dws-demo-ap-southeast-1 亚太-新加坡 dws-demo-ap-southeast-3 亚太-曼谷 dws-demo-ap-southeast-2 拉美-圣地亚哥 dws-demo-la-south-2 非洲-约翰内斯堡 dws-demo-af-south-1 拉美-墨西哥城一 dws-demo-na-mexico-1 拉美-墨西哥城二 dws-demo-la-north-2 莫斯科二 dws-demo-ru-northwest-2 拉美-圣保罗一 dws-demo-sa-brazil-1
  • 方案架构 生产者(Producer)将消息发布到Kafka主题(Topic)上,消费者(Consumer)订阅这些主题并消费这些消息。 在Kafka集群上一个服务器称为一个Broker。对于每一个主题,Kafka集群保留一个用于缩放、并行化和容错性的分区(Partition)。每个分区是一个有序、不可变的消息序列,并不断追加到提交日志文件。分区的消息每个也被赋值一个称为偏移顺序(Offset)的序列化编号。 图1 Kafka结构
  • 应用场景 Kafka是一个分布式的消息发布-订阅系统。它采用独特的设计提供了类似JMS的特性,主要用于处理活跃的流式数据。 Kafka有很多适用的场景:消息队列、行为跟踪、运维数据监控、日志收集、流处理、事件溯源、持久化日志等。 Kafka有如下几个特点: 高吞吐量 消息持久化到磁盘 分布式系统易扩展 容错性好 MRS 服务提供了Kafka多种场景下的样例开发工程,本章节以最常见的WordCount样例Demo进行说明,对应示例场景的开发思路: 使用Kafka客户端创建两个Topic,用于输入Topic和输出Topic。 开发一个Kafka Streams完成单词统计功能,通过读取输入Topic中的消息,统计每条消息中的单词个数,从输出Topic消费数据,将统计结果以Key-Value的形式输出。
  • 步骤1:创建MRS集群 创建并购买一个包含有Kafka组件的MRS集群,详情请参见购买自定义集群。 本文以购买的MRS 3.1.0版本的集群为例,组件包含Hadoop、Kafka组件,集群未开启Kerberos认证。 集群购买成功后,在MRS集群的任一节点内,安装集群客户端,具体操作可参考安装并使用集群客户端。 例如客户端安装在主管理节点中,安装目录为“/opt/client”。 客户端安装完成后,在客户端内创建“lib”目录,用于放置相关jar包。 将安装客户端过程中解压的目录中Kafka相关jar包复制到“lib”目录。 例如客户端软件包的下载路径为主管理节点的“/tmp/ FusionInsight -Client”目录,执行以下命令: mkdir /opt/client/lib cd /tmp/FusionInsight-Client/FusionInsight_Cluster_1_Services_ClientConfig scp Kafka/install_files/kafka/libs/* /opt/client/lib
  • 前提条件 已创建包含Doris服务的集群,集群内各服务运行正常。 待连接Doris数据库的节点与MRS集群网络互通。 创建具有Doris管理权限的用户。 集群已启用Kerberos认证(安全模式) 在FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。 使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。 集群未启用Kerberos认证(普通模式) 使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris。
  • 使用自定义列创建表 可通过指定各列及其数据类型来创建表。 命令示例: CREATE TABLE IF NOT EXISTS productdb.productSalesTable ( productNumber Int, productName String, storeCity String, storeProvince String, productCategory String, productBatch String, saleQuantity Int, revenue Int) STORED AS carbondata TBLPROPERTIES ( 'table_blocksize'='128'); 上述命令所创建的表的详细信息如下: 表1 表信息定义 参数 描述 productSalesTable 待创建的表的名称。该表用于加载数据进行分析。 表名由字母、数字、下划线组成。 productdb 数据库名称。该数据库将与其中的表保持逻辑连接以便于识别和管理。 数据库名称由字母、数字、下划线组成。 productName storeCity storeProvince procuctCategory productBatch saleQuantity revenue 表中的列,代表执行分析所需的业务实体。 列名(字段名)由字母、数字、下划线组成。 table_blocksize CarbonData表使用的数据文件的block大小,默认值为1024,最小值为1,最大值为2048,单位为MB。 如果“table_blocksize”值太小,数据加载时,生成过多的小数据文件,可能会影响HDFS的使用性能。 如果“table_blocksize”值太大,数据查询时,索引匹配的block数据量较大,某些block会包含较多的blocklet,导致读取并发度不高,从而降低查询性能。 一般情况下,建议根据数据量级别来选择大小。例如:GB级别用256,TB级别用512,PB级别用1024。 所有Integer类型度量均以BigInt类型进行处理与显示。 CarbonData遵循严格解析,因此任何不可解析的数据都会被保存为null。例如,在BigInt列中加载double值(3.14),将会保存为null。 在Create Table中使用的Short和Long数据类型在DESCRIBE命令中分别显示为Smallint和Bigint。 可以使用DESCRIBE格式化命令查看表数据大小和表索引大小。
  • 场景描述 了解GaussDB(DWS)的基本功能和数据导入,对某公司与供应商的订单数据分析,分析维度如下: 分析某地区供应商为公司带来的收入,通过该统计信息可用于决策在给定的区域是否需要建立一个当地分配中心。 分析零件/供货商关系,可以获得能够以指定的贡献条件供应零件的供货商数量,通过该统计信息可用于决策在订单量大,任务紧急时,是否有充足的供货商。 分析小订单收入损失,通过查询得知如果没有小量订单,平均年收入将损失多少。筛选出比平均供货量的20%还低的小批量订单,如果这些订单不再对外供货,由此计算平均一年的损失。
  • 支持区域 当前已上传OBS数据的区域如表1所示。 表1 区域和OBS桶名 区域 OBS桶名 华北-北京一 dws-demo-cn-north-1 华北-北京二 dws-demo-cn-north-2 华北-北京四 dws-demo-cn-north-4 华北-乌兰察布一 dws-demo-cn-north-9 华东-上海一 dws-demo-cn-east-3 华东-上海二 dws-demo-cn-east-2 华南-广州 dws-demo-cn-south-1 华南-广州友好 dws-demo-cn-south-4 中国-香港 dws-demo-ap-southeast-1 亚太-新加坡 dws-demo-ap-southeast-3 亚太-曼谷 dws-demo-ap-southeast-2 拉美-圣地亚哥 dws-demo-la-south-2 非洲-约翰内斯堡 dws-demo-af-south-1 拉美-墨西哥城一 dws-demo-na-mexico-1 拉美-墨西哥城二 dws-demo-la-north-2 莫斯科二 dws-demo-ru-northwest-2 拉美-圣保罗一 dws-demo-sa-brazil-1
  • 操作描述 有Minor合并、Major合并和Custom合并三种类型。 Minor合并: 在Minor合并中,用户可指定合并数据加载的数量。如果设置了参数“carbon.enable.auto.load.merge”,每次数据加载都可触发Minor合并。如果任意segment均可合并,那么合并将于数据加载时并行进行。 Minor合并有两个级别。 Level 1:合并未合并的segment。 Level 2:合并已合并的segment,以形成更大的segment。 Major合并: 在Major合并中,许多segment可以合并为一个大的segment。用户将指定合并尺寸,将对未达到该尺寸的segment进行合并。Major合并通常在非高峰时段进行。 Custom合并: 在Custom合并中,用户可以指定几个segment的id合并为一个大的segment。所有指定的segment的id必须存在并且有效,否则合并将会失败。Custom合并通常在非高峰时段进行。 具体的命令操作,请参考ALTER TABLE COMPACTION。 表1 合并参数 参数 默认值 应用类型 描述 carbon.enable.auto.load.merge false Minor 数据加载时启用合并。 “true”:数据加载时自动触发segment合并。 “false”:数据加载时不触发segment合并。 carbon.compaction.level.threshold 4,3 Minor 对于Minor合并,该属性参数决定合并segment的数量。 例如,如果该参数设置为“2,3”,在Level 1,每2个segment触发一次Minor合并。在Level2,每3个Level 1合并的segment将被再次合并为新的segment。 合并策略根据实际的数据大小和可用资源决定。 有效值为0-100。 carbon.major.compaction.size 1024mb Major 通过配置该参数可配置Major合并。低于该阈值的segment之和将被合并。 例如,如果该阈值是1024MB,且有5个大小依次为300MB,400MB,500MB,200MB,100MB的segment用于Major合并,那么只有相加的总数小于阈值的segment会被合并,也就是300+400+200+100 = 1000MB的segment会被合并,而500MB的segment将会被跳过。 carbon.numberof.preserve.segments 0 Minor/Major 如果用户希望从被合并的segment中保留一定数量的segment,可通过该属性参数进行设置。 例如,“carbon.numberof.preserve.segments”=“2”,那么最新的2个segment将不会包含在合并中。 默认不保留任何segment。 carbon.allowed.compaction.days 0 Minor/Major 合并将合并在指定的配置天数中加载的segment。 例如,如果配置为“2”,那么只有在2天的时间框架中被加载的segment可以被合并。在2天以外被加载的segment将不被合并。 默认为禁用。 carbon.number.of.cores.while.compacting 2 Minor/Major 在合并过程中写入数据时所用的核数。配置的核数越大合并性能越好。如果CPU资源充足可以增加此值。 carbon.merge.index.in.segment true SEGMENT_INDEX 如果设置为true,则一个segment中所有Carbon索引文件(.carbonindex)将合并为单个Carbon索引合并文件(.carbonindexmerge)。 这增强了首次查询性能。
  • 操作场景 频繁的数据获取导致在存储目录中产生许多零碎的CarbonData文件。由于数据排序只在每次加载时进行,所以,索引也只在每次加载时执行。这意味着,对于每次加载都会产生一个索引,随着数据加载数量的增加,索引的数量也随之增加。由于每个索引只在一次加载时工作,索引的性能被降低。CarbonData提供加载压缩。压缩过程通过合并排序各segment中的数据,将多个segment合并为一个大的segment。
  • 响应示例 状态码: 200 成功 { "total" : 2, "count" : 2, "sqls" : [ { "sql" : { "id" : "o1n8BI8BDdIO3rwS4Rea", "sql_statement" : "create table test(name varchar(1000), age int)", "client_ip" : "fe80::f816:3eff:feca:22f5", "client_name" : "", "db_ip" : "fe80::f816:3eff:feca:22f5", "db_user" : "root", "query_type" : "CREATE TABLE", "operated_obj_info" : [ { "column_name" : "", "object_type" : "TABLE", "schema_name" : "test", "sql_type" : "CREATE TABLE", "sys_name" : "", "table_name" : "test" }, { "column_name" : "", "object_type" : "TABLE", "schema_name" : "test", "sql_type" : "CREATE", "sys_name" : "", "table_name" : "test" } ], "rule_name" : "全审计规则", "risk_level" : "", "start_time" : "2024-04-22 08:46:02", "sql_response" : "SUC CES S", "db_instance" : "" } }, { "sql" : { "id" : "pFn8BI8BDdIO3rwS4Rea", "sql_statement" : "create table test", "client_ip" : "fe80::f816:3eff:feca:22f5", "client_name" : "", "db_ip" : "fe80::f816:3eff:feca:22f5", "db_user" : "root", "query_type" : "CREATE", "operated_obj_info" : [ { "column_name" : "", "object_type" : "", "schema_name" : "test", "sql_type" : "CREATE", "sys_name" : "", "table_name" : "" } ], "rule_name" : "全审计规则", "risk_level" : "", "start_time" : "2024-04-22 08:46:02", "sql_response" : "FAILED", "db_instance" : "" } } ] } 状态码: 400 请求参数错误 { "error" : { "error_code" : "DBSS.XXXX", "error_msg" : "XXX" } } 状态码: 500 服务器内部错误 { "error" : { "error_code" : "DBSS.XXXX", "error_msg" : "XXX" } }