Apache Doris 基础(一) -- Getting Started

Apache Doris

开源、实时数据仓库
Apache Doris是一个用于实时分析的现代数据仓库。
它提供大规模闪电般的实时数据分析。

  • 实时获取和存储
    在一秒钟内基于推的微批处理和基于拉的流数据获取。实时更新,追加和预聚合的存储引擎
  • 闪电般的查询
    使用列式存储引擎、MPP架构、基于成本的查询优化器、矢量化执行引擎对高并发和高吞吐量查询进行优化。
  • 联合查询
    支持Hive、Iceberg、Hudi等数据湖和MySQL、PostgreSQL等数据库的联合查询。
  • 半结构化数据
    复合数据类型,如Array、Map和JSON。可变数据类型,支持JSON数据的自动数据类型推断。文本搜索的NGram bloomfilter和倒排索引。
  • 弹性结构
    线性可扩展性的分布式设计。工作负载隔离和分级存储,实现高效的资源管理。支持无共享集群以及存储和计算分离。
  • 开放生态系统
    兼容MySQL协议和ANSI SQL,轻松集成BI工具。提供开放数据API,供Spark、Flink和ML/AI等外部计算引擎访问。

1、什么是Apache Doris

Apache Doris是一个基于MPP的实时数据仓库,以其高查询速度而闻名。对于大型数据集的查询,它在次秒级返回结果。它支持高并发点查询和高吞吐量复杂分析。它可用于报表分析、临时查询、统一数据仓库和数据湖查询加速。基于Apache Doris,用户可以构建用户行为分析、A/B测试平台、日志分析、用户档案分析、电子商务订单分析等应用。

Apache Doris,原名Palo,最初是为了支持百度的广告报告业务而创建的。2017年正式开源,2018年7月由百度捐赠给Apache软件基金会,由孵化器项目管理委员会成员在Apache导师的指导下运营。2022年6月,Apache Doris从Apache孵化器毕业,成为顶级项目。到2024年,Apache Doris社区已经聚集了来自不同行业数百家公司的600多名贡献者,每月活跃贡献者超过120人。

Apache Doris拥有广泛的用户基础。它已在全球4000多家公司的生产环境中使用,包括抖音、百度、思科、腾讯和网易等巨头。它也被广泛应用于金融、零售、电信、能源、制造、医疗等行业。

1.1 使用场景

下图显示了Apache Doris在数据管道中可以做什么。数据源经过集成和处理后,被摄取到Apache Doris实时数据仓库和Hive、Iceberg、Hudi等离线数据湖中。Apache Doris可以用于以下目的:
在这里插入图片描述

  • 报告分析
    • 实时仪表盘
    • 为内部分析和管理提供报告
    • 面向客户的报告:如网站所有者的网站分析和广告商的广告报告。这种情况通常需要高并发性(数千QPS)和低查询延迟(以毫秒计)。例如,电子商务巨头京东使用Apache Doris进行广告报告。它每天摄取100亿行数据,并实现超过10,000 QPS和150ms的P99延迟。
  • 特别查询:具有不规则查询模式和高吞吐量需求的面向分析人员的自助分析。例如,小米基于Doris构建了一个Growth Analytics平台。它每天处理10,000次SQL查询,平均查询延迟为10秒,P95延迟为30秒。
  • 数据湖分析:Apache Doris允许对离线数据湖(如Hive、Hudi和Iceberg)中的外部表进行联邦查询,并通过避免数据复制实现出色的查询性能。
  • 日志分析:Apache Doris从2.0版开始就支持反向索引和全文搜索。依靠其高效的查询和存储引擎,Apache Doris的成本效益比普通日志分析解决方案高10倍。
  • 统一数据仓库:Apache Doris可以作为各种分析工作负载的统一数据处理平台,将用户从处理复杂的数据组件和技术堆栈中节省出来。例如,世界知名连锁餐厅海底捞,将原有的Spark、Hive、Kudu、HBase、Phoenix架构替换为Apache Doris。

1.2 技术概述

Apache Doris有一个简单而整洁的体系结构,只有两种类型的进程。

  • 前端(Frontend,FE):用户请求处理、查询解析和规划、元数据管理和节点管理
  • 后端(Backend,BE):数据存储和查询执行

前端和后端进程都是可扩展的,在单个集群中支持多达数百台机器和数十pb的存储容量。这两种进程都通过一致性协议保证了业务的高可用性和数据的高可靠性。这种高度集成的架构设计大大降低了分布式系统的运维成本。

在这里插入图片描述

1.3 接口

