Apache Doris教程
1.Doris 简介
1.1 Doris 概述
Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后,
更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 1000 台,单一
业务最大可达到上百 TB。
Apache Doris 是一个现代化的 MPP(Massively Parallel Processing,即大规模并行处理)
分析型(OLAP)数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。
Apache Doris 的分布式架构非常简洁,易于运维,并且可以支持 10PB 以上的超大数据集。
Apache Doris 可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。
1.2OLAP和OLTP
OLAP和OLTP比较
OLTP |
OLAP |
|
数据源 |
仅包含当前运行日常业务数据 |
整合来自多个来源的数据,包括OLTP和外部来源 |
目的 |
面向应用,面向业务,支撑事务 |
面向主题,面向分析,支持分析决策 |
焦点 |
当下 |
主要面向过去,面向历史(实时数仓除外) |
任务 |
增删改查 |
主要是用于读,select查询,写操作很少 |
响应时间 |
毫秒 |
秒,分钟,小时,天,这些取决于数据量和查询的复杂程度 |
数据量 |
小数据,MB,GB |
大数据,TP,PB |
常见的开源OLAP引擎
开源OLAP引擎 |
优点 |
缺点 |
技术融合成本 |
易用性 |
使用场景 |
运维成本 |
引擎类型 |
ClickHouse |
列式存储 单极性彪悍 保留明细数据 |
分布式集群在线扩展支持不佳 运维成本极高 |
高 |
非标协议接口 |
全面 |
高 |
纯列存OLAP |
Druid |
实时数据摄入 列式存储和位图索引 多租户和高并发 |
OLAP性能分场景表现差异大 使用门槛高 仅支持聚合查询 |
高 |
非标协议接口 |
局限 |
高 |
MOLAP |
TiDB |
HTAP混合数据库 同时支持明细和聚合查询 高度兼容mysql |
非列式存储 OLAP能力不足 |
低 |
SQL标准 |
全面 |
低 |
纯列存OLAP |
Kylin |
与计算引擎,可以对数据一次聚合多次查询 支持数据规模超大 易用性强,支持标准sql 性能强,查询数据快 |
需要依赖hadoop生态 仅支持聚合查·询 不支持adhoc查询 不支持join和对数据的更新 |
高 |
SQL标准 |
局限 |
高 |
MOLAP |
Doris |
GooleMesa+Apache Impa+ORCFile/Parquet 主键更新 支持Rollup Table 高并发和高通图的Ad-hoc查询 支持聚合+明细数据查询 无外部系统依赖 |
成熟度不够 |
低 |
兼容mysql访问协议 |
全面 |
低 |
HOLAP |
1.3使用场景
1.5架构
Doris 的架构很简洁,只设 FE(Frontend)前端进程、BE(Backend)后端进程两种角色、两个后台的服务进程,不依赖于外部组件,方便部署和运维,FE、BE 都可在线性扩展。
1.6默认端口
实例名称 |
端口名称 |
默认端口 |
通讯方向 |
说明 |
BE |
be_port |
9060 |
FE-->BE |
BE 上 thrift server 的端口,用于接收来自 FE 的请求 |
BE |
webserver_port |
8040 |
BE<-->FE |
BE 上的 http server 端口 |
BE |
heartbeat_service_port |
9050 |
FE-->BE |
BE 上心跳服务端口,用于接收来自 FE 的心跳 |
BE |
brpc_prot* |
8060 |
FE<-->BE,BE<-->BE |
BE 上的 brpc 端口,用于 BE 之间通信 |
FE |
http_port |
8030 |
FE<-->FE ,用户<--> FE |
FE 上的 http_server 端口 |
FE |
rpc_port |
9020 |
BE-->FE ,FE<-->FE |
FE 上 thirft server 端口 |
FE |
query_port |
9030 |
用户<--> FE |
FE 上的 mysql server 端口 |
FE |
edit_log_port |
9010 |
FE<-->FE |
FE 上 bdbje 之间通信用的端口 |
Broker |
broker_ipc_port |
8000 |
FE-->BROKER,BE-->BROKER |
Broker 上的 thrift server,用于接收请求 |
2.安装
2.1安装前准备
设置系统最大文件打开句柄数 ==>启动一个程序的时候,打开文件的数量就是句柄数
Plain Text |
关闭交换分区(swap)
交换分区是linux用来当做虚拟内存用的磁盘分区;
linux可以把一块磁盘分区当做内存来使用(虚拟内存、交换分区);
Linux使用交换分区会给Doris带来很严重的性能问题,建议在安装之前禁用交换分区;
Shell |
注意事项:
|
2.2安装FE
根据自己的配置选择性点击下载
Shell |
Shell |
Shell |
生产环境强烈建议单独指定目录不要放在 Doris 安装目录下,最好是单独的磁盘(如果有 SSD 最好)。 |
2.3安装BE
进入到be的conf目录下修改配置文件
Shell |
注意事项: storage_root_path 默认在 be/storage 下,需要手动创建该目录。多个路径之间使用英文状 态的分号;分隔(最后一个目录后不要加)。 可以通过路径区别存储目录的介质,HDD 或 SSD。可以添加容量限制在每个路径的末 尾,通过英文状态逗号,隔开,如: storage_root_path=/home/disk1/doris.HDD,50;/home/disk2/doris.SSD,10;/home/disk2/doris 说明: /home/disk1/doris.HDD,50,表示存储限制为 50GB,HDD; /home/disk2/doris.SSD,10,存储限制为 10GB,SSD; /home/disk2/doris,存储限制为磁盘最大容量,默认为 HDD 关于Centos 添加新硬盘,分区格式化、挂载硬盘文档: Centos 添加新硬盘,分区格式化、挂载硬盘 |
因为FE和BE两个都是单独的个体,所以他俩相互间还不认识,就需要我们通过mysql的客户端将他们建立起联系
如果没有装mysql的家伙,记得先装mysql
安装mysql
使用 MySQL Client 连接 FE
SQL |
fe启动完成后可以查看fe的运行状态
SQL |
添加 BE 节点
SQL |
查看 BE 状态
SQL |
添加环境变量
Shell |
启动BE
SQL |
2.4部署 FS_Broker(可选)
Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS、百度云 BOS 及 Amazon S3 的 fs_broker。fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker。
启动 Broker
SQL |
使用 mysql-client 连接启动的 FE,执行以下命令:
SQL |
查看 Broker 状态
SQL |
2.5扩容和缩容
2.5.1 FE 扩容和缩容
可以通过将 FE 扩容至 3 个以上节点来实现 FE 的高可用。
使用 MySQL 登录客户端后,可以使用 sql 命令查看 FE 状态,目前就一台 FE
SQL |
添加FE的新节点:
FE 分为 Leader,Follower 和 Observer 三种角色。 默认一个集群,只能有一个 Leader,可以有多个 Follower 和 Observer。其中 Leader 和 Follower 组成一个 Paxos 选择组,如果Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。
如果只部署一个 FE,则 FE 默认就是 Leader。在此基础上,可以添加若干 Follower 和 Observer。
SQL |
在linux02和linux03上分别启动FE节点
SQL |
此时你再去查看FE的状态就发现有3台啦
SQL |
删除FE节点命令
SQL |
注意:删除 Follower FE 时,确保最终剩余的 Follower(包括 Leader)节点最好为奇数。 |
2.5.2 BE 扩容和缩容
增加 BE 节点
SQL |
DROP 方式删除 BE 节点(不推荐)
SQL |
注意:DROP BACKEND 会直接删除该 BE,并且其上的数据将不能再恢复!!!所以我们强烈不推荐使用 DROP BACKEND 这种方式删除 BE 节点。当你使用这个语句时,会有对应的防误操作提示。 |
DECOMMISSION 方式删除 BE 节点(推荐)
SQL |
|
2.5.3 Broker 扩容缩容
Broker 实例的数量没有硬性要求。通常每台物理机部署一个即可。Broker 的添加和删除可以通过以下命令完成:
SQL |
Broker 是无状态的进程,可以随意启停。当然,停止后,正在其上运行的作业会失败,重试即可。
第 3 章 数据表设计
3.1字段类型
TINYINT |
1 字节 |
范围:-2^7 + 1 ~ 2^7 - 1 |
SMALLINT |
2 字节 |
范围:-2^15 + 1 ~ 2^15 - 1 |
INT |
4 字节 |
范围:-2^31 + 1 ~ 2^31 - 1 |
BIGINT |
8 字节 |
范围:-2^63 + 1 ~ 2^63 - 1 |
LARGEINT |
16 字节 |
范围:-2^127 + 1 ~ 2^127 - 1 |
FLOAT |
4 字节 |
支持科学计数法 |
DOUBLE |
12 字节 |
支持科学计数法 |
DECIMAL[(precision, scale)] |
16 字节 |
保证精度的小数类型。默认是DECIMAL(10, 0) ,precision: 1 ~ 27 ,scale: 0 ~ 9,其中整数部分为 1 ~ 18,不支持科学计数法 |
DATE |
3 字节 |
范围:0000-01-01 ~ 9999-12-31 |
DATETIME |
8 字节 |
范围:0000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
CHAR[(length)] |
定长字符串。长度范围:1 ~ 255。默认为 1 |
|
VARCHAR[(length)] |
变长字符串。长度范围:1 ~ 65533 |
|
BOOLEAN |
与 TINYINT 一样,0 代表 false,1 代表 true |
|
HLL |
1~16385 个字节 |
hll 列类型,不需要指定长度和默认值,长度根据数据的聚合程度系统内控制,并且 HLL 列只能通过 配套的hll_union_agg、Hll_cardinality、hll_hash 进行查询或使用 |
BITMAP |
bitmap 列类型,不需要指定长度和默认值。表示整型的集合,元素最大支持到 2^64 - 1 |
|
STRING |
变长字符串,0.15 版本支持,最大支持 2147483643 字节(2GB-4),长度还受 be 配置`string_type_soft_limit`, 实际能存储的最大长度取两者最小值。只能用在 value 列,不能用在 key列和分区、分桶列 |