Apache Doris官方地址 Apache Doris
Apache Doris GitHub源码地址 GitHub - apache/incubator-doris: Apache Doris(Incubating) is an MPP-based interactive SQL data warehousing for reporting and analysis.
- Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。
- Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。令您的数据分析工作更加简单高效!
StarRocks官网地址 StarRocks - 新一代极速全场景MPP数据库 目前最新版本为2.2.0
StarRocks官网文档地址 什么是 StarRocks @ StarRocks_intro @ StarRocks Docs
StarRocks GitHub源码地址 GitHub - StarRocks/starrocks: StarRocks is a next-gen sub-second MPP database for full analytics scenarios, including multi-dimensional analytics, real-time analytics and ad-hoc query.
这个是StarRocks2021年前规划,现在最新版本已为2.2.0
StarRocks可以满足企业级用户的多种分析需求,包括OLAP多维分析、定制报表、实时数据分析和Ad-hoc数据分析等。具体的业务场景包括:
与其他分析层数仓框架对比,其极速统一架构如下
与Flink生态对接
StarRocks 集群由 FE 和 BE 构成, 可以使用 MySQL 客户端访问 StarRocks 集群。
简称 FE,是 StarRocks 的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。FE 接收 MySQL 客户端的连接, 解析并执行 SQL 语句。
简称 BE,是 StarRocks 的后端节点,负责数据存储,计算执行,以及 compaction,副本管理等工作。
Broker 是 StarRocks 和 HDFS 对象存储等外部数据对接的中转服务,辅助提供导入导出功能,如需使用 broker load,spark load,备份恢复等功能需要安装启动 Broker。
StarRocksManager 是 StarRocks 企业版提供的管理工具,通过 Manager 可以可视化的进行 StarRocks 集群管理、在线查询、故障查询、监控报警、可视化慢查询分析等功能。
集群节点需要以下环境支持:
通过 cat /proc/cpuinfo |grep avx2
命令查看节点配置,有结果则 cpu 支持 AVX2 指令集。
测试集群建议节点配置:BE 推荐 16 核 64GB 以上,FE 推荐 8 核 16GB 以上。建议 FE,BE 独立部署。
系统参数配置建议:
关闭交换区,消除交换内存到虚拟内存时对性能的扰动。
echo 0 | sudo tee /proc/sys/vm/swappiness
建议使用 Overcommit,把 cat /proc/sys/vm/overcommit_memory 设成 1。
echo 1 | sudo tee /proc/sys/vm/overcommit_memory
# 从官网下载
wget https://www.starrocks.com/zh-CN/download/request-download/22/StarRocks-2.2.0-rc01.tar.gz
# 下载的安装包可直接解压后进行安装部署
tar -xvf StarRocks-2.2.0-rc02.tar.gz
查看FE目录结构
查看BE目录结构
cd StarRocks-2.2.0-rc02/fe
# 第一步: 配置文件 conf/fe.conf
vi conf/fe.conf
# 元数据目录
meta_dir = ${STARROCKS_HOME}/meta
# JVM配置
JAVA_OPTS = "-Xmx8192m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$STARROCKS_HOME/log/fe.gc.log"
# 由于我本机有很多网卡,通信网段为192.168.0.0,因此配置如下
priority_networks = 10.10.10.0/24;192.168.0.0/16
可以根据 FE 内存大小调整-Xmx8192m,为了避免 GC 建议 16G 以上,StarRocks 的元数据都在内存中保存。
# 第二步: 创建元数据目录,需要与 fe.conf 中配置路径保持一致:
mkdir -p meta
# 第三步: 启动 FE 进程:
bin/start_fe.sh --daemon
# 第四步: 确认启动 FE 启动成功。
FE ip:http_port
(默认 8030),打开 StarRocks 的 WebUI, 用户名为 root, 密码为空。访问 StarRocks 的 WebUI,http://192.168.5.52:8030
使用 MySQL 客户端访问 FE,这里默认 root 用户密码为空,端口为 fe/conf/fe.conf 中的 query_port 配置项,默认为 9030,查看 FE 状态是正常
通过SQLyog的第三方MySQL客户端连接和查询结果
BE 的基本配置:BE 的配置文件为 be/conf/be.conf,默认配置即可启动集群,生产环境可参考 BE 参数配置对集群进行详细优化配置。
BE 部署:通过以下命令启动 be 并添加 be 到 StarRocks 集群, 一般至少在三个节点部署 3 个 BE 实例, 每个实例的添加步骤相同。
# 进入be的安装目录
cd StarRocks-2.2.0-rc02/be
# 第一步: 创建数据目录(当前设置为 be.conf 中默认 storage_root_path 配置项路径):
# 创建数据存储目录
mkdir -p storage
# 第二步: 通过 mysql 客户端添加 BE 节点:host 为与 priority_networks 设置相匹配的 IP,port 为 BE 配置文件中的 heartbeat_service_port,默认为 9050。
mysql> ALTER SYSTEM ADD BACKEND "192.168.5.52:9050";
如出现错误,需要删除 BE 节点,可通过以下命令将 BE 节点从集群移除,host 和 port 与添加时一致:具体参考 扩容缩容。
mysql> ALTER SYSTEM decommission BACKEND "host:port";
# 第三步: 启动 BE:
bin/start_be.sh --daemon
# 第四步: 查看 BE 状态, 确认 BE 就绪:
显示isAlive 为 true,则说明 BE 正常接入集群。如果 BE 没有正常接入集群,请查看 log 目录下的 be.WARNING 日志文件确定原因。
如果日志中出现类似"backend ip saved in master does not equal to backend local ip127.0.0.1 vs. 192.168.5.22"的信息,说明 priority_networks 的配置存在问题。此时需要,先用以下命令 drop 掉原来加进去的 be,然后重新以正确的 IP 添加 BE。
mysql> ALTER SYSTEM DROPP BACKEND "192.168.5.22:9050";
由于是初次启动,如果在操作过程中遇到任何意外问题,都可以删除并重新创建 storage 目录,再从头开始操作。
其他两台是相同部署方式,由于192.168.12.28上8040和8060端口已经被占用,所以配置文件的端口信息
启动192.168.12.28的BE,查看
启动192.168.5.52的BE,查看
配置文件为 apache_hdfs_broker/conf/apache_hdfs_broker.conf
注意:Broker 没有也不需要 priority_networks 参数,Broker 的服务默认绑定在 0.0.0.0 上,只需要在 ADD BROKER 时,填写正确可访问的 Broker IP 即可。
如果有特殊的 hdfs 配置,复制线上的 hdfs-site.xml 到 conf 目录下
启动 broker:
cd StarRocks-2.2.0-rc02/apache_hdfs_broker
bin/start_broker.sh --daemon
添加 broker 节点到集群中,查看 broker 状态:
mysql> 查看 broker 状态:
继续部署其他两个broker,三个broker的状态都是正常
# 使用 root 用户建立 example_db 数据库
mysql> create database example_db;
# 通过 `show databases;` 查看数据库信息:
mysql> show databases;
通过官方提供建表脚本创建表
CREATE TABLE IF NOT EXISTS detailDemo (
make_time DATE NOT NULL COMMENT "YYYY-MM-DD",
mache_verson TINYINT COMMENT "range [-128, 127]",
mache_num SMALLINT COMMENT "range [-32768, 32767] ",
de_code INT COMMENT "range [-2147483648, 2147483647]",
saler_id BIGINT COMMENT "range [-2^63 + 1 ~ 2^63 - 1]",
pd_num LARGEINT COMMENT "range [-2^127 + 1 ~ 2^127 - 1]",
pd_type CHAR(20) NOT NULL COMMENT "range char(m),m in (1-255) ",
pd_desc VARCHAR(500) NOT NULL COMMENT "upper limit value 65533 bytes",
us_detail STRING NOT NULL COMMENT "upper limit value 65533 bytes",
relTime DATETIME COMMENT "YYYY-MM-DD HH:MM:SS",
channel FLOAT COMMENT "4 bytes",
income DOUBLE COMMENT "8 bytes",
account DECIMAL(12,4) COMMENT "",
ispass BOOLEAN COMMENT "true/false"
) ENGINE=OLAP
DUPLICATE KEY(make_time, mache_verson)
PARTITION BY RANGE (make_time) (
START ("2022-03-11") END ("2022-03-15") EVERY (INTERVAL 1 day)
)
DISTRIBUTED BY HASH(make_time, mache_verson) BUCKETS 8
PROPERTIES(
"replication_num" = "3",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-3",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "8"
);
# 命令查看当前库的所有表
mysql> show tables;
# 查看表结构
mysql> desc detailDemo;
# 查看建表语句,在 StarRocks 中字段名不区分大小写,表名区分大小写
mysql> show create table detailDemo;
建表语句说明
排序键
DUPLICATE KEY
指定排序列,以上 demo 中的 make_time, mache_verson
两列为排序列。注意排序列在建表时应定义在其他列之前。排序键详细描述以及不同数据模型的表的设置方法请参考 排序键。字段类型
分区,分桶
PARTITION
关键字用于给表 [创建分区](https://docs.starrocks.com/zh-cn/main/sql-reference/sql-statements/data-definition/CREATE TABLE#Syntax),当前 demo 中使用 make_time
进行范围分区,从 11 日到 15 日每天创建一个分区。StarRocks 支持动态生成分区,PROPERTIES
中的 dynamic_partition
开头的相关属性配置都是为表设置动态分区。详见 动态分区管理。DISTRIBUTED
关键字用于给表 [创建分桶](https://docs.starrocks.com/zh-cn/main/sql-reference/sql-statements/data-definition/CREATE TABLE#Syntax),当前 demo 中使用 make_time, mache_verson
两个字段通过 Hash 算法创建 32 个桶。数据模型
DUPLICATE
关键字表示当前表为明细模型,KEY
中的列表示当前表的排序列。StarRocks 支持多种数据模型,分别为 明细模型,聚合模型,更新模型,主键模型。不同模型的适用于多种业务场景,合理选择可优化查询效率。索引
注意:索引创建对表模型和列有要求,详细说明见对应索引介绍章节。