Apache Doris采用MySQL协议,支持标准SQL,与MySQL语法高度兼容。用户可以通过各种客户端工具访问Doris,并与包括但不限于SmartBI、DataEase、FineBI、Tableau、Power BI、SuperSet等BI工具无缝集成。它可以作为任何支持MySQL协议的BI工具的数据源。

1.4 存储引擎

Apache Doris有一个列存储引擎,它按列编码、压缩和读取数据。这可以实现非常高的数据压缩比,并大大减少不必要的数据扫描,从而更有效地利用IO和CPU资源。

Doris支持各种索引结构,以最大限度地减少数据扫描:

  • 排序复合键索引(Sorted Compound Key Index):用户最多可以指定三列,形成一个复合排序键。这可以有效地修剪数据,以更好地支持高度并发的报告场景。
  • 最小/最大索引(MIN/MAX Indexing):这可以在数值类型的等价和范围查询中实现有效的数据过滤。
  • Bloom Filter:这在高基数列的等价过滤和修剪中非常有效。
  • 倒排索引:这允许快速搜索任何字段。

Doris支持多种数据模型,并针对不同的场景进行了优化:

  • 聚合键模型(Aggregate Key Model):将具有相同键的值列合并,通过预聚合提高性能
  • 唯一键模式(Unique Key Model):保证键的唯一性,用相同的键覆盖数据,实现行级数据更新
  • Duplicate Key Model:按原样存储数据,不进行聚合,能够详细存储事实表

Doris 也支持强一致性的物化视图(strongly consistent materialized views)。物化视图在系统内自动选择和更新,无需人工操作,从而降低了用户的维护成本。

1.5 查询引擎

Doris有一个基于MPP的查询引擎,用于节点之间和节点内部的并行执行。它支持大型表的分布式shuffle连接,以更好地处理复杂的查询。
在这里插入图片描述
Doris 查询引擎是向量化的查询引擎,所有的内存结构能够按照列式布局,这可以在很大程度上减少虚拟函数调用,提高缓存命中率,并有效地使用SIMD指令。在宽表聚合场景中,Doris的性能比非矢量化引擎高5~10倍。

在这里插入图片描述
Doris使用自适应查询执行技术(adaptive query execution ),根据运行时统计信息动态调整执行计划。例如,它可以生成一个运行时过滤器并将其推送到探测端。具体来说,它将过滤器推到探测端的最低级别扫描节点,这大大减少了要处理的数据量并提高了连接性能。Doris运行时过滤器支持In/Min/Max/Bloom过滤器

Doris查询优化器(optimizer )是CBO和RBO的组合。RBO支持常量折叠、子查询重写和谓词下推,而CBO支持连接重新排序。Doris CBO正在不断优化,以获得更准确的统计数据收集和推断,以及更准确的成本模型。

2、Quick Start

本指南介绍如何下载最新稳定版本的Doris,将其安装在单个节点上并使其运行,包括创建数据库、数据表、导入数据和执行查询的步骤。

2.1 先决条件

  • 主流的Linux X86-64环境。推荐使用CentOS 7.1或Ubuntu 16.04及以上版本。有关更多环境的指南,请参阅文档的“安装和部署”部分。
  • 安装Java 8运行时环境。(如果您不是Oracle JDK商用license用户,我们建议您使用免费的Oracle JDK 8u202。现在下载。)
  • 建议为Linux操作系统的Doris创建一个新用户(避免使用root用户,以免对操作系统造成意外操作)。

2.2 下载二进制包

从doris.apache.org下载Doris安装包,并执行以下步骤。

# Download the binary installation package of Doris
server1:~ doris$ wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.0.3-bin-x64.tar.gz# Extract the installation package
server1:~ doris$ tar zxf apache-doris-2.0.3-bin-x64.tar.gz# Rename the directory to apache-doris for simplicity
server1:~ doris$ mv apache-doris-2.0.3-bin-x64 apache-doris

2.3 Install Doris

Configure FE

进入apache-doris/fe/fe.conf文件进行fe配置。下面是一些需要注意的关键配置。手动添加JAVA_HOME并将其指向JDK8运行时环境。对于其他配置,您可以使用默认值以获得快速的单机体验。

# Add JAVA_HOME and point it to your JDK8 runtime environment. Suppose your JDK8 is at /home/doris/jdk8, set it as follows:
JAVA_HOME=/home/doris/jdk8# The CIDR network segment of FE listening IP is empty by default. When started, Doris will automatically select an available network segment. If you need to specify a segment, you can set priority_networks=92.168.0.0/24, for example.
# priority_networks =# By default, FE metadata is stored in the doris-meta directory under DORIS_HOME. It is created already. You can change it to your specified path.
# meta_dir = ${DORIS_HOME}/doris-meta

