概述背景ApacheDoris官方地址https:doris。apache。org ApacheDorisGitHub源码地址https:github。comapacheincubatordoris ApacheDoris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。ApacheDoris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。ApacheDoris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。令您的数据分析工作更加简单高效!Doris最早是解决百度凤巢统计报表的专用系统,随着百度业务的飞速发展对系统进行了多次迭代,逐渐承担起百度内部业务的统计报表和多维分析需求。2013年,百度把Doris进行了MPP框架的升级,并将新系统命名为Palo,2017年以百度Palo的名字在GitHub上进行了开源,2018年贡献给Apache基金会时,由于与国外数据库厂商重名,因此选择用回最初的名字,这就是ApacheDoris的由来。之后在美团,小米,字节跳动,京东等互联网企业被适用于核心业务实时数据分析。ApacheDoris与Clickhouse都是MPP数据库领域的优秀产品,各自擅长的领域或适用的场景存在差异,所有用户可以基于技术认知和业务需求来抉择到底该选择哪一款产品,甚至在大多场景里两者是可以并存和相互补足的。2020年2月,百度Doris团队的个别同学离职创业,基于ApacheDoris之前的版本做了自己的商业化闭源产品DorisDB,这就是StarRocks的前身。DorisDB升级为StarRocks,并全面开源。定义StarRocks官网地址https:www。starrocks。comzhCNindex目前最新版本为2。2。0 StarRocks官网文档地址https:docs。starrocks。comzhcnmainintroductionStarRocksintro StarRocksGitHub源码地址https:github。comStarRocksstarrocksStarRocks是新一代极速全场景MPP数据库。StarRocks充分吸收关系型OLAP数据库和分布式存储系统在大数据时代的优秀研究成果,在业界实践的基础上,进一步改进优化、升级架构,并增添了众多全新功能,形成了全新的企业级产品。StarRocks致力于构建极速统一分析体验,满足企业用户的多种数据分析场景,支持多种数据模型(明细模型、聚合模型、更新模型),多种导入方式(批量和实时),支持导入多达10000列的数据,可整合和接入多种现有系统(Spark、Flink、Hive、ElasticSearch)。StarRocks兼容MySQL协议,可使用MySQL客户端和常用BI工具对接StarRocks来进行数据分析。StarRocks采用分布式架构,对数据表进行水平划分并以多副本存储。集群规模可以灵活伸缩,能够支持10PB级别的数据分析;支持MPP框架,并行加速计算;支持多副本,具有弹性容错能力。StarRocks采用关系模型,使用严格的数据类型和列式存储引擎,通过编码和压缩技术,降低读写放大;使用向量化执行方式,充分挖掘多核CPU的并行计算能力,从而显著提升查询性能。发布路线 这个是StarRocks2021年前规划,现在最新版本已为2。2。0 特性架构精简:StarRocks内部通过MPP计算框架完成SQL的具体执行工作。MPP框架本身能够充分的利用多节点的计算能力,整个查询并行执行,从而实现良好的交互式分析体验。StarRocks集群不需要依赖任何其他组件,易部署、易维护,极简的架构设计,降低了StarRocks系统的复杂度和维护成本,同时也提升了系统的可靠性和扩展性。管理员只需要专注于StarRocks系统,无需学习和管理任何其他外部系统。全面向量化引擎:StarRocks的计算层全面采用了向量化技术,将所有算子、函数、扫描过滤和导入导出模块进行了系统性优化。通过列式的内存布局、适配CPU的SIMD指令集等手段,充分发挥了现代CPU的并行计算能力,从而实现亚秒级别的多维分析能力。智能查询优化:StarRocks通过CBO优化器(CostBasedOptimizer)可以对复杂查询自动优化。无需人工干预,就可以通过统计信息合理估算执行成本,生成更优的执行计划,大大提高了Adhoc和ETL场景的数据分析效率。联邦查询:StarRocks支持使用外表的方式进行联邦查询,当前可以支持Hive、MySQL、Elasticsearch三种类型的外表,用户无需通过数据导入,可以直接进行数据查询加速。高效更新:StarRocks支持多种数据模型,其中更新模型可以按照主键进行upsertdelete操作,通过存储和索引的优化可以在并发更新的同时实现高效的查询优化,更好的服务实时数仓的场景。智能物化视图:StarRocks支持智能的物化视图。用户可以通过创建物化视图,预先计算生成预聚合表用于加速聚合类查询请求。StarRocks的物化视图能够在数据导入时自动完成汇聚,与原始表数据保持一致。并且在查询的时候,用户无需指定物化视图,StarRocks能够自动选择最优的物化视图来满足查询请求。标准SQL:StarRocks支持标准的SQL语法,包括聚合、JOIN、排序、窗口函数和自定义函数等功能。StarRocks可以完整支持TPCH的22个SQL和TPCDS的99个SQL。此外,StarRocks还兼容MySQL协议语法,可使用现有的各种客户端工具、BI软件访问StarRocks,对StarRocks中的数据进行拖拽式分析。流批一体:StarRocks支持实时和批量两种数据导入方式,支持的数据源有Kafka、HDFS、本地文件,支持的数据格式有ORC、Parquet和CSV等,支持导入多达10000列的数据。StarRocks可以实时消费Kafka数据来完成数据导入,保证数据不丢不重(exactlyonce)。StarRocks也可以从本地或者远程(HDFS)批量导入数据。高可用易扩展:StarRocks的元数据和数据都是多副本存储,并且集群中服务有热备,多实例部署,避免了单点故障。集群具有自愈能力,可弹性恢复,节点的宕机、下线、异常都不会影响StarRocks集群服务的整体稳定性。StarRocks采用分布式架构,存储容量和计算能力可近乎线性水平扩展。StarRocks单集群的节点规模可扩展到数百节点,数据规模可达到10PB级别。扩缩容期间无需停服,可以正常提供查询服务。另外StarRocks中表模式热变更,可通过一条简单SQL命令动态地修改表的定义,例如增加列、减少列、新建物化视图等。同时,处于模式变更中的表也可也正常导入和查询数据。使用场景 StarRocks可以满足企业级用户的多种分析需求,包括OLAP多维分析、定制报表、实时数据分析和Adhoc数据分析等。具体的业务场景包括:OLAP多维分析用户行为分析用户画像、标签分析、圈人高维业务指标报表自助式报表平台业务问题探查分析跨主题业务分析财务报表系统监控分析实时数据分析电商大促数据分析教育行业的直播质量分析物流行业的运单分析金融行业绩效分析、指标计算广告投放分析管理驾驶舱探针分析APM(ApplicationPerformanceManagement)高并发查询广告主报表分析零售行业渠道人员分析SaaS行业面向用户分析报表Dashbroad多页面分析统一分析通过使用一套系统解决多维分析、高并发查询、预计算、实时分析、Adhoc查询等场景,降低系统复杂度和多技术栈开发与维护成本。 与其他分析层数仓框架对比,其极速统一架构如下 与Flink生态对接 基本概念和架构系统架构图 组件介绍 StarRocks集群由FE和BE构成,可以使用MySQL客户端访问StarRocks集群。FrontEnd 简称FE,是StarRocks的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。FE接收MySQL客户端的连接,解析并执行SQL语句。管理元数据,执行SQLDDL命令,用Catalog记录库,表,分区,tablet副本等信息。FE的SQLlayer对用户提交的SQL进行解析,分析,改写,语义分析和关系代数优化,生产逻辑执行计划。FE的Planner负责把逻辑计划转化为可分布式执行的物理计划,分发给一组BE。FE监督BE,管理BE的上下线,根据BE的存活和健康状态,维持tablet的副本的数量。FE协调数据导入,保证数据导入的一致性。FE高可用部署,使用复制协议选主和主从同步元数据,所有的元数据修改操作,由FEleader节点完成,FEfollower节点可执行读操作。元数据的读写满足顺序一致性。FE的节点数目采用2n1,可容忍n个节点故障。当FEleader故障时,从现有的follower节点重新选主,完成故障切换。BackEnd 简称BE,是StarRocks的后端节点,负责数据存储,计算执行,以及compaction,副本管理等工作。BE管理tablet的副本。BE受FE指导,创建或删除tablet。BE接收FE分发的物理执行计划并指定BEcoordinator节点,在BEcoordinator的调度下,与其他BEworker共同协作完成执行。BE读本地的列存储引擎获取数据,并通过索引和谓词下沉快速过滤数据。BE后台执行compact任务,减少查询时的读放大。数据导入时,由FE指定BEcoordinator,将数据以fanout的形式写入到tablet多副本所在的BE上。其他组件Broker Broker是StarRocks和HDFS对象存储等外部数据对接的中转服务,辅助提供导入导出功能,如需使用brokerload,sparkload,备份恢复等功能需要安装启动Broker。HdfsBroker:用于从Hdfs中导入数据到StarRocks集群,详见数据导入章节。StarRocksManager StarRocksManager是StarRocks企业版提供的管理工具,通过Manager可以可视化的进行StarRocks集群管理、在线查询、故障查询、监控报警、可视化慢查询分析等功能。手动部署环境支持 集群节点需要以下环境支持:Linux(Centos7)推荐OracleJava1。8CPU需要支持AVX2指令集ulimitn配置65535,启动脚本会自动设置,需要启动的用户有设置ulimitn权限集群时钟需同步网络需要万兆网卡和万兆交换机 通过catproccpuinfogrepavx2命令查看节点配置,有结果则cpu支持AVX2指令集。 测试集群建议节点配置:BE推荐16核64GB以上,FE推荐8核16GB以上。建议FE,BE独立部署。 系统参数配置建议: 关闭交换区,消除交换内存到虚拟内存时对性能的扰动。echo0sudoteeprocsysvmswappiness 建议使用Overcommit,把catprocsysvmovercommitmemory设成1。echo1sudoteeprocsysvmovercommitmemory部署部署规划 下载从官网下载wgethttps:www。starrocks。comzhCNdownloadrequestdownload22StarRocks2。2。0rc01。tar。gz下载的安装包可直接解压后进行安装部署tarxvfStarRocks2。2。0rc02。tar。gz 查看FE目录结构 查看BE目录结构 部署FEFE的基本配置FE的配置文件为feconffe。conf,此处仅列出其中JVM配置和元数据目录配置,生产环境可参考FE参数配置对集群进行详细优化配置。cdStarRocks2。2。0rc02fe第一步:配置文件conffe。confviconffe。conf元数据目录metadir{STARROCKSHOME}metaJVM配置JAVAOPTSXmx8192mXX:UseMembarXX:SurvivorRatio8XX:MaxTenuringThreshold7XX:PrintGCDateStampsXX:PrintGCDetailsXX:UseConcMarkSweepGCXX:UseParNewGCXX:CMSClassUnloadingEnabledXX:CMSParallelRemarkEnabledXX:CMSInitiatingOccupancyFraction80XX:SoftRefLRUPolicyMSPerMB0Xloggc:STARROCKSHOMElogfe。gc。log由于我本机有很多网卡,通信网段为192。168。0。0,因此配置如下prioritynetworks10。10。10。024;192。168。0。016 可以根据FE内存大小调整Xmx8192m,为了避免GC建议16G以上,StarRocks的元数据都在内存中保存。第二步:创建元数据目录,需要与fe。conf中配置路径保持一致:mkdirpmeta第三步:启动FE进程:binstartfe。shdaemon第四步:确认启动FE启动成功。查看日志logfe。log确认。 如果FE启动失败,可能是由于端口号被占用,可修改配置文件conffe。conf中的端口号httpport。使用jps命令查看java进程确认StarRocksFe存在。使用浏览器访问FEip:httpport(默认8030),打开StarRocks的WebUI,用户名为root,密码为空。 访问StarRocks的WebUI,http:192。168。5。52:8030 使用MySQL客户端访问FE,这里默认root用户密码为空,端口为feconffe。conf中的queryport配置项,默认为9030,查看FE状态是正常 通过SQLyog的第三方MySQL客户端连接和查询结果 部署BE BE的基本配置:BE的配置文件为beconfbe。conf,默认配置即可启动集群,生产环境可参考BE参数配置对集群进行详细优化配置。 BE部署:通过以下命令启动be并添加be到StarRocks集群,一般至少在三个节点部署3个BE实例,每个实例的添加步骤相同。进入be的安装目录cdStarRocks2。2。0rc02be第一步:创建数据目录(当前设置为be。conf中默认storagerootpath配置项路径):创建数据存储目录mkdirpstorage第二步:通过mysql客户端添加BE节点:host为与prioritynetworks设置相匹配的IP,port为BE配置文件中的heartbeatserviceport,默认为9050。mysqlALTERSYSTEMADDBACKEND192。168。5。52:9050; 如出现错误,需要删除BE节点,可通过以下命令将BE节点从集群移除,host和port与添加时一致:具体参考扩容缩容。mysqlALTERSYSTEMdecommissionBACKENDhost:port;第三步:启动BE:binstartbe。shdaemon第四步:查看BE状态,确认BE就绪: 显示isAlive为true,则说明BE正常接入集群。如果BE没有正常接入集群,请查看log目录下的be。WARNING日志文件确定原因。 如果日志中出现类似backendipsavedinmasterdoesnotequaltobackendlocalip127。0。0。1vs。192。168。5。22的信息,说明prioritynetworks的配置存在问题。此时需要,先用以下命令drop掉原来加进去的be,然后重新以正确的IP添加BE。mysqlALTERSYSTEMDROPPBACKEND192。168。5。22:9050; 由于是初次启动,如果在操作过程中遇到任何意外问题,都可以删除并重新创建storage目录,再从头开始操作。 其他两台是相同部署方式,由于192。168。12。28上8040和8060端口已经被占用,所以配置文件的端口信息 启动192。168。12。28的BE,查看 启动192。168。5。52的BE,查看 部署Broker 配置文件为apachehdfsbrokerconfapachehdfsbroker。conf 注意:Broker没有也不需要prioritynetworks参数,Broker的服务默认绑定在0。0。0。0上,只需要在ADDBROKER时,填写正确可访问的BrokerIP即可。 如果有特殊的hdfs配置,复制线上的hdfssite。xml到conf目录下 启动broker:cdStarRocks2。2。0rc02apachehdfsbrokerbinstartbroker。shdaemon 添加broker节点到集群中,查看broker状态:mysql查看broker状态: 继续部署其他两个broker,三个broker的状态都是正常 实战使用表创建示例使用root用户建立exampledb数据库mysqlcreatedatabaseexampledb;通过showdatabases;查看数据库信息:mysqlshowdatabases; 通过官方提供建表脚本创建表CREATETABLEIFNOTEXISTSdetailDemo(maketimeDATENOTNULLCOMMENTYYYYMMDD,macheversonTINYINTCOMMENTrange〔128,127〕,machenumSMALLINTCOMMENTrange〔32768,32767〕,decodeINTCOMMENTrange〔2147483648,2147483647〕,saleridBIGINTCOMMENTrange〔26312631〕,pdnumLARGEINTCOMMENTrange〔2127121271〕,pdtypeCHAR(20)NOTNULLCOMMENTrangechar(m),min(1255),pddescVARCHAR(500)NOTNULLCOMMENTupperlimitvalue65533bytes,usdetailSTRINGNOTNULLCOMMENTupperlimitvalue65533bytes,relTimeDATETIMECOMMENTYYYYMMDDHH:MM:SS,channelFLOATCOMMENT4bytes,incomeDOUBLECOMMENT8bytes,accountDECIMAL(12,4)COMMENT,ispassBOOLEANCOMMENTtruefalse)ENGINEOLAPDUPLICATEKEY(maketime,macheverson)PARTITIONBYRANGE(maketime)(START(20220311)END(20220315)EVERY(INTERVAL1day))DISTRIBUTEDBYHASH(maketime,macheverson)BUCKETS8PROPERTIES(replicationnum3,dynamicpartition。enabletrue,dynamicpartition。timeunitDAY,dynamicpartition。start3,dynamicpartition。end3,dynamicpartition。prefixp,dynamicpartition。buckets8); 命令查看当前库的所有表mysqlshowtables;查看表结构mysqldescdetailDemo;查看建表语句,在StarRocks中字段名不区分大小写,表名区分大小写mysqlshowcreatetabledetailDemo; 建表语句说明排序键StarRocks表内部组织存储数据时会按照指定列排序,这些列为排序列(SortKey),明细模型中由DUPLICATEKEY指定排序列,以上demo中的maketime,macheverson两列为排序列。注意排序列在建表时应定义在其他列之前。排序键详细描述以及不同数据模型的表的设置方法请参考排序键。字段类型StarRocks表中支持多种字段类型,除demo中已经列举的字段类型,还支持BITMAP类型,HLL类型,Array类型,字段类型介绍详见数据类型章节。建表时尽量使用精确的类型。例如整形就不要用字符串类型,INT类型满足则不要使用BIGINT,精确的数据类型能够更好的发挥数据库的性能。分区,分桶PARTITION关键字用于给表〔创建分区〕(https:docs。starrocks。comzhcnmainsqlreferencesqlstatementsdatadefinitionCREATETABLESyntax),当前demo中使用maketime进行范围分区,从11日到15日每天创建一个分区。StarRocks支持动态生成分区,PROPERTIES中的dynamicpartition开头的相关属性配置都是为表设置动态分区。详见动态分区管理。DISTRIBUTED关键字用于给表〔创建分桶〕(https:docs。starrocks。comzhcnmainsqlreferencesqlstatementsdatadefinitionCREATETABLESyntax),当前demo中使用maketime,macheverson两个字段通过Hash算法创建32个桶。创建表时合理的分区和分桶设计可以优化表的查询性能,分区分桶列如何选择详见数据分布章节。数据模型DUPLICATE关键字表示当前表为明细模型,KEY中的列表示当前表的排序列。StarRocks支持多种数据模型,分别为明细模型,聚合模型,更新模型,主键模型。不同模型的适用于多种业务场景,合理选择可优化查询效率。索引StarRocks默认会给Key列创建稀疏索引加速查询,具体规则见排序键和shortkeindex章节。支持的索引类型有Bitmap索引,Bloomfilter索引等。 注意:索引创建对表模型和列有要求,详细说明见对应索引介绍章节。ENGINE类型默认为olap。可选mysql,elasticsearch,hive,ICEBERG代表创建表为外部表。 如果本文对你有帮助,别忘记给我个3连,点赞,转发,评论, 咱们下期见