资讯专栏INFORMATION COLUMN

Apache Doris-为数据分析而生

IT那活儿 / 740人阅读
Apache Doris-为数据分析而生
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

Doris概述

1. Doris简介

Apache Doris是一个现代化的基于MPP(大规模并行处理)技术的分析型数据库产品。
简单来说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。
Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。令您的数据分析工作更加简单高效!

2. Doris核心特点

  • 基于MPP(大规模并行处理)架构的分析型数据库
  • 性能卓越,PB级别数据毫秒/秒级响应
  • 支持标准SQL语言,兼容MySQL协议
  • 向量化执行器
  • 高效的聚合表技术
  • 新型预聚合技术Rollup
  • 高性能、高可用、高可靠
  • 极简运维,弹性伸缩

3. Doris发展历程

4. 对比其他的数据分析框架

  • OLTP 与 OLAP
    OLTP是 Online Transaction Processing 的简称;OLAP 是 OnLine Analytical Processing 的简称。
    OLTP的查询一般只会访问少量的记录,且大多时候都会利用索引。比如最常见的基于主键的 CRUD 操作。

    OLAP 的查询一般需要 Scan 大量数据,大多时候只访问部分列,聚合的需求(Sum,Count,Max,Min 等)会多于明细的需求(查询原始的明细数据)。

  • HTAP
    HTAP 是 Hybrid Transactional(混合事务)/Analytical Processing(分析处理)的简称。
    基于创新的计算存储框架,HTAP 数据库能够在一份数据上同时支撑业务系统运行和 OLAP 场景,避免在传统架构中,在线与离线数据库之间大量的数据交互。此外,HTAP 基于分布式架构,支持弹性扩容,可按需扩展吞吐或存储,轻松应对高并发、海量数据场景。
    目前,实现 HTAP 的数据库不多,主要有 PingCAP 的 TiDB、阿里云的 HybridDB for MySQL、百度的 BaikalDB 等。其中,TiDB 是国内首家开源的 HTAP 分布式数据库。

OLAP分类:

  • MOLAP:通过预计算,提供稳定的切片数据,实现多次查询一次计算,减轻了查询时的计算压力,保证了查询的稳定性,是“空间换时间”的最佳路径。实现了基于Bitmap的去重算法,支持在不同维度下去重指标的实时统计,效率较高。
  • ROLAP:基于实时的大规模并行计算,对集群的要求较高。MPP引擎的核心是通过将数据分散,以实现CPU、IO、内存资源的分布,来提升并行计算能力。在当前数据存储以磁盘为主的情况下,数据Scan需要的较大的磁盘IO,以及并行导致的高CPU,仍然是资源的短板。
    因此,高频的大规模汇总统计,并发能力将面临较大挑战,这取决于集群硬件方面的并行计算能力。传统去重算法需要大量计算资源,实时的大规模去重指标对CPU、内存都是一个巨大挑战。目前Doris最新版本已经支持Bitmap算法,配合预计算可以很好地解决去重应用场景。

doris是一个ROLAP引擎, 可以满足以下需求:

  • 灵活多维分析;
  • 明细+聚合;
  • 主键更新。
对比其他的OLAP系统:

Doris 原理

1. 名称解释

2. 整体架构

Doris主要整合了Google Mesa(数据模型),Apache Impala(MPP Query Engine)和Apache ORCFile (存储格式,编码和压缩) 的技术。
Doris的系统架构如下,Doris主要分为FE和BE两个组件:

Doris的架构很简洁,使用MySQL协议,用户可以使用任何MySQL ODBC/JDBC和MySQL客户端直接访问Doris,只设FE(Frontend)、BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维。

  • FE:Frontend,即 Doris 的前端节点。主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作
  • BE:Backend,即 Doris 的后端节点。主要负责数据存储与管理、查询计划执行等工作。
FE,BE都可线性扩展。
FE主要有两个角色,一个是follower,另一个是observer。多个follower组成选举组,会选出一个master,master是follower的一个特例,Master跟follower,主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。
Observer节点仅从 leader 节点进行元数据同步,不参与选举。可以横向扩展以提供元数据的读服务的扩展性。

数据的可靠性由BE保证,BE会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整。 

Doris编译

Apache Doris提供直接可以部署的版本压缩包:https://cloud.baidu.com/doc/PALO/s/Ikivhcwb5也可以自行编译压缩包后使用(推荐)。

使用 Docker 开发镜像编译推荐

step1 拉取Doris官方提供的Docker镜像,目前可用版本有:build-env、build-env-1.1、build-env-1.2

docker pull apachedoris/doris-dev:build-env-1.2

step2 查看 Docker 镜像

docker images

step3 运行镜像

将容器中的 maven 下载的包保存到宿主机本地指定的文件中,避免重复下载,同时会将编译的 Doris 文件保存到宿主机本地指定的文件,方便部署。