Start FE

apache-doris/fe目录下执行如下命令启动FE。

# Start FE in the background to ensure that the process continues running even after exiting the terminal.
server1:apache-doris/fe doris$ ./bin/start_fe.sh --daemon

Configure BE

进入apache-doris/be/be.conf文件进行be配置。下面是一些需要注意的关键配置。手动添加JAVA_HOME并将其指向JDK8运行时环境。对于其他配置,您可以使用默认值以获得快速的单机体验。

# Add JAVA_HOME and point it to your JDK8 runtime environment. Suppose your JDK8 is at /home/doris/jdk8, set it as follows:
JAVA_HOME=/home/doris/jdk8# The CIDR network segment of BE listening IP is empty by default. When started, Doris will automatically select an available network segment. If you need to specify a segment, you can set priority_networks=192.168.0.0/24, for example.
# priority_networks =# By default, BE data is stored in the storage directory under DORIS_HOME. It is created already. You can change it to your specified path.
# storage_root_path = ${DORIS_HOME}/storage

Start BE

apache-doris/be下执行以下命令启动BE 。

# Start BE in the background to ensure that the process continues running even after exiting the terminal.
server1:apache-doris/be doris$ ./bin/start_be.sh --daemon

Connect to Doris FE

下载兼容性MySQL客户端连接到Doris FE。

解压缩客户端,在bin/目录下找到mysql命令行工具。然后执行以下命令连接到Doris。

mysql -uroot -P9030 -h127.0.0.1

注意:

  • 这里的root用户是Doris内置的超级管理员用户。有关详细信息,请参阅身份验证和授权。
  • -P:指定所连接的查询端口。默认端口号为9030。它对应于fe.conf中的query_port设置。
  • -h:指定所连接FE的IP地址。如果您的客户机和FE安装在同一节点上,则可以使用127.0.0.1。

将BE节点加入集群

在MySQL客户端执行一个示例SQL,将BE节点添加到集群中:

 ALTER SYSTEM ADD BACKEND "be_host_ip:heartbeat_service_port";

Note:

  • be_host_ip:待扩容BE节点的IP地址
  • heartbeat_service_port:待扩容BE节点的心跳上报端口,在be.conf中查找 heartbeat_service_port,默认设置为9050
  • 您可以使用“show backends”语句查看新添加的BE节点。

修改root和admin用户的密码

在MySQL客户端设置root和admin用户新密码的sql示例:

mysql> SET PASSWORD FOR 'root' = PASSWORD('doris-root-password');                                                                                                                                                                                   
Query OK, 0 rows affected (0.01 sec)                                                                                                                                                                                                       mysql> SET PASSWORD FOR 'admin' = PASSWORD('doris-admin-password');                                                                                                                                                                                 
Query OK, 0 rows affected (0.00 sec)        

root用户和admin用户的区别
“root”和“admin”是安装Doris后自动创建的两个默认帐户。root用户拥有整个集群的超级用户权限,可以执行各种管理操作,例如添加或删除节点。admin用户不具有管理员权限,是集群内的超级用户,拥有除集群管理相关权限外的所有权限。建议仅在集群管理和维护需要时使用root权限。

2.4 创建数据库和表

Connect to Doris

使用admin帐号连接到Doris FE。

mysql -uadmin -P9030 -h127.0.0.1

如果连接到127.0.0.1的MySQL客户端与FE在同一台机器上,则不需要密码。

创建数据库和表

create database demo;use demo; 
create table mytable
(k1 TINYINT,k2 DECIMAL(10, 2) DEFAULT "10.05",    k3 CHAR(10) COMMENT "string column",    k4 INT NOT NULL DEFAULT "1" COMMENT "int column"
) 
COMMENT "my first table"
DISTRIBUTED BY HASH(k1) BUCKETS 1
PROPERTIES ('replication_num' = '1');

数据获取

保存以下示例数据到本地的“data.csv”文件:

1,0.14,a1,20
2,1.04,b2,21
3,3.14,c3,22
4,4.35,d4,23

使用Stream Load方法将“data.csv”中的数据加载到新创建的表中。

curl  --location-trusted -u admin:admin_password -T data.csv -H "column_separator:," http://127.0.0.1:8030/api/demo/mytable/_stream_load
  • -T data.csv:数据文件名
  • -u admin:admin_password: admin帐号和密码
  • 127.0.0.1:8030: FE的IP和http_port

一旦成功执行,将返回如下消息:

{                                                     "TxnId": 30,                                  "Label": "a56d2861-303a-4b50-9907-238fea904363",        "Comment": "",                                       "TwoPhaseCommit": "false",                           "Status": "Success",                                 "Message": "OK",                                    "NumberTotalRows": 4,                                "NumberLoadedRows": 4,                               "NumberFilteredRows": 0,                             "NumberUnselectedRows": 0,                          "LoadBytes": 52,                                     "LoadTimeMs": 206,                                    "BeginTxnTimeMs": 13,                                "StreamLoadPutTimeMs": 141,                           "ReadDataTimeMs": 0,                                 "WriteDataTimeMs": 7,                                "CommitAndPublishTimeMs": 42                         
} 
  • NumberLoadedRows:已加载的行数
  • NumberTotalRows:要加载的行总数
  • Status:“Success”表示数据加载成功。

2.5 查询数据

在MySQL客户端执行如下SQL查询加载的数据:

mysql> select * from mytable;                                                                                                                                                                                                              
+------+------+------+------+                                                                                                                                                                                                              
| k1   | k2   | k3   | k4   |                                                                                                                                                                                                              
+------+------+------+------+                                                                                                                                                                                                              
|    1 | 0.14 | a1   |   20 |                                                                                                                                                                                                              
|    2 | 1.04 | b2   |   21 |                                                                                                                                                                                                              
|    3 | 3.14 | c3   |   22 |                                                                                                                                                                                                              
|    4 | 4.35 | d4   |   23 |                                                                                                                                                                                                              
+------+------+------+------+                                                                                                                                                                                                              
4 rows in set (0.01 sec)       

2.6 Stop Doris

Stop FE

apache-doris/fe下执行以下命令停止FE。

server1:apache-doris/fe doris$ ./bin/stop_fe.sh

Stop BE

apache-doris/be目录下执行如下命令停止BE。

server1:apache-doris/be doris$ ./bin/stop_be.sh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CDGP|数据治理策略揭秘:因企制宜,实现精准管控新高度

随着信息化、数字化的深入推进,数据已经成为企业最重要的资产之一。如何高效、安全地管理和利用数据,成为企业面临的重要课题。数据治理策略的制定与实施,成为解决这一问题的关键所在。本文将探讨如何因企制宜,制定符合企业实际情…

23种设计模式全面总结 | 快速复习(附PDF+MD版本)

本篇文章是对于23种设计模式的一个全面的总结,受限于文章篇幅无法对每个设计模式做到全面的解析,但几乎每个设计模式都提供了案例和类图结构,非常适合快速复习和在学习设计模式之前的全预习把握。 💡文章的 pdf markdown 版本可通…

JSP期末要点复习

一、JSP工作原理 1.客户端请求JSP页面:用户通过浏览器发送一个请求到服务器,请求一个特定的JSP页面。这个请求被服务器上的Web容器(如Apache Tomcat)接收。 2.JSP转换为Servlet:当JSP页面第一次被请求时&#xff0…

JavaSE 字符串String及相关API StringBuilder StringJoiner 底层原理 详解

