• [集群&DWS] GaussDB(DWS) 集群通信系列三:集群通信常用视图
    视图是检测数据库运行状态的重要工具和手段,GaussDB(DWS)集群通信常用视图主要包含pg_stat_activity、pg_comm_client、pgxc_thread_wait_status、pgxc_comm_recv_stream、pgxc_comm_send_stream、pgxc_comm_status,其在数据库通信问题定位中发挥了重要作用。1、pg_stat_activity该视图显示和当前用户查询相关的信息。主要用于查看当前用户执行查询的状态和查询对应的query_id,2、pg_comm_client_info该视图存储单个节点客户端连接信息(DN上查询该视图显示CN连接DN的信息)。3、pgxc_thread_wait_status该视图显示由执行语句产生的线程之间层次调用关系,以及各个线程的阻塞等待状态。该视图常用来定位数据库通信过程中的hang问题,主要用于定位的信息包括:Ø  query_id:查询IDØ  tlevel:线程层级,对于集群通信而言,Postgres thread线程为0级线程,其根据任务会fork其他子线程,集群通信线程间的关系具体可以参考http://3ms.huawei.com/hi/group/2191/wiki_5275953.html?for_statistic_from=all_group_wikiØ  wait_status:等待线程的当前等待状态,none表示没有等待,其他状态可参考产品文档。4、pgxc_comm_recv_stream该视图显示DN上所有的通信库接收流的状态。5、pgxc_comm_send_stream该视图显示DN上所有的通信库发送流的状态。6、pgxc_comm_status该视图显示所有DN的通信库状态。包含:节点名称、节点通信库发送/接收速率、cmailbox的buffer大小、libcomm/libpq进程通信内存大小、线程实时/最高实时使用率、当前使用的逻辑连接总数。通信视图的关联关系使用和hang问题定位示例查询单个的视图往往信息有限而作用不大,视图最大的妙用在于利用各信息的关联关系,要求使用者能够联系多方信息,进行问题定位和状态监测,这一点无疑比较困难,因此整理和介绍视图的关联关系对于视图使用者极为重要,此处仅通过hang问题的示例,和视图部分信息的关联关系使用,介绍这种运用思想和方法,通信视图完整的关联关系将在后续GaussDB(DWS) 集群通信系列中给出。可以看出,定位hang问题的一般步骤为:1、  根据pg_stat_activity视图查看当前查询的query_id。2、  根据pgxc_thread_wait_status中相应的query_id查询对应的线程状态,是等待什么导致的hang3、  根据wait_status的信息,查看对端信息,包含线程层级,节点等4、  查看对端具体的线程信息pg_thread_wait_status,如果是DN可查对应的连接流信息,可以利用netstat,线程号查看对端信息,分析对端的行为。通信hang问题典型案例:
  • [存储] GaussDB(DWS)存储系列之pagehack&pg;_xlogdump工具使用方法总结
    随着技术的演进,数据也发生了巨大的变化,数据规模越来愈大、数据种类呈现多样性,数据处理的时效性要求也越来越高,GaussDB(DWS)实时数仓当前面临着巨大的机遇,也面临着巨大的挑战。同样的,强大工具来帮助我们定位各种各样的问题。数据库目录下有多种二进制文件,比如系统表、普通表、索引和日志文件等等,但是数据库运行过程中的问题,我们该如何利用这些文件去定位和分析问题呢? pagehack和pg_xlogdump就是我们解决问题的利器,帮助我们在故障定位中,解析各种文件的页面头和xlog日志。pagehack:我们先来看看pagehack的各项参数说明这里我们列举出一下几种非常常用的解析方法:(1)数据库中的系统表有很多,但是在数据库data目录下,该如何把系统表和磁盘上的文件一一对应呢,我们可以通过pagehack查询data目录下的pg_filenode.map执行pagehack -f pg_filenode.map -t filenode_map,我们就可以看到如下结果,这里的relfilenode就对应磁盘上的文件(2)除了系统表,另外一个常用的数据类型就是行存表的文件,通常对于存储异常、读取异常等问题,我们都需要通过pagehack查询行存表的头文件信息。首先连接DN上,查询到该行存表对应的relfilenode(16502),到对应DN的data目录下,执行:pagehack -f 16502 -t heap,结果如下:根据解析出的结果,page页面头结构如下解析出的页面中一些常用信息含义如下,关于page页面详细信息,后面会出一篇博文来专门介绍page页面结构信息pd_lsn:本页面最后一次变更所写入的xlog记录对应的lsn。pd_special:用在索引页中,在索引页中它指向特殊空间的起始位置,在堆表页面中它指向页尾。pd_pagesize_version:页面大小以及页面布局的版本号。t_xmin: 保存插入该元组的事务的txid(事务号)t_xmax:保存删除或更新此元组的事务的txid。如果尚未删除或更新此元组,则t_xmax设置为0,即无效。t_infomask:用于标识元组当前的状态。t_infomask2:HOT链更新状态和当tuple的属性个数。pg_xlogdump:GaussDB数据库利用日志文件来防止断电之类的故障导致的数据丢失,任何试图修改数据库的操作都会写一份日志记录到磁盘,这个日志称为XLOG。在数据库定位问题时,就可以使用pg_xlogdump来解析XLOG日志,包括日志类型、对应的事务号、修改的文件等等。Pg_xlogdump参数使用说明如下:在pg_xlog目录下找到对应的日志文件, XLOG文件名称24个字符,由三部分组成,每一部分的解析如下):第1部分是TimeLineID,第2部分是逻辑文件ID,第3部分是物理文件IDpg_xlogdump ./000000010000000000000004 -nLSN:日志编号prev:对应该条记录的上一条xlog记录。xid:事务的xiddesc:对日志的详细描述通过pg_xlogdump可以查看xlog日志记录的操作的xid和lsn,就可以在数据库崩溃后,使用xid进行恢复等操作以及定位错误等。pagehack和pg_xlogdump工具在定位分析问题是常用的两种工具,希望这两种工具的介绍,能帮助大家再分析解决问题的时候,提高效率。本文章中设计的页面结构详细信息,后期会专门写一篇文章介绍,加深大家的理解。
  • [POC&交付] 【GaussDB for DWS】如何调整表的分布列
          用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列。       针对分布不均匀的表,尽可能通过调整分布列,以减少数据倾斜,避免带来潜在的数据库性能问题。选择合适的分布列     Hash分布表的分布列选取至关重要,需要满足以下基本原则:列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列;在满足第一条原则的情况下尽量不要选取存在常量filter的列;在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量;支持多分布列特性,可以更好地满足数据分布的均匀性要求。调整分布列实施步骤1. 连接数据库      通过datastudio 或者linux下使用gsql访问数据库。2. 创建新表CREATE TABLE IF NOT EXISTS table1_new ( LIKE table1 INCLUDING ALL EXCLUDING DISTRIBUTION) DISTRIBUTE BY HASH (column1, column2);3.迁移数据到新表START TRANSACTION;LOCK TABLE table1 IN ACCESS EXCLUSIVE MODE;INSERT INTO table1_new SELECT * FROM table1;COMMIT;4. 删除原表DROP TABLE table1;5. 替换原表```ALTER TABLE table1_new RENAME TO table1;```注:标红的${dbname}为待变更表所在的数据库名,table1为原表名,table1_new为新表名,column1和column2为分布列名称。
  • [技术原理] 华为云PB级数据库GaussDB(for Redis)揭秘第五期:高斯 Redis 在IM场景中的应用
    一、背景       即时通讯(Instant Messaging,简称IM)是一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频。微信、QQ等IM类产品在这个高度信息化的互联网时代已成为生活必备品,IM系统中最核心的部分是消息系统,消息系统中最核心的功能是消息的同步、存储和检索。消息同步:将消息完整的、快速的从发送方发送至接收方。消息同步系统最重要的衡量指标是消息传递的实时性、完整性、顺序性以及支撑的消息规模。消息存储:即消息的持久化,传统消息系统通常支持消息在接收端的本地存储,数据基本不具备可靠性。现代消息系统支持消息在云端存储,从而实现消息异地查询:账号可在任意客户端登陆查看所有历史消息。消息检索:消息一般是文本,所以支持全文检索也是必备的能力之一。传统消息系统通常来说基于本地存储的消息数据来构建索引,支持消息的本地检索。而现代消息系统支持消息的在线存储以及存储过程中构建索引,提供全面的消息检索功能。二、IM系统架构设计       上图为IM系统的应用场景,可用于聊天,游戏、智能客服等诸多行业。不同行业对IM系统的成本、性能、可靠性、时延等指标的需求是不同的,架构设计需要进行平衡。接下来将介绍IM系统架构设计所涉及到的一些基本概念。2.1 传统架构 vs 现代架构 传统架构先同步后存储。在线消息同步和离线消息缓存。服务端不会对消息进行持久化,无法支持消息异地查询。现代架构先存储后同步。划分消息存储库与消息同步库。消息存储库用于全量保存所有会话消息,主要用于支持消息异地查询。消息同步库,主要用于接收方的多端同步。提供消息全文检索能力。2.2 读扩散vs 写扩散        《2020微信数据报告》指出,截至2020年9月,微信月活跃用户数为10.825亿,日消息发送次数450亿次,日音视频呼叫成功次数4.1亿次。面临这么多的消息,如何保证消息传递的可靠性、一致性并且有效的降低服务器或者客户端的压力是十分具有技术挑战的。其中,采用何种读写模型对IM系统至关重要,这里介绍两种模型:读扩散和写扩散。        如上图所示,用户B与每个聊天的人(A1,A2,A3)都有一个信箱(一种数据结构的抽象,用于存储消息),B在查看聊天信息时需读取所有有新消息的信箱。IM系统里的读扩散通常是每两个相关联的人就有一个信箱。读扩散的优点:写操作(发消息)轻量,不管是单聊还是群聊,只需要往相应的信箱写一次即可。每一个信箱天然就是两个人的聊天记录,可以方便查看和搜索聊天记录。读扩散的缺点:读操作(读消息)很重,存在读放大效应。如上图,在写扩散中,用户(B1,B2,B3)都只从自己的信箱里读取消息,但写(发消息)的时候,对于单聊跟群聊处理如下:单聊:往自己的信箱跟对方的信箱都写一份消息;同时,如果需要查看两个人的聊天历史记录的话还需要再写一份。群聊:发信息时需要针对所有群成员的信箱都写一份消息。群聊使用的是写扩散模型,而写扩散很消耗资源,因此微信群有人数上限(目前是500)。写扩散优点:读操作很轻量,只需要读取自己的邮箱。可以很方便实现消息的多终端同步。写扩散缺点:写操作很重,尤其是对于群聊来说。2.3 推模式 vs 拉模式 vs 推拉结合模式       在IM系统中,消息的获取通常有三种模式:推模式(Push):新消息到达时由服务器主动推送给所有客户端;需要客户端和服务器建立长连接,实时性很高,对客户端来说只需要接收处理消息即可;缺点是服务端不知道客户端处理消息的能力,可能会导致数据积压。拉模式(Pull):由前端主动发起拉取消息的请求,为了保证消息的实时性,一般采用推模式,拉模式一般用于获取历史消息;因客户端拉取新消息的时间间隔不好预设,太短可能会导致大量的连接拉取不到数据,太长导致数据接收不及时。推拉结合模式:兼顾push和pull两种模式的优点。新消息来临时服务器会先推送一个新消息到达的通知给前端,前端接收到通知后就向服务器拉取消息。三、IM技术挑战       上图为IM系统的总体架构图,Client双方通信会经过Server转发来完成消息传递。其核心为消息存储库和消息同步库。这两种库对存储层的性能有极高的要求。支撑海量数据存储:对于消息存储库来说,如果需要消息永久存储,则随着时间的积累,数据规模会越来越大,需存储库支持容量无限扩展以应对日益增长的消息数据。低存储成本:消息数据具有明显的冷热特征,大部分查询集中在热数据,冷数据需要一个低成本的存储方式,否则随着时间的积累,数据量不断膨胀,存储成本会不断上升。数据生命周期管理:不管是对于消息数据的存储还是同步,数据都需要定义生命周期。存储库是用于在线存储消息数据本身,通常需要设定一个较长周期的保存时间。而同步库  是用于写扩散模式的在线或离线推送,通常设定一个较短的保存时间。极高的写入吞吐:绝大部分IM类场景,通常是采用写扩散模型,写扩散要求底层存储具备极高的写入吞吐能力,从而应对消息洪峰。低延迟的读:消息系统通常应用于在线场景,具备较高的实时性,读取延迟应尽可能低。四、高斯Redis在IM场景中的优势       IM系统的核心是存储层,其性能差异将直接影响IM系统的用户体验。目前存储层可选择的数据库产品有很多,如HBase、开源Redis等等。选择何种数据库,需根据业务规模、成本、性能等指标来进行综合选择。这里介绍一种NoSQL数据库:高斯Redis,在性能和规模上,可以满足IM系统对存储层的严格要求:海量数据存储、低存储成本、生命周期管理、写入吞吐大、读取时延低。4.1高斯Redis简介       高斯Redis是华为云数据库团队自主研发且兼容Redis5.0协议的云原生数据库,采用计算存储分离架构。存储侧使用自研的存储系统,容量无限扩展、强一致、高可靠。计算侧基于 LSM 存储引擎实现,通过将大量的随机写转换为顺序写,从而极大的提升了数据写入性能,同时也通过读缓存、bloom filter 等极大优化了读取性能。下图是高斯Redis在IM场景的优势介绍。4.2基于高斯Redis的IM应用案例:       下图是基于高斯Redis的IM系统模型图,这里我们使用stream作为基本数据结构。Redis stream不仅可以作为消息存储容器,还实现了生产者、消费者等基本模型,具有IM系统的基本功能,如消息订阅,分发、增加消费者等,用户可基于高斯Redis快速构建一套IM系统。创建一个群聊时,在Redis中对应地为该群聊创建一个stream队列。在发送消息时,每个用户都将消息按照时间顺序添加到stream队列中,保证了消息的有序性。stream是一个持久化的队列,可保证信息不丢失。五、总结       高斯Redis通过一系列技术创新实现了读写性能水平扩展,秒级扩容,低成本以及自动备份等功能, 可作为IM系统的存储层,其优异的读写性能和高级特性将会极大助力IM应用.同时,高斯Redis在开源Redis的基础之上,较好平衡了性能和成本,能够广泛应用在智慧医疗、流量削峰、计数器等领域。六、结束本文作者:华为云高斯Redis团队。杭州西安深圳简历投递:yuwenlong4@huawei.com更多技术文章,关注高斯Redis官方博客:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813七、参考资料1. 《GaussDB(for Redis)官方主页》https://www.huaweicloud.com/product/gaussdbforredis.html2. 《华为云GaussDB(for Redis)与自建开源Redis的成本对比》https://www.modb.pro/db/427393. 《华为云PB级数据库GaussDB(for Redis)揭秘第一期:Redis与存算分离》https://bbs.huaweicloud.com/blogs/2385844. 《华为云PB级数据库GaussDB(for Redis)揭秘第三期:一场由fork引发的超时,让我们重新探讨了Redis的抖动问题》https://bbs.huaweicloud.com/blogs/2456515. 《现代 IM 系统中的消息系统架构—架构篇》https://www.infoq.cn/article/ypb3y2lv-dsftrr5cguv
  • [技术干货] Gaussdb(for Cassandra) copy最佳实践方案
    1.版本获取方式最新二进制包下载地址:请从https://support.huaweicloud.com/qs-nosql/nosql_02_0009.html 中获取对应平台的包2.COPY介绍COPY TO支持将数据从表中导出到CSV,json,parquet,orc格式的文件中。其中为csv格式时,每行都写入目标文件中的一行,其中的字段由定界符分隔。如果未指定列名,则导出所有字段。要跳过部分列,请指定列列表。COPY FROM支持将数据从CSV文件和json文件导入到现有表中。源文件中的每一行都作为一行导入。数据集中的所有行必须包含相同数量的字段,并且在PRIMARY KEY字段中必须具有值。该过程将验证PRIMARY KEY并更新现有记录。如果HEADER = false并且没有指定列名,则以确定的顺序导入字段。指定列名后,将按该顺序导入字段。缺少和空字段设置为null。源不能具有比目标表更多的字段,但是可以具有更少的字段。注意:仅使用COPY FROM导入少于200万行的数据集。3.COPY语法约定说明: COPY支持一个或多个以逗号分隔的文件名或python glob表达式的列表。语法说明语法约定描述UPPERCASE文字关键字。小写不是字面意思。Lowercase可变值。用用户定义的值替换。Italics可选的。方括号( [] )围绕可选命令参数。请勿输入方括号。( )组。括号(( ))表示要选择的组。不要键入括号。|或。竖线( | )分隔其他元素。键入任何一个元素。请勿输入竖线。...可重复的。省略号(...)表示您可以根据需要多次重复语法元素。'Literal string'单引号( ' )必须包含CQL语句中的文字字符串。使用单引号将大写字母保留下来。{ key : value }地图集合map。大括号( { } )包含地图集合或键值对。用冒号分隔键和值。<datatype1,datatype2>有序列表set,列出,映射或元组。尖括号(< >)将数据类型包含在集合,列表,地图或元组中。用逗号分隔数据类型。cql_statement;结束CQL语句。分号( ; )终止所有CQL语句。[--]使用两个连字符(--)将命令行选项与命令参数分开 。当参数可能误认为命令行选项时,此语法很有用。' <schema> ... </schema> '仅搜索CQL:单引号( ' )包围整个XML模式声明。@xml_entity='xml_entity_type'仅搜索CQL:标识实体和文字值以覆盖模式和solrConfig文件中的XML元素。 4.COPY参数介绍命令选项描述默认值TO/FROMDELIMITER用于分隔字段的单个字符英文逗号,TO/FROMQUOTE包含字段值的单个字符双引号"TO/FROMESCAPE转义使用QUOTE字符的单个字符反斜杠\TO/FROMHEADER布尔值(true | false),指示第一行上的列名称。True将字段名称与导入(FROM)上的列名匹配,并将列名称插入到导出(TO)数据的第一行中FALSETO/FROMNULL查询结果为空的字段的填充值,可自由设置空字符串()TO/FROMDATETIMEFORMAT用于读取或写入CSV时间数据的时间格式。时间戳使用strftime格式。如果未设置,则默认值将设置为cqlshrc文件中的time_format值。默认格式:%Y-%m-%d %H:%M:%S%z。%Y-%m-%d %H:%M:%S%zTO/FROMMAXATTEMPTS发生错误时的最大重试次数5TO/FROMREPORTFREQUENCY状态显示的频率(以秒为单位)0.25TO/FROMDECIMALSEPdecimal(大数)值的分隔字符英文句号.TO/FROMTHOUSANDSSEP千位数组的分隔符NoneTO/FROMBOOLSTYLE布尔值指示True和False。该值不区分大小写,例如:yes,no和YES,NO相同True,FalseTO/FROMNUMPROCESSES工作进程数16TO/FROMCONFIGFILE指定一个cqlshrc配置文件以设置WITH选项。注意:命令行选项始终会覆盖cqlshrc文件。无,需自行制定TO/FROMRATEFILE将输出统计信息打印到此文件。无,需自行制定TO/FROMORIGIN需要导入导出的数据库是否为开源cassandra,如果是则为true;如果是GaussDB for Cassandra则为falseFalseFROMCHUNKSIZE块大小传递给工作进程。5000FROMINGESTRATE每秒的近似导入速率100000FROMMAXBATCHSIZE导入批处理的最大大小20FROMMINBATCHSIZE导入批处理的最小大小2FROMMAXROWS最大行数。使用“ -1”意味无最大限制-1FROMSKIPROWS要跳过的行数0FROMSKIPCOLS以逗号分隔的要跳过的列名称列表无,需自行制定FROMMAXPARSEERRORS最大全局解析错误数。使用“ -1”意味无最大限制-1FROMMAXINSERTERRORS全局最大插入错误数。使用“ -1”意味无最大限制-1FROMERRFILE用于存储所有未导入的行的文件。如果未设置任何值,则信息存储在import_ ks _ table .err中,其中 ks是键空间,而table是表名。import_ ks _ table .errFROMTTL 生存时间以秒为单位。默认情况下,数据不会过期3600TOENCODING输出字符串类型。UTF-8TOPAGESIZE用于获取结果的页面大小1000TOPAGETIMEOUT页面超时以获取结果10TOBEGINTOKEN用于导出数据的最小token无,需自行制定TOENDTOKEN用于导出数据的最大token无,需自行制定TOMAXREQUESTS每个工作者可以并行处理的最大请求数6TOMAXOUTPUTSIZE输出文件的最大大小,以行数为单位。设置后,超过该值时,输出文件将拆分为多个段。使用“ -1”意味无最大限制-1TOMAXFILESIZE输出文件的最大大小,以kb为单位。设置后,超过该值时,输出文件将拆分为多个段无,需自行制定TOdataformats输出文件格式,当前如果设置值只能选json无,需自行制定TODATATYPE文件格式可选parquet或者orc无,需自行制定TOresultfile导出的详细结果文件无,需自行制定TOwherecondition导出时,指定的导出条件无,需自行制定 5.简单样例展示预置数据:1.创建keyspaceCREATE KEYSPACE cycling WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};2.创建tableCREATE TABLE cycling.cyclist_name (   id UUID PRIMARY KEY,   lastname text,   firstname text) ;3.插入数据INSERT INTO cycling.cyclist_name (id, lastname, firstname)   VALUES (5b6962dd-3f90-4c93-8f61-eabfa4a803e2, 'VOS','Marianne');INSERT INTO cycling.cyclist_name (id, lastname, firstname)   VALUES (e7cd5752-bc0d-4157-a80f-7523add8dbcd, 'VAN DER BREGGEN','Anna');INSERT INTO cycling.cyclist_name (id, lastname, firstname)   VALUES (e7ae5cf3-d358-4d99-b900-85902fda9bb0, 'FRAME','Alex');INSERT INTO cycling.cyclist_name (id, lastname, firstname)   VALUES (220844bf-4860-49d6-9a4b-6b5d3a79cbfb, 'TIRALONGO','Paolo');INSERT INTO cycling.cyclist_name (id, lastname, firstname)     VALUES (6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47, 'KRUIKSWIJK','Steven');INSERT INTO cycling.cyclist_name (id, lastname, firstname)   VALUES (fb372533-eb95-4bb4-8685-6ef61e994caa, 'MATTHEWS', 'Michael'); 从cyclist_name表中导出和导入数据1.仅将cyclist_name表中的id和lastname列导出到CSV文件。COPY cycling.cyclist_name (id,lastname) TO '../cyclist_lastname.csv' WITH HEADER = TRUE ;在当前目录的上层目录中会创建cyclist_lastname.csv文件。如果文件已经存在,则将其覆盖。2.将cyclist_name表中的id和first name列导出到另一个CSV文件。COPY cycling.cyclist_name (id,firstname)  TO '../cyclist_firstname.csv' WITH HEADER = TRUE ;     cyclist_firstname.csv会被新创建出来3.将cyclist_name表中的数据truncate掉TRUNCATE cycling.cyclist_name ;4.查看此时表中无数据SELECT * FROM cycling.cyclist_name ; 5. 导入cyclist_firstname.csv文件COPY cycling.cyclist_name (id,firstname) FROM '../cyclist_firstname.csv' WITH HEADER = TRUE ;6. 校验新导入数据SELECT * FROM cycling.cyclist_name ; 7. 导入cyclist_lastname.csv文件COPY cycling.cyclist_name (id,lastname) FROM '../cyclist_lastname.csv' WITH HEADER = TRUE ; 8.校验数据是否被更新查看发现lastname列被更新 6.导出参数最佳实践NUMPROCESSES这是工作进程的数量,其默认值是计算机上的内核数量减一个,当前未设置上限值。您可以通过dstat,dstat -lvrn 10观察CPU空闲时间,如果存在CPU空闲时间,请使用默认的工作进程数,您可以增加它。增加的同时也需要观察实例的CPU使用情况,建议不超过60%,如果执行机CPU有空闲,而实例CPU已经超过建议值,进一步提升性能则需要扩容PAGESIZE一个整数,指示获取结果的页面大小。默认为1,000。页面大小越大,pagetimeout应该越长。单行数据量比较大时需要调小,单行数据量比较小时可以适当增大该值;该值的最佳效果还取决于执行机批量本地写的能力,如果批量本地写能力很强(如使用华为云obsfs),可适当增大PAGETIMEOUT一个整数,指示获取每个页面的超时(以秒为单位)。默认为10秒。对于较大的页面大小或较大的分区,请增加它。如果发现超时,则应考虑增加此值。如果服务器超时,则会自动启动一个指数退避策略,因此您可能会注意到延迟,但这是为了防止服务器进一步过载。驱动程序还会生成超时,在这种情况下,由于驱动程序不知道服务器稍后是否会丢弃请求或返回结果,因此可能会丢失或重复数据的可能性很小。增大此值对于防止驱动程序生成超时非常有帮助。MAXREQUESTS一个整数,指示每个工作进程可以处理的最大运行中请求数。导出数据时总的并行度=工作进程数*该值。默认值为6。每个请求将导出整个令牌范围的数据MAXOUTPUTSIZE一个整数,指示以行数为单位的输出文件的最大大小。超过此值,输出文件将被拆分为多个段。它的默认值为-1,表示无限制的最大值,因此是唯一的输出文件。可以和MAXFILESIZE同时使用MAXFILESIZE一个整数,指示以字节为单位的输出文件的最大大小,文件最终大小近似于该值。超过此值,输出文件将被拆分为多个段。它的默认值为-1,表示无限制的最大值,因此是唯一的输出文件。可以和MAXOUTPUTSIZE同时使用BEGINTOKEN一个字符串,表示导出数据时要考虑的最小令牌。具有较小令牌的记录将不会导出。默认为空,表示没有最小令牌。ENDTOKEN一个字符串,表示导出数据时要考虑的最大令牌。具有较大令牌的记录将不会导出。默认为空,表示没有最大令牌。7.导入参数最佳实践NUMPROCESSES这是工作进程的数量,其默认值是计算机上的内核数量减一个,当前未设置上限值。您可以通过dstat,dstat -lvrn 10观察CPU空闲时间,如果存在CPU空闲时间,请使用默认的工作进程数,您可以增加它。增加的同时也需要观察实例的CPU使用情况,建议不超过60%,如果执行机CPU有空闲,而实例CPU已经超过建议值,进一步提升性能则需要扩容CHUNKSIZE这是从Feeder进程(从文件读取数据)发送到worker进程的行数;根据数据集的平均行大小,增加此参数的值可能是有利的。MINBATCHSIZE对于每一个chunk,worker进程至少会按照最小batchsize进行batch写入,根据块的大小,群集中的节点数以及每个节点的VNODES数,此值可能需要调整:chunksize越大,此值需要调大MAXBATCHSIZE该值的设置可以尽可能大,但不要超过上限,MAXBATCHSIZE*单行size < batch_size_fail_threshold_in_kb;批大小太大可能会导致警告并最终被拒绝;两个参数在cassandra.yaml中被控制,此行为:batch_size_warn_threshold_in_kb(当前值为5)batch_size_fail_threshold_in_kb(当前值为50)INGESTRATE这个是feeder进程发送数据给worker进程的每秒速率(以行数为单位),通常,除非每秒速率太高,需要限制速率,否则无需更改此值。8公共参数和环境配置推荐²  建议导出时加上以下公共参数以提升统计效率RATEFILE一个文件名,实时速率统计文件RESULTFILE一个文件名,最终导入导出结果的统计信息会记录在里面²  推荐导出时配合使用obsfs文件系统使用指南:https://bbs.huaweicloud.com/forum/thread-178802-1-1.html,使用obsfs文件系统可提升一下两个方面性能:减少执行机导出文件上传到obs或其他机器的时间大幅提升执行机本地批量写的能力,从而提升导出性能
  • [其他] 数据仓库之维度建模介绍-- 未写完,待更新
           数据仓库是一个面向主题的、集成的、非易失的、反应历史变化的数据集合,用于支持管理决策。数据仓库的首要目的是数据集成、将多个分散的、异构的数据源整合到一起,便于后续分析。       数据仓库第一个特征是面向主题的,对于零售商而言,主题域可以是顾客、产品、库存、销售、销售商等,对于生产商而言,主题域可以是产品、订单、销售商、材料单、原材料等。不同类型的公司,其主题是不同的。       数据仓库第二个特征是集成的,其数据可以是从多个不同的数据源传送过来,数据进入数据仓库中后,进行转换汇总等。数据进入数据仓库后,源数据通常会有一些不一致,如不一致的格式,集成后要消除一些不一致性,为用户提供一个统一的数据视图,一致性处理包括命名习惯、关键字结构、度量单位等。       数据仓库第三个特征是非易失的,数据仓库的数据在装载是是以静态快照的方式进行的,后续发生变化后,一个新的快照记录就会写入数据仓库,数据仓库会保存数据的历史变化。新的数据一般加入仓库而不是取代,数据仓库不断吸收新的数据,并与原来的数据进行增量式集成。       数据仓库的第四个特征是随时间变化,即数仓中的每个数据只是在某个时间是准确的。数据仓库中的数据时间期限要远远长于操作型系统中的数据时间期限。操作型数据仓库含有当前值的数据,这些数据的准确性在访问时是有效的,同样当前值的数据能被更新,而数据仓库中的数据仅仅是一系列某个时刻生成的快照。       一个经典的数据仓库数据模型通常划分为3层,操作数据层ODS、中间数据层 dw层、应用数据层ADS。       操作数据层ODS存储了用于分析当前和集成后的运营数据,它的结构与数据来源一般都与数据仓库相同,ODS提供源数据系统中抽取并清洗了的数据,在该层中会同步并结构化数据,保留历史数据并清洗数据。        DW层又细分为DWD明细数据层和高粒度(粒度的概念会在下文中讲解)汇总DWS汇总数据层以及低粒度汇总DMB层,        DWD是业务层和数据仓库的隔离层,为DW层提供来源明细数据,提供业务系统细节数据的长期沉淀,为未来分析类需求的扩展提供历史数据支撑 。数据模型与ODS层一致,不做清洗转换处理,为支持数据重跑可额外增加数据业务日期字段、可按年月日进行分表、用增量ODS层数据和前一天DWD相关表进行merge处理。其为最细粒度的明细层事实表。        DWB保存低粒度汇总加工数据,根据DWD明细数据进行转换,如维度转代理键、身份证清洗、会员注册来源清晰、字段合并、空值处理、脏数据处理、IP清晰转换、账号余额清洗、资金来源清洗等;DWS保存高粒度汇总数据,根据DWB层数据按各个维度ID进行高粒度汇总聚合,如按交易来源,交易类型进行合。                     ADS层存放数据产品的统计指标数据,根据DW和ODS层数据加工生成,可以直接用于BI报表展示。       三层分层建模的好处       减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。       清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。       数据血缘追踪:简单来讲可以这样理解,我们最终给业务诚信的是一能直接使用的张业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。       把复杂问题简单化。讲一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。       同时可以清洗脏数据并屏蔽业务影响,不必改一次业务就需要重新接入数据。       维度建模(dimensionality modeling) DM 是数据仓库工程中最经典的建模方式,其经典的代表是星形模型,星型模型时,冗余的多对一属性会被移动到单独的维度表中,维度表被标准化为第三范式,星型模型由一个事实表和一组维度表组成,维度表之间没有关联,以事实表为核心,维度表围绕核心呈星型分布。       在一些场景下会使用雪花模型,每个维度模型都由一个带有组合主关键字的表和一系列较小的表组成,前者称为事实表,后者称为维表,每一个维表有一个主关键字,它对应着事实表中的组合关键字中的一项,维表可以向外连接关联多个子维表。雪花模型的事实表在中央,周围是规范的维表。       星型和雪花模型都是单事实表对应多维表的方式,但在很多情况下维度空间内的事实表不止一个,而一个维表也可能被多个事实表用到即共享维度信息。很多时候维度建模都采用的是星座模式。星座模型的事实表在中央,周围是规范和非规范的维表。星座模式使用了非规范化的星型模型和规范化的雪花模型的混合体。       星型、雪花、星座模型关系如下:雪花模式是将星型模式的维表进一步划分,使各维表均满足规范化设计。而星座模式则是允许星形模式中出现多个事实表。事实表的技术基础        发生在现实世界的操作型事件,其产生的可度量的数据值,存储在事实表中,事实表行对应一个度量事件。除数字度量外,事实表包含外键,用于与之关联的维度,也可以包含可选的退化的维度键和日期等。       事实表中的数字度量可分为可加、半可加 、不可加事实,下文中会结合业务讲述该三类度量。一致性事实是如果某些度量出现在不同的事实表中,针对该事实的计数定义是相同的。       事务事实表的一行对应空间或时间上的某点的度量事件,事务事实表可以稠密或稀疏,仅当存在度量时才会建立行。度量数字事实必须与事务粒度保持一致。对于单事务事实表,一个业务过程建立一个事实表,反应一个业务过程的事实,多事务事实表,在同一个事实表中反应多个业务过程。多个业务过程是否放在一个事实表中,要分析不同的业务过程之间的相似性和业务源系统。如零售交易中的下单、支付、成功完结三个业务过程存在相似性,属于订单处理的一环,可以放在同一个事务事实表中。事务事实表可以很好的跟踪一个事件,并对其进行度量分析。周期性快照事实表       快照事实表在确定的时间间隔内对实体的度量进行抽样,可以通过确认事实表的快照粒度和采样的状态度量来创建快照事实表。累计快照事实表       累计快照事实表的行汇总了发生在过程开始和结束之间的度量事件,管道和工作流过程具有定义的开始点、标准的中间过程、定义的结束点。累计快照中的一行,订单系统中对应一个具体的订单,当订单产生是插入一行,当管道过程发生时,累计事实表行被访问并修改。除了日期外键和每个关键过程关联外,累计事实表中包含其他维度和可退化的维度的外键。三种事实表的对比 事务事实周期快照累计快照时间离散事务时间点有规律可预测间隔产生快照以时间跨度不确定的不断变化的工作流日期维度事务日期快照日期业务流程涉及的多个日期粒度每个是事务一行每行代表一个时间周期的实体每行代表一个实体的生命周期事实事务事实累计事实业务过程事实和时间间隔的事实事实表加载插入插入插入与更新事实表更新不更新不更新变更时更新 无事实事实表       无事实事实表是不含事实或度量的事实表,其可以用来支持业务过程的度量。可以用其分析发生了什么。其主要有两种,一种是事件类,记录事件的发生。第二种是条件、范围、资格类的。记录维度与维度多对多之间的关系。聚集型事实表        聚集型事实表通过汇总明细粒度数据来获得改进查询性能的效果,将使用频繁的公用数据聚集成公共汇总层,聚集表的维度和度量需要和查询明细的粒度数据一致。确认聚集维度后通过一致性上钻获取聚集事实表。合并事实表将来自多过程的事实横向钻取,以相同粒度一致性维度合并放在一个单一的事实表中。  维度表技术基础       每个维度表都包含单一的主键列,维度表的主键可以作为与之关联的任何事实表的外键。       多层次维度包含不止一个自然层次,例如日历日期维度,它可以从天到周到月到年的层次进行划分,位置密集型维度可以包含多个地理层次。       日历日期维度是连接到实际事实表使能够按照日期、月份、财务周期和日历上的特殊日期进行导航。        杂项维度是事务型商业工程产生的一系列混杂的、低粒度的标识和指示器。单独的将不同的维度合并到一起的杂项维度。       管理桥接表·       支架维度包含对其他维度的引用,被引用的辅助维度称为支架维度,外支架是联结到其他维度表的维度表。并不是完全标准化的星型模型。退化维度       退化维度没有自己的属性,但要将其放入事实表中来对这一现状进行建模,但没有关联的维度表,退化维度常用于交易和累计快照事实表中。维度层面上的操作有向上、向下、横向、旋转等       向上钻取就是去掉分组列,获取汇总数据。比如把四维销售数据(所在地、时间、类型、分店维)上卷到(所在地、时间、类型维)三维销售维度。       向下钻取意味着给我更多的详情,是向上钻取的逆操作,从事实表中请求更为精细和更细粒度的数据,即增一个维度属性创建一个分组列。通过维度引入执行下钻,比如把三维销售数据(所在地、时间、类型维)下钻到(所在地、时间、类型、分店维)四维销售数据。       横向钻取是相同的粒度链接两个或多个事实表的过程。也可称为跨表钻取。       旋转指能旋转行列数据,换一个视角看相同的数据,例如将所在地作为x轴,时间作为y轴,显示销售收入,可以旋转为时间作为x轴,所在地作为y轴的操作。       开发一个数据仓库主要有两种方法学,Inmon的企业信息工厂(CIF)和Kimball的业务维度生命周期,kimball业务维度生命周期如下图。本文主要介绍Kimball的业务维度生命周期中的维度建模阶段。一个维度模型的创建可以通过两个阶段实现,第一个阶段是创建高层维度模型,第二个阶段通过识别模型的维度属性向模型中添加细节。        本文以零售和库存业务为例。        第一个阶段的设计可以划分为以下几个步骤。如图1. 选择业务过程     该活动的结果创建一个数据仓库总线矩阵。     我们需要采用数据仓库总线架构来构建一种架构化、增量式的数据仓库。     总线矩阵采用组织的业务过程为矩阵行,重要的是业务过程,使用公共维度来表示矩阵的列,列有助于创建核心维度表。                                                               零售业务中的交易流程,数据要能够分析被销售的产品,在那个日期、那个商店、那个渠道、何种促销环境下被销售。2. 确认粒度       粒度决定事实表中记录什么,即事实表中每一行表达的层次细节。比如客户销售事务上的每个产品扫描到一行、仓库中每种材料库存水平的每日快照采用一行表示、医生开具的票据的列表内容项采用一行表示。针对不同事实表粒度,要建立不同的事实表,但同一事实表中不要混用多种不同的粒度。粒度是指数据仓库的数据单位中保存数据的细化或综合程度的级别。细化程度越高,粒度级就越小;相反,细化程度越低,粒度级就越大。粒度影响存放在数据仓库 中的数据量的大小,同时影响数据仓库所能回答的查询类型。在数据仓库中的数据量大小与查询的详细程度之间要作出权衡。       原子粒度数据具有强大的多维性,事实度量越详细,越能获得更确定的事实表。也可以通过汇总粒度来表示对原子数据的聚集,选择了较高级别的维度,就限制了获取更细节维度的可能,无法实现用户下钻细节的需求。3. 选择维度        选好业务过程并确定好粒度后,就可以确认维度了,维度设置了对事实表的事实提问的上下文。简单上线文信息在以往使用字典、目录、系统监视器等管理的。复杂上下文信息描述的是和简单上下文信息相同的数据,但是从一个不同的侧面描述。外部上下文信息是那些公司以外的随时间变化的信息方面起重要作用的信息。在零售业务中,日期、门店、产品、促销、渠道、支付方式都可以作为其维度信息。4. 选择事实       事实表的粒度决定哪些事实在维度模型中可以使用。事实表包含与其描述过程中有关的所有事实。零售中的事实可以包括销售数量、单价、折扣、价格等事实。完全可加事实如销售数量、销售、成本额、利润。不可加事实如利润率、单价等。半可加事实库存、余额等。第二个阶段确定维度模型的所有维度属性       此阶段涉及添加一些属性,他们是在业务需求分析阶段,由用户指出的在分析所选的业务流程中所必须用到的属性,维度模型的有用性维度表中的属性的范围和性质决定。       选择数据仓库的持续时间,持续时间测定事实表回溯多长时间。       跟踪缓慢变化的维度,数据仓库的一个重要特征是反映历史变化,如何处理维度的变化时维度设计的重要工作,维度的属性不是静态的,它是随着时间流逝发缓慢的变化,与事实表的快速增长相比,维度变化相对缓慢。缓慢维度变化主要有三种类型,类型一、重写纬度值,用修改的维度属性覆盖旧值。类型二、插入新的维度行,使得在同一个维度记录中可以同时访问该属性的新旧两个值。类型三、添加新的维度列,创建一个新的维度记录。维度建模的优缺点优点:        数据冗余相对小,结构清晰,便于做数据分析,维度建模是可预测的标准框架,允许数据库系统和最终用户查询工具在数据方面生成强大的假设条件,星型连接模型可以忍受不可预知的用户行为变化,切换使用不同的维度查询很方便。缺点:       与ER建模相比,维度建模反范式,浪费存储,不易扩展,构建前需要大量数据预处理,业务发生变化时,需要重新进行维度定义,维度变化对数据更新量大,预处理过程中,会导致数据的大量冗余,同时使用成本相对较高,查询时需要关联多张表。单纯的依靠维度建模,不能保证数据来源的一致性和准确性。数仓与数据湖的区别      很多时候,数据仓库和数据湖被认为是等同的,二者用到的大数据组件技术栈也很相似,但二者代表企业要打成的不同目标。数据湖数据仓库能够处理所有类型的数据,结构化数据、半结构化数据、非结构化数据,数据类型依赖于数据源系统的原始数据类型只能对结构化数据进行处理,而且schema信息必须事先定义数据湖包含更多相关信息,能够为企业挖掘新的运营需求数据仓库通常用来存储和维护长期数据,数据可以被按需访问拥有足够强的算力用于处理和分析所有类型的数据,分析后的数据会被存储起来供使用处理结构化数据,将他们转化为多维数据,或者报表,以满足后续报表和数据分析需求。  后记     流批一体、湖仓一体大势所趋,体验数据湖请来华为云EI-数据湖探索 DLI。参考:     数据仓库工具箱     数据库系统设计、实现与管理
  • [技术干货] 【云小课】EI第17课 大数据融合分析:GaussDB(DWS)轻松导入MRS-Hive数据源
    大数据融合分析时代,GaussDB(DWS)如需访问MRS数据源,该如何实现?本期云小课带您开启MRS数据源之门,通过远程读取MRS集群Hive上的ORC数据表完成数据导入DWS。准备环境需确保MRS和DWS集群在同一个区域、可用区、同一VPC子网内,确保集群网络互通。基本流程1、创建MRS分析集群(选择Hive组件)。2、通过将本地txt数据文件上传至OBS桶,再通过OBS桶导入Hive,并由txt存储表导入ORC存储表。3、创建MRS数据源连接。4、创建外部服务器。5、创建外表。6、通过外表导入DWS本地表。创建MRS分析集群登录华为云控制台,选择“EI企业智能 > MapReduce服务”,单击“购买集群”,选择“自定义购买”,填写软件配置参数,单击“下一步”。表1 软件配置参数项取值区域华北-北京四集群名称MRS01集群版本MRS 3.0.5集群类型分析集群填写硬件配置参数,单击“下一步”。表1 硬件配置参数项取值计费模式按需计费可用区可用区2虚拟私有云vpc-01子网subnet-01安全组自动创建弹性公网IP10.x.x.x企业项目defaultMaster节点打开“集群高可用”分析Core节点3分析Task节点0填写高级配置参数,单击“立即购买”,等待约15分钟,集群创建成功。表1 高级配置参数项取值标签test01委托保持默认即可告警保持默认即可规则名称保持默认即可主题名称保持默认即可Kerberos认证默认打开用户名admin密码设置密码,例如:Huawei@12345。该密码用于登录集群管理页面。确认密码再次输入设置admin用户密码登录方式密码用户名root密码设置密码,例如:Huawei_12345。该密码用于远程登录ECS机器。确认密码再次输入设置的root用户密码通信安全授权勾选“确认授权”准备MRS的ORC表数据源本地PC新建一个product_info.txt,并拷贝以下数据,保存到本地。100,XHDK-A-1293-#fJ3,2017-09-01,A,2017 Autumn New Shirt Women,red,M,328,2017-09-04,715,good 205,KDKE-B-9947-#kL5,2017-09-01,A,2017 Autumn New Knitwear Women,pink,L,584,2017-09-05,406,very good! 300,JODL-X-1937-#pV7,2017-09-01,A,2017 autumn new T-shirt men,red,XL,1245,2017-09-03,502,Bad. 310,QQPX-R-3956-#aD8,2017-09-02,B,2017 autumn new jacket women,red,L,411,2017-09-05,436,It's really super nice 150,ABEF-C-1820-#mC6,2017-09-03,B,2017 Autumn New Jeans Women,blue,M,1223,2017-09-06,1200,The seller's packaging is exquisite 200,BCQP-E-2365-#qE4,2017-09-04,B,2017 autumn new casual pants men,black,L,997,2017-09-10,301,The clothes are of good quality. 250,EABE-D-1476-#oB1,2017-09-10,A,2017 autumn new dress women,black,S,841,2017-09-15,299,Follow the store for a long time. 108,CDXK-F-1527-#pL2,2017-09-11,A,2017 autumn new dress women,red,M,85,2017-09-14,22,It's really amazing to buy 450,MMCE-H-4728-#nP9,2017-09-11,A,2017 autumn new jacket women,white,M,114,2017-09-14,22,Open the package and the clothes have no odor 260,OCDA-G-2817-#bD3,2017-09-12,B,2017 autumn new woolen coat women,red,L,2004,2017-09-15,826,Very favorite clothes 980,ZKDS-J-5490-#cW4,2017-09-13,B,2017 Autumn New Women's Cotton Clothing,red,M,112,2017-09-16,219,The clothes are small 98,FKQB-I-2564-#dA5,2017-09-15,B,2017 autumn new shoes men,green,M,4345,2017-09-18,5473,The clothes are thick and it's better this winter. 150,DMQY-K-6579-#eS6,2017-09-21,A,2017 autumn new underwear men,yellow,37,2840,2017-09-25,5831,This price is very cost effective 200,GKLW-l-2897-#wQ7,2017-09-22,A,2017 Autumn New Jeans Men,blue,39,5879,2017-09-25,7200,The clothes are very comfortable to wear 300,HWEC-L-2531-#xP8,2017-09-23,A,2017 autumn new shoes women,brown,M,403,2017-09-26,607,good 100,IQPD-M-3214-#yQ1,2017-09-24,B,2017 Autumn New Wide Leg Pants Women,black,M,3045,2017-09-27,5021,very good. 350,LPEC-N-4572-#zX2,2017-09-25,B,2017 Autumn New Underwear Women,red,M,239,2017-09-28,407,The seller's service is very good 110,NQAB-O-3768-#sM3,2017-09-26,B,2017 autumn new underwear women,red,S,6089,2017-09-29,7021,The color is very good 210,HWNB-P-7879-#tN4,2017-09-27,B,2017 autumn new underwear women,red,L,3201,2017-09-30,4059,I like it very much and the quality is good. 230,JKHU-Q-8865-#uO5,2017-09-29,C,2017 Autumn New Clothes with Chiffon Shirt,black,M,2056,2017-10-02,3842,very good登录OBS控制台,单击“创建桶”,填写以下参数,单击“立即创建”。表1 桶参数参数项取值区域华北-北京四数据冗余存储策略单AZ存储桶mrs-datasource存储类别标准存储桶策略私有默认加密关闭归档数据直读关闭企业项目default标签-等待桶创建好,单击桶名称,选择“对象 > 上传对象”,将product_info.txt上传至OBS桶。切换回MRS控制台,单击创建好的MRS集群名称,进入“概览”,单击“IAM用户同步”所在行的“单击同步”,等待约5分钟同步完成。回到MRS集群页面,单击“节点管理”,单击任意一台master节点,进入该节点页面,切换到“弹性公网IP”,单击“绑定弹性公网IP”,勾选已有弹性IP并单击“确定”,如果没有,请创建。记录此公网IP。确认主master节点。使用SSH工具以root用户登录以上节点,root密码为Huawei_12345,切换到omm用户。su - omm执行以下命令查询主master节点,回显信息中“HAActive”参数值为“active”的节点为主master节点。sh ${BIGDATA_HOME}/om-0.0.1/sbin/status-oms.sh使用root用户登录主master节点,切换到omm用户,并进入Hive客户端所在目录。su - ommcd /opt/client在Hive上创建存储类型为TEXTFILE的表product_info。在/opt/client路径下,导入环境变量。source bigdata_env登录Hive客户端。beeline依次执行以下SQL语句创建demo数据库及表product_info。CREATE DATABASE demo;USE demo;DROP TABLE product_info; CREATE TABLE product_info ( product_price int not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt int , product_comment_time date , product_comment_num int , product_comment_content varchar(200) ) row format delimited fields terminated by ',' stored as TEXTFILE将product_info.txt数据文件导入Hive。切回到MRS集群,单击“文件管理”,单击“导入数据”。OBS路径:选择上面创建好的OBS桶名,找到product_info.txt文件,单击“是”。HDFS路径:选择/user/hive/warehouse/demo.db/product_info/,单击“是”。单击“确定”,等待导入成功,此时product_info的表数据已导入成功。创建ORC表,并将数据导入ORC表。执行以下SQL语句创建ORC表。DROP TABLE product_info_orc; CREATE TABLE product_info_orc ( product_price int not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt int , product_comment_time date , product_comment_num int , product_comment_content varchar(200) ) row format delimited fields terminated by ',' stored as orc;将product_info表的数据插入到Hive ORC表product_info_orc中。insert into product_info_orc select * from product_info;查询ORC表数据导入成功。select * from product_info_orc;创建MRS数据源连接登录DWS管理控制台,单击已创建好的DWS集群,确保DWS集群与MRS在同一个区域、可用分区,并且在同一VPC子网下。切换到“MRS数据源”,单击“创建MRS数据源连接”。选择前序步骤创建名为的“MRS01”数据源,用户名:admin,密码:Huawei@12345,单击“确定”,创建成功。创建外部服务器使用Data Studio连接已创建好的DWS集群。新建一个具有创建数据库权限的用户dbuser:CREATE USER dbuser WITH CREATEDB PASSWORD "Bigdata@123";切换为新建的dbuser用户:SET ROLE dbuser PASSWORD "Bigdata@123";创建新的mydatabase数据库:CREATE DATABASE mydatabase;执行以下步骤切换为连接新建的mydatabase数据库。在Data Studio客户端的“对象浏览器”窗口,右键单击数据库连接名称,在弹出菜单中单击“刷新”,刷新后就可以看到新建的数据库。右键单击“mydatabase”数据库名称,在弹出菜单中单击“打开连接”。右键单击“mydatabase”数据库名称,在弹出菜单中单击“打开新的终端”,即可打开连接到指定数据库的SQL命令窗口,后面的步骤,请全部在该命令窗口中执行。为dbuser用户授予创建外部服务器的权限:GRANT ALL ON FOREIGN DATA WRAPPER hdfs_fdw TO dbuser;其中FOREIGN DATA WRAPPER的名字只能是hdfs_fdw,dbuser为创建SERVER的用户名。执行以下命令赋予用户使用外表的权限。ALTER USER dbuser USEFT;切换回Postgres系统数据库,查询创建MRS数据源后系统自动创建的外部服务器。SELECT * FROM pg_foreign_server;返回结果如: srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions --------------------------------------------------+----------+--------+---------+------------+--------+--------------------------------------------------------------------------------------------------------------------- gsmpp_server | 10 | 13673 | | | | gsmpp_errorinfo_server | 10 | 13678 | | | | hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca | 16476 | 13685 | | | | {"address=192.168.1.245:9820,192.168.1.218:9820",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs} (3 rows)切换到mydatabase数据库,并切换到dbuser用户。SET ROLE dbuser PASSWORD "Bigdata@123";创建外部服务器。SERVER名字、地址、配置路径保持与8一致即可。CREATE SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca FOREIGN DATA WRAPPER HDFS_FDW OPTIONS ( address '192.168.1.245:9820,192.168.1.218:9820', //MRS管理面的Master主备节点的内网IP,可与DWS通讯。 hdfscfgpath '/MRS/8f79ada0-d998-4026-9020-80d6de2692ca', type 'hdfs' );查看外部服务器。SELECT * FROM pg_foreign_server WHERE srvname='hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca';返回结果如下所示,表示已经创建成功: srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions --------------------------------------------------+----------+--------+---------+------------+--------+--------------------------------------------------------------------------------------------------------------------- hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca | 16476 | 13685 | | | | {"address=192.168.1.245:9820,192.168.1.218:29820",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs} (1 row)创建外表获取Hive的product_info_orc的文件路径。登录MRS管理控制台。选择“集群列表 > 现有集群”,单击要查看的集群名称,进入集群基本信息页面。单击“文件管理”,选择“HDFS文件列表”。进入您要导入到GaussDB(DWS)集群的数据的存储目录,并记录其路径。创建外表。 SERVER名字填写创建的外部服务器名称,foldername填写查到的路径。DROP FOREIGN TABLE IF EXISTS foreign_product_info; CREATE FOREIGN TABLE foreign_product_info ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca OPTIONS ( format 'orc', encoding 'utf8', foldername '/user/hive/warehouse/demo.db/product_info_orc/' ) DISTRIBUTE BY ROUNDROBIN;执行数据导入创建本地目标表。DROP TABLE IF EXISTS product_info; CREATE TABLE product_info ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) with ( orientation = column, compression=middle ) DISTRIBUTE BY HASH (product_id);从外表导入目标表。INSERT INTO product_info SELECT * FROM foreign_product_info;查询导入结果。SELECT * FROM product_info;
  • [存储] Hive分布式数据仓库(2)
    在Hive流行之前,企业大多采用传统的并行数据仓库架构。传统的数据仓库一般采用国外知名厂商的大型服务器和成熟的解决方案,不仅价格昂贵且可拓展性较差,而且平台工具与其他厂商难以适配,用户操作体验也比较差、开发效率不高,当数据量达到TB级别后基本无法得到很好的性能。而且,传统数据仓库基本只擅长处理结构化或半结构化数据,对于非结构化数据的处理并不能很好地支持。Hive的出现,为企业提供了更加廉价且优质的解决方案。Hive的主要组件包括UI组件、Driver组件(Complier、Optimizer和Executor)、Metastore组件、JDBC/ODBC、Thrift Server和Hive Web Interface(HWI)等,接下来分别对这几个组件进行介绍。(1) Drvier组件: 该组件是Hive的核心组件,该组件包括Complier(编译器)、Optimizer(优化器)和Executor(执行器),它们的作用是对Hive SQL语句进行解析、编译优化、生成执行计划,然后调用底层MR计算框架。(2) MetaStore组件: 该组件是Hive用来负责管理元数据的组件。Hive的元数据存储在关系型数据库中,其支持的关系型数据库有Derby和Mysql,其中Derby是Hive默认情况下使用的数据库,它内嵌在Hive中,但是该数据库只支持单会话,在生产中并不适用,在我们日常的开发中,需要支持多会话,因此采用Mysql作为元数据库,Hive内部对Mysql提供了很好的支持。(3) Thrift Server:该组件提供JDBC和ODBC接入的能力,用来进行可扩展且跨语言的服务开发。Hive集成了该服务,能让不同的编程语言调用Hive的接口。(4) Web Interface:该组件是Hive客户端提供的一种通过网页方式访问Hive所提供的服务。
  • [存储] Hive分布式数据仓库(1)
           Hive 是基于Hadoop构建的一套数据仓库分析系统,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用。       Hive十分适合对数据仓库进行统计分析,Hive支持了绝大多数的语句如DDL、DML以及常见的聚合函数、连接查询、条件查询。它还提供了一系列的方法,进行数据提取转化加载,用来存储、查询和分析存储在Hadoop中的大规模数据集,并支持UDF(User-Defined Function)、UDAF(User-Defnes AggregateFunction)和UDTF(User-Defined Table-Generating Function),也可以实现对map和reduce函数的定制,为数据操作提供了良好的伸缩性和可扩展性。       Hive不适合用于联机(online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。Hive的特点包括:可伸缩(在Hadoop的集群上动态添加设备)、可扩展、容错、输入格式的松散耦合。
  • [集群&DWS] 保障业务连续性,GaussDB(DWS)高可用有妙招
    GaussDB(DWS)所有内部组件CN、DN、GTM、CM等采用多活或主备设计,通过集群管理进行故障检测和切换。在硬件层面,除了最基本的宕机、断网的直接故障外,GaussDB(DWS)还针对夯死、慢节点、亚健康等僵而不死的复杂场景,做了大量的建模和针对性优化,能够实现故障的准确探测和自愈。并且还提供了双集群容灾能力,通过跨AZ、跨Region的物理复制,实现异构集群容灾。  GaussDB(DWS)高可用之数据复制  GaussDB(DWS)高可用之备机重建  GaussDB(DWS)高可用之CN&GTM组件高可用介绍  GaussDB(DWS)高可用之主备从HA技术  GaussDB(DWS)高可用之单点故障业务不中断  华为云GaussDB(DWS)数据仓库以2048大规模节点通过信通院评测认证
  • [集群&DWS] 负载管理:让“笨”的数仓“聪明”起来
    从四个核心技术为你解密,GaussDB(DWS)负载管理功能如何做好计算/存储资源的划分,让你的数仓“聪明”起来。 GaussDB(DWS)负载管理核心技术解密一:全景图及解决的场景 GaussDB(DWS)负载管理核心技术解密二:白话历史资源监视 GaussDB(DWS)负载管理核心技术解密三:工作负载管理测试分析 GaussDB(DWS)负载管理核心技术解密四:工作负载计划解密
  • [集群&DWS] GaussDB(DWS)负载管理核心技术解密四:工作负载计划解密
           工作负载计划的需求来源于客户,客户有多种业务,期望每个时间段的主导业务能分配更多的资源,以支撑业务更好的运行。客户明确希望我们能够提供一种提前配置好各个时间段各个队列的资源配比,到点自动切换各队列资源配比或根据实际情况手动切换的功能,并能够导入导出这种配置以便测试环境测好的配置可以应用到生产环境或者其他集群环境。工作负载计划概览1.1 添加工作负载计划1.2 修改阶段1.3 查看计划执行日志1.4 手动切换计划阶段       工作负载计划是多个工作负载队列的自由组合,通过配置负载队列来配置资源池保证系统资源的可控。配置资源池之后能强制用户发送的请求所消耗的CPU,内存不能超过限制,限制了资源使用量,隔离了失控查询对系统的影响,我们资源管理在一个多用户 高并发的环境控制不同的工作负载对内存CPU 磁盘空间作业个数,使得系统能得到可预测性的控制和保证,减少资源抢占引起的超时等待,防止资源耗尽,资源使用更合理。       内存方面:集群有一个CN会作为中心协调节点(CCN),用于收集和调度作业执行。查询语句到不同的CN之后,由优化器估算作业大小,由CCN进行控制作业释放下发,以及何时唤醒需要运行的作业。设置工作负载队列内存大小,来限制所消耗内存可以保证用户使用不超过负载管理的限制;另外由于linux系统会保护一些系统进程而将其他进程kill 释放资源,这是操作系统的OOM机制,我们负载管理可以自动控制作业使用的内存,保证数据库避免OOM,保护数据库集群可以正常运行;       CPU方面:管控在一个机器上运行多个可能消耗大量资源的程序我们不希望出现某个程序占据了所有的资源导致程序无法正常运行,或者造成系统假死无法维护。在这里我们使用了原生的Cgroup的机制。负载管理提供了一种可以按照权重比率弹性分配CPU时间资源的手段:CPU繁忙的时候保证每个资源池的作业能拿到相对设置CPU大小比例的CPU,CPU空闲时保证CPU的利用率到100%,并且保证CPU的资源隔离;       磁盘管控方面:通过限制用户的使用空间大小来保证集群用户作业的可执行性,执行作业超过空间设置,会取消作业,并且程序会定期对用户空间进行修正,保证页面拿到的用户监控使用磁盘空间大小的准确;       工作负载计划基于工作负载队列对数据仓库作业进行管控,可以让有更好的客户体验,可以灵活定制业务的资源如何去管控 ,实现系统负载的均衡,避免业务争取资源,实现所有作业的和谐共处,达到资源利用最优。
  • [集群&DWS] GaussDB(DWS)负载管理核心技术解密一:全景图及解决的场景
    DWS工作负载管理概述       在实际的业务场景中,使用DWS的客户可能会同时使用多个用户同时运行查询作业,这其中有些查询可能会非常复杂,此时如果对数据库资源未做控制,这些复杂作业的查询容易占用大部分的集群资源并长时间运行,从而影响其他查询的性能,使其不得不等待哪些复杂作业执行完成。                                     其实在上述场景中,我们完全可以对这些执行复杂作业的用户进行分组,对这些用户进行合理的资源限制,使在可接受的执行时间范围内使用一定的资源执行这些复杂查询,同时划分出部分资源给那些查询消耗没那么大的用户,这样在部分用户执行复杂作业的同时,另一部分用户的作业也不会受到太大影响。                                                              这就是DWS工作负载管理多队列资源管控的思想模型,客户可以根据自己的业务特点预先创建好多个工作负载队列,对每个队列配置好可以使用的资源上限,然后为每种业务创建好数据库用户并添加到对应的队列中,这样每次这些不同的用户在提交作业的时候都会被分配到对应的队列中,只能使用该队列中拥有的资源执行作业,队列资源不足时,该查询将在该队列中排队等待执行,各个队列之间资源个各自隔离,各不冲突,这样当一些数据库用户在自己队列中执行一些非常耗时的查询作业时,其他用户在各自的队列同时在执行一些简单或者有自己业务特点的作业,这些作业互不干扰。                                                               工作负载管理功能以队列为资源承载点,目前可以配置队列的CPU时间片占比、内存占比、并发(复杂查询并发数)以及磁盘空间大小(永久表空间)等资源。       CPU资源配比为队列可使用的最小时间片占比,当某个队列A的CPU负载超限并且有某个队列B恰好空闲时,队列A可以暂时使用空闲队列B的CPU资源,但是一旦空闲队列B开始对CPU资源有诉求时,将会收回“出借”给队列A的CPU资源。这种CPU控制方式我们称之为CPU配额控制,即可以保证至少有配比的资源可用。       DWS在创建集群时会根据集群中的节点规格为每个DN计算好可用的内存大小max_process_memory,DN在启动时会一次性申请max_process_memory大小的内存,DWS会在此基础上,根据每个队列的内存配比,对作业使用的内存进行限制。队列中所有数据库用户共享队列内存,并且执行作业可消耗的内存资源不超过队列的内存配比。       DWS目前只支持永久表空间的存储资源限制,队列中所有数据库用户共享队列的存储资源,并且可使用的永久表空间大小不超过队列配置的存储资源大小。       队列的并发数指的是队列内多有数据库用户可同时执行的作业数,作业数达到并发数限制之后,再提交的作业会在队列中排队等待执行。DWS负载管理页面介绍页面概览       DWS负载管理页面主要包括工作负载管理配置区域、工作负载队列列表区域以及工作负载队列详情展示区域,工作负载管理配置用来管理工作负载功能的全局配置,包括工作负载开关和全局最大并发数的配置(每个CN的最大并发数);工作负载队列列表区域显示所有已创建的工作队列,可以在这里添加队列;队列详情区域包括队列的短查询配置、资源配置、异常规则配置以及队列中数据库用户的管理。添加队列        添加一个工作负载队列并配置相应的资源      修改队列        修改一个队列资源配比        向队列中添加数据库用户        向队列中添加数据库用户,以限制该用户执行作业时消耗的资源占比        从队列中移除数据库用户        从队列中将已添加的某个数据库用户移除,每个数据库用户只能添加到一个队列中,从队列中移除之后可再添加至其他队列中               作为工作负载管理系列的开端,以上就是DWS工作负载管理的基本使用场景介绍以及基础功能概览,后续我们会陆续推出对CPU、内存、并发、磁盘等单项资源管控机制深度解密的系列博文,敬请关注。
  • [其他] 华为云GaussDB(DWS)数据仓库以2048大规模节点通过信通院评测认证
          随着移动互联网、IoT、人工智能等技术的迅速发展,数据产生的规模空前增长,据知名咨询机构统计,预计未来5年数据规模年均增速达30%,面对快速膨胀的数据规模,各类企业、机构需要更快、更全面的掌握分析数据,挖掘内在价值,支撑经营决策和优化管理,数据仓库作为核心查询分析平台,必须要具备大规模集群能力,也是数据库厂商需要突破的核心技术点之一。      12月18日,由中国信息通信研究院、中国通信标准化协会、北京市大数据中心联合主办的“2020数据资产管理大会”在北京拉开帷幕,会上信通院为通过大数据、数据库等能力评测的产品颁发证书。华为云GaussDB(DWS)数据仓库以单集群2048节点的超大规模,满分通过测试认证,是迄今为止信通院认证的最大规模分布式数据库集群,刷新了历史记录,树立了业界新标杆。      华为云GaussDB(DWS)为各企业用户提供最佳性能、按需扩展、稳定可靠的企业级数据仓库,满足客户超大规模数据的高性能查询分析诉求。在本次大规模集群测试评估中,华为云GaussDB(DWS)一次性通过50项测试用例,包括27项必选用例和23项可选用例,交出了完美的答卷。      大规模数据仓库集群不仅仅是将众多服务器“攒”起来,更需要解决大并发复杂查询下的通信连接风暴问题。并且在数千节点的集群中,平均每天都会有硬件故障发生,如何应对“硬件不可靠”带来的问题?如何在硬件亚健康情况下数据仓仍能提供稳定的性能,如何在操作系统“软死”情况下数据仓库不出现卡顿、无响应等问题,是技术面临的极大挑战。在2048节点大规模集群认证的背后,是GaussDB(DWS)强大“硬核科技”的表现。一、Multi-Streams多流通信技术      在2048节点规模下,集群进行全并行数据交换时,集群内可达百亿级的并行连接,出现通信连接风暴,已远远超出TCP连接端口号和socket文件句柄上限。      GaussDB(DWS)自研的Multi-Streams多流通信技术,将连接数提升5个数量级,突破物理机TCP连接端口限制,能够支持集群内百亿级通信连接,并且理论支持节点数无上限。      Multi-Streams多流通信采用逻辑连接技术,避免了TCP物理连接的三次握手的机制,单数据节点建连性能达到100万次/s,提升20倍。      该技术基于全异步无阻塞代理通信架构,支持跨逻辑连接的socket合并,将网络吞吐能力提升3倍。二、高可用设计及集群管理技术      GaussDB(DWS)设计之初,即充分考虑高可用性,其具备多层级高可用及容灾能力,在进程级、节点级、集群级出现软硬件异常的情况下具备平滑处理能力。      在棘手的硬件亚健康、“软死”问题上,GaussDB(DWS)具备完善的智能检测和处理机制,能够实时监测任意节点状态,包括服务器亚健康状态、磁盘慢盘、静默损坏等等场景,通过自动感知、剔除、平滑切换等高可用策略,提高业务的连续性。      并且,在物理组件发生故障的情况下,Server端Multi-Retries技术能够大幅减少故障失败的业务感知,保障业务持续运行。      在集群管理上,针对超大节点数场景,通过逻辑重构,实现集群起停的全并行处理,2048节点规模下具备分钟级起停能力。三、大规模场景下的并行数据备份恢复技术      完全在线:数据备份期间,采用全程无加锁技术,任何业务SQL、包括DDL均不受影响      多层级并行极速备份:每节点独立多并发、多通道备份,提供10PB级数据快速备份恢复性能      全局一致性快照:集群级全局一致性快照,数据强一致性保证      细粒度数据恢复:支持多粒度数据恢复,满足客户误删、个别表损坏等紧急恢复需求。      得益于包括以上三点在内的一系列核心技术,华为云GaussDB(DWS)一举通过信通院2048节点大规模分布式分析型数据库评测,成为国内首个单集群突破两千的商用数据仓库产品。      华为云GaussDB(DWS)数据仓库已广泛应用于金融、政府、运营商、交通、物流、互联网等领域,服务于全球1000+客户。GaussDB(DWS)践行"平台+生态"战略,联合500+合作伙伴,为各行业提供竞争力的数据仓库解决方案。
  • [其他] GaussDB(DWS)【扩容】扩容在23%时失败,裸机频被繁备拉起释放又重试
    问题现象:    扩容在23%时失败,裸机频被繁备拉起释放又重试问题版本:    HCSO DWS 8.1.1.100问题分析:1.登录后台数据库获取报错任务,jobId,Select task.* from taskmgr_task as task left outer join taskmgr_job as job on job.job_id = task.job_id where job.request like '%{clusterName}%' order by job_id, task_index asc;2.根据jobID 查看日志,具体参考: cid:link_0发现有错误编码:BMS.3037;3.bms同事定位,获取镜像安装系统盘失败,所需系统盘大于当前裸机磁盘问题原因:     获取镜像安装系统盘失败,所需系统盘大于当前裸机磁盘解决方法:   修改镜像为老的镜像id,进行扩容   rds_cluster.imageid
总条数:2746 到第 页
上滑加载中