docker run -it 
-v /u01/.m2:/root/.m2
-v /u01/incubator-doris-DORIS-0.13-release/:/root/incubator-doris-DORIS-0.13-release/
apachedoris/doris-dev:build-env-1.2

开启之后, 就在容器内了。

step4 下载Doris的安装包
cd /opt
wget https://dist.apache.org/repos/dist/dev/incubator/doris/0.13/0.13.0-rc3/ apache-doris-0.13.0.0-incubating-src.tar.gz
step5 解压安装
tar -zxvf  apache-doris-0.13.0.0-incubating-src.tar.gz
cd  apache-doris-0.13.0.0-incubating-src
step6 开始编译(此过程需要等待很久,根据网速来定
sh build.sh

编译完成。

Doris安装部署

1. 软硬件需求

  • Linux 操作系统版本需求:
Linux系统
版本
Centos
7.1及以上
Ubuntu
16.04及以上
  • 软件需求:
软件
版本
Java
1.8及以上
GCC
7.3及以上
  • 开发测试环境:
模块
CPU
内存
磁盘
网络
实例数量
Frontend
8核+
8GB+
SSD 或 SATA,10GB+ *
千兆网卡
1
Backend
8核+
16GB+
SSD 或 SATA,50GB+ *
千兆网卡
1-3 *
  • 生产环境:
模块
CPU
内存
磁盘
网络
实例数量
Frontend
16核+
64GB+
SSD 或 RAID,100GB+ *
万兆网卡
1-5 *
Backend
16核+
64GB+
SSD 或 SATA,100GB+ *
万兆网卡
10-100 *


注意点一:
  • FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
  • BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。
  • 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差)
  • 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
  • 所有部署节点关闭 Swap。

注意点二:FE 节点的数量

  • FE 角色分为 Follower 和 Observer,(Leader 为 Follower 组中选举出来的一种角色,以下统称 Follower,具体含义见 元数据设计文档)。
  • FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
  • Follower 的数量必须为奇数,Observer 数量随意。
  • 根据以往经验,当集群可用性要求很高是(比如提供在线业务),可以部署 3 个 Follower 和 1-3 个 Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。
通常我们建议 10 ~ 100 台左右的机器,来充分发挥 Doris 的性能(其中 3 台部署 FE(HA),剩余的部署 BE)。
当然,Doris的性能与节点数量及配置正相关。在最少4台机器(一台 FE,三台 BE,其中一台 BE 混部一个 Observer FE 提供元数据备份),以及较低配置的情况下,依然可以平稳的运行 Doris。
如果 FE 和 BE 混部,需注意资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。
Broker 部署:
Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可。

网络需求:

Doris 各个实例直接通过网络进行通讯。以下表格展示了所有需要的端口。

2. Doris端口说明

3. 资源规划

node1
node2
node3
FE(Leader)
FE(Follower)
FE(Follower)
BE
BE
BE
BROKER
BROKER
BROKER

4. 启动FE

4.1 配置环境变量
1)拷贝 FE 部署文件到指定节点(node1)
将源码编译生成的 output 下的 fe 文件夹拷贝到 FE 的节点/export/server/apache-doris-0.13.0路径下:
2)配置环境变量
vim /etc/profile
#DORIS_HOME
export DORIS_HOME=/export/server/apache-doris-0.13.0
export PATH=:$DORIS_HOME/bin:$PATH

3)重新加载环境变量

source /etc/profile
4.2 创建doris-mate
配置文件为 fe/conf/fe.conf。其中注意:meta_dir:元数据存放位置。默认在 fe/doris-meta/ 下。需手动创建该目录:
mkdir -p /export/server/apache-doris-0.13.0/fe/doris-meta

配置fe/conf/fe.conf配置文件:
vim conf/fe.conf
meta_dir = /export/server/apache-doris-0.13.0/fe/doris-meta

4.3 修改fe.conf中的JAVA_OPTS
fe.conf 中 JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。
4.4 修改ip绑定可选
如果机器有多个ip, 比如内网外网, 虚拟机docker等, 需要进行ip绑定, 以便在配置集群时可以正确识别。
修改fe服务的配置文件(ip地址根据环境实际ip进行修改):
vim /export/server/apache-doris-0.13.0/fe/conf/fe.conf
priority_networks = ip/24

4.5 将安装目录分发到另外两台节点
4.6 启动FE
sh /export/server/apache-doris-0.13.0/fe/bin/start_fe.sh --daemon

5. 配置BE

将源码编译生成的 output 下的 be 文件夹拷贝到 BE 的节点/export/server/apache-doris-0.13.0路径下:

配置文件为 be/conf/be.conf。主要是配置 storage_root_path:数据存放目录。默认在be/storage下,需要手动创建该目录。多个路径之间使用 ; 分隔(最后一个目录后不要加 ;

mkdir -p /export/server/apache-doris-0.13.0/be/storage1 /export/server/apache-doris-0.13.0/be/storage2
vim conf/be.conf
storage_root_path = /export/server/apache-doris-0.13.0/be/storage1,10;/export/server/apache-doris-0.13.0/be/storage2

5.1 使用mysql连接

step1 删除操作系统自带的mysql库文件(node1

rpm -qa | grep mariadb

rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

step安装mysql-client

上传”资料软件mysql-client”目录下的rpm到服务器节点/export/server/mysql-client.

step3 进行安装

rpm -ivh *

step连接node1服务器上的mysql实例(默认端口9030,默认没有密码

mysql -uroot -h node1 -P 9030

step5 登陆后,可以通过以下命令修改 root 密码

SET PASSWORD FOR root = PASSWORD(123456);

step6 使用Navicat客户端登录

5.2 添加BE

step1 BE 节点需要先在 FE 中添加,才可加入集群(node1)

mysql -uroot -h node1 -P 9030 -p

输入密码:123456

step2 登录后添加BE节点port为be上的heartbeat_service_port端口,默认9050

ALTER SYSTEM ADD BACKEND "node1:9050";
ALTER SYSTEM ADD BACKEND "node2:9050";
ALTER SYSTEM ADD BACKEND "node3:9050";

step查看BE状态,alive必须为true

SHOW PROC /backends;

查看 BE 运行情况。如一切正常,isAlive 列应为 true。

5.3 修改可打开文件数
ulimit -n 65535
5.4 修改ip绑定
修改fe服务的配置文件(ip地址根据环境实际ip进行修改):
vim /export/server/apache-doris-0.13.0/be/conf/be.conf
priority_networks = ip/24
5.5 将安装目录分发到另外两台节点
5.6 启动BE
sh /export/server/apache-doris-0.13.0/be/bin/start_be.sh --daemon
5.7 查看FE、BE
show proc /frontends;

show proc /backends;

查看 BE 运行情况。如一切正常,isAlive 列应为 true。

通过前端界面访问FE:

http://ip:8030/frontend
http://ip:8030/system?path=//frontends
通过前端界面访问BE:
http://ip:8030/backend
http://ip:8030/system?path=//backends

本文作者:熊静波(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129229.html

相关文章

  • Doris进驻顶级开源社区Apache 彰显百度“开源速度”

    摘要:近日,全球著名开源社区基金会宣布百度开源的项目全票通过进入孵化器。这是百度继后第二个进入基金会的项目,充分彰显了百度开源速度。前身是百度,自年月在上开源以来,收获多个,目前性能和易用性方面已达到业界领先水平。 近日,全球著名开源社区Apache基金会宣布百度开源的Doris项目全票通过进入Apache孵化器。这是百度继ECharts后第二个进入Apache基金会的项目,充分彰显了百度开...

    Pines_Cheng 评论0 收藏0
  • 产品购买与使用 数据仓库 UDW Doris

    摘要:如何连接云数据仓库如何连接云数据仓库如何连接云数据仓库为保证安全,云数据仓库仅提供内网网络,您连接集群时可以配合同一地域的云主机或者网络产品使用。 产品购买与使用本篇目录为什么只提供一种云盘类型?配置升降级对集群有什么影响?配置升级有什么建议?如何连接云数据仓库UDoris?为什么只提供一种云盘类型?Doris的存储特性对磁盘吞吐量要求很高,为保证Doris的性能优势, 因此仅提供RSSD云...

    ernest.wang 评论0 收藏1167
  • 重启集群 数据仓库 UDW Doris

    摘要:重启集群重启集群重启集群当您需要重启集群时,登录账号进入到用户控制台,在全部产品下搜索或者数据仓库下选择数据仓库,进入到数据仓库控制台下,选择操作重启注意重启集群为高危操作,集群将处于重启中持续数秒,建议无必要时不要随意重启实例,这将会 重启集群当您需要重启集群时,登录UCloud账号进入到用户控制台,在全部产品下搜索或者数据仓库下选择数据仓库 UDW Doris,进入到数据仓库UDoris...

    ernest.wang 评论0 收藏2903
  • 建表(Create Table) 数据仓库 UDW Doris

    摘要:数据排序使用的列数,取最前面几列,不能超过总的列数。示例创建一个动态分区表。创建外部表创建外部表在创建外部表的目的是可以通过访问外部数据库。创建表时,关于和的数量和数据量的建议。 建表(Create Table)创建表语法:CREATE TABLE [IF NOT EXISTS] [database.]table ( column_definition_list, [inde...

    ernest.wang 评论0 收藏1190
  • 概览 数据仓库 UDW Doris

    摘要:概览概览概览产品动态产品介绍什么是云数据仓库产品优势应用场景基本概念使用限制快速上手操作指南管理集群配置升降级节点扩容重启实例重置管理员密码删除集群连接集群数据导入本地数据导入数据导入通过导入开发指南数据类型语法创建库创建表创建视图插入数 概览概览产品动态产品介绍什么是云数据仓库UDoris产品优势应用场景基本概念使用限制快速上手操作指南管理集群Backend配置升降级Frontend节点扩...

    ernest.wang 评论0 收藏1705

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<