字符串和相关API java不会字符串即凉一半 学好字符串很重要 API 为应用程序编程接口 获得字符串对象 1.直接赋值 空参构造 string s1“abc”; s1 记录的是串池里的地址 2.用new的方式 string s2new string(); new(在堆内存里开辟空…

数据安全革命:Web3带来的隐私保护创新

随着数字化时代的发展,数据安全和隐私保护问题日益突出。传统的中心化数据存储和管理方式已经无法满足日益增长的数据安全需求,而Web3作为下一代互联网的新兴力量,正以其去中心化、加密安全的特性,引领着一场数据安全革命。本文将…

pyinstaller打包提示“文件所在的卷已被外部更改,因此打开的文件不再有效。”

环境 anaconda : 24.1.2python : 3.7.13pyinstaller : 5.13.0 问题描述 之前使用pyintaller执行spec文件打包都是能成功,今天打包报了“文件所在的卷已被外部更改,因此打开的文件不再有效。”的错误 Traceback (most recent call last):File "C…

想提升,应该学PMP还是NPDP?

NPDP(新产品开发专业认证)是由美国产品开发与管理协会(PDMA)发起的国际认证,涵盖新产品开发的理论、方法和实践,为公司提供全方位的知识体系支持。通过考试获得NPDP认证证书,能够提升个人工作能…

粒子爱心特效||轻松实现浪漫效果||完整代码

关注微信公众号「ClassmateJie」有完整代码以及更多惊喜等待你的发现。 简介/效果展示 你是否曾经想过,在特殊的日子里给你的爱人一个惊喜?或者在朋友的生日派对上,给他们展示一个充满爱意的特效?今天,我要分享一个我…

VUE3-form表单保存附件与基本信息

element-ui代码 <el-dialog :title"上传附件" v-model"dialogAdds.visible" width"500px" append-to-body> <el-form-item label"唯一标识"> <dict-tag v-if"form.groupId" :options"unique_identifica…

性能怪兽!香橙派 Kunpeng Pro 开发板深度测评,带你解锁无限可能

性能怪兽&#xff01;香橙派 Kunpeng Pro 开发板深度测评&#xff0c;带你解锁无限可能 文章目录 性能怪兽&#xff01;香橙派 Kunpeng Pro 开发板深度测评&#xff0c;带你解锁无限可能一、背景二、香橙派 Kunpeng Pro 硬件规格概述三、使用准备与系统安装1️⃣、系统安装步骤…

【C++】浅论(cin和cout)的解锁、缓冲区的理解、CC++输入方法汇总和详解

一、cin,cout解锁 1.1&#xff1a;cin,cout解锁以及why 首先cin和cout是在c中为了提供类型安全和易用性设计的&#xff0c;它兼容了c语言的输入和输出&#xff0c;以上几点导致它在性能行&#xff08;读取和输出速度)远不如传统c语言的输入和输出。 在看到一些代码里面&…

Python 脚本化 Git 操作:简单、高效、无压力

前言 如何判定此次测试是否达标&#xff0c;代码覆盖率是衡量的标准之一。前段时间&#xff0c;利用fastapi框架重写了覆盖率统计服务&#xff0c;核心其实就是先获取全量代码覆盖率&#xff0c;然后通过diff操作统计增量代码覆盖率&#xff0c;当然要使用diff操作&#xff0c…

Java中Stack的使用详解

Stack是一种运算受限的线性表&#xff0c;其特点在于仅允许在表的一端&#xff08;即表尾&#xff09;进行插入和删除操作。这一端被称为栈顶&#xff0c;而相对的另一端则称为栈底。向一个栈插入新元素的操作称为进栈或入栈&#xff0c;它将新元素放到栈顶元素的上面&#xff…

从杂乱无章到井井有条——五款笔记软件,重塑工作与生活

记得刚入职场那会&#xff0c;我总是被各种繁杂的信息和任务搞得焦头烂额。会议记录、项目计划、灵感闪现……这些都需要我随时记录和整理。 然而&#xff0c;我的桌面总是堆满了便签纸和草稿本&#xff0c;手机相册里充斥着各种截图和备忘录&#xff0c;每次需要查找资料都像…

【数据结构】红黑树——领略天才的想法

个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 祝福语&#xff1a;愿你拥抱自由的风 目录 二叉搜索树 AVL树 红黑树概述 性质详解 效率对比 旋转操作 元素操作 代码实现 二叉搜索树 【数据结构】二叉搜索树-CSDN博客 AVL树 【数据结构】AVL树——平衡二叉搜索…

深度学习实战-yolox训练ExDark数据集(附全过程代码,超详细教程,无坑!)

跳转:数据集获取以及前期准备工作 本人在深度学习实战-yolov5训练ExDark数据集(附全过程代码,超详细教程,无坑!)的数据基础上实现yolox的训练,所以先跳转到该文章下去获取数据集,再继续接下来操作过程。 一、VOC格式数据集制作 1.前期工作 2.转变成voc格式 在datase…

Latex:newcommand

参考文献&#xff1a; latex中自定义的命令———\newcommand-CSDN博客LaTeX技巧924&#xff1a;详解newcommand的参数和默认值 - LaTeX工作室 (latexstudio.net) 文章目录 (re)newcommand自定义的一些命令 (re)newcommand ”定义命令“ 的定义&#xff1a; \newcommand{<…

[每周一更]-(第98期):PHP版本的升级历程

文章目录 大致历程PHP/FI (PHP 1.0)PHP 2.0PHP 3.0PHP 4.0PHP 5.0PHP 5.3 - 5.6PHP 7.0PHP 7.1 - 7.4PHP 8.0PHP 8.1 - 8.2 参考 PHP&#xff0c;即“超文本预处理器”&#xff08;Hypertext Preprocessor&#xff09;&#xff0c;是广泛应用于web开发的服务器端脚本语言。自19…

什么是独特摆动交易策略?fpmarkets1分钟讲清楚

摆动交易策略想必各位投资者都已经接触过了&#xff0c;但是什么是独特摆动交易策略&#xff1f;各位投资者知道吗&#xff1f;其实很简单&#xff0c;这是一种基于斐波纳契工具的独特摆动交易策略。下面fpmarkets1分钟讲清楚&#xff0c;趋势总会经历调整&#xff0c;而这些调…