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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言深度解剖】(14):结构体内存对齐(详细配图讲解)

🤡博客主页:醉竺 🥰本文专栏:《C语言深度解剖》 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多C语言深度解剖点击专栏链接查看&…

顶顶通实时质检系统-黑名单拦截功能配置流程

文章目录 前言联系我们配置流程一、黑名单导入二、白名单导入三、外部黑名单四、靓号规则五、创建拦截规则六、拦截条件七、功能配置 拦截记录与统计拦截记录拦截统计 前言 上篇文章讲解了顶顶通实时质检系统黑名单的功能介绍,本篇文章主要讲解顶顶通黑名单拦截功能…

李斌阻击马斯克,也不放过李想

市场唯一不变的就是变化。 当年特斯拉开放专利,引起了国内电动车的创业潮,蔚来比小鹏、理想早几个月成立,也是造车新势力中首家实现交付的品牌。 但时过境迁,现在已经不是蔚来领衔“蔚小理”的时代了,理想是其中销量…

Vue3+ts(day07:pinia)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学,可以点心心支持一下哈(笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】,记录一下学习笔记,用于自己复盘,有需要学…

软件开发成本估算 5大注意事项

一般来说,软件开发成本估算分为:软件规模估算、工作量估算、成本估算和确定软件开发成本等四个过程,其估算基本流程如下: 软件开发成本估算流程 为了进一步确保估算的准确性,提高资源规划和分配效率,确保软…

深度学习之基于YoloV5入侵检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着信息技术的飞速发展,网络安全问题日益凸显。入侵检测系统(IDS&#xff0…

[JAVASE] 类和对象(五) -- 抽象类和接口

目录 一. 抽象类 1.1 抽象类的定义 1.2 抽象类的实现 1.3 抽象类的作用 1.4 抽象类注意事项 二. 接口 2.1 接口的定义 2.2 接口的实现 2.3 接口的作用 2.4 接口注意事项 三. 总结 一. 抽象类 1.1 抽象类的定义 如果一个类中没有包含足够的信息来描绘一个具体的对象, 那么…

两数交换,数组查找奇数个数的数(位运算)

文章目录 一、异或运算:1.1 Demo1.2 面试题 一、异或运算: 1.1 Demo 0和N进行异或运算都等于N 任何一个数和自己异或运算都等于0 且异或运算满足交换率 a^b b^a eg: a 甲 , b 已 那么则有 a a^b ​ b a^b ​ a a^b 故有&am…

全面提升工业物联网的安全问题——青创智通

工业物联网解决方案-工业IOT-青创智通 工业物联网,作为现代工业制造领域的新兴技术,正在引领一场全新的工业革命。它将传感器、控制器、移动通信、智能分析等先进技术融入到工业生产过程的各个环节,极大地提高了制造效率,改善了产…

通过修改物理内存实现跨进程内存读写

习一下利用修改物理内存来跨进程内存读写 系统:win10 21h1 x64 编译环境: vs2022 详情见附录 基础 虚拟地址转物理地址 虚拟地址也称线性地址,一个线性地址进程的DirBase地址可以转换成物理地址。先来看线性地址的含义 在x64体系中只实现了48位的virtu…

力扣算法之627. 变更性别

仅作为个人解题思路记录 题解: 1.要求将m换成f,f换成m 2.要求使用一句update语句 我的解 UPDATE Salary SET sex (CASE WHEN Salary.sexm THEN f WHEN Salary.sexf THEN m end) 我的解注解 sql server中update中允许使用case以及iif

代码随想录算法训练营第十七天(py)| 二叉树 | 110.平衡二叉树、 257. 二叉树的所有路径、404.左叶子之和

110.平衡二叉树 力扣链接 给定一个二叉树,判断它是否是 平衡二叉树(所有节点的左右子树深度不会超过1) 思路 后序遍历 如果判断到子树不是平衡二叉树,就返回-1,这个-1会一路向上返回到根节点 class Solution:def i…

【机器学习-08】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之决策树算法实战分析

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

(3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)

目录 一、磁共振快速采集技术基础 1.K空间的基本特点 2.快速成像的理由: 3.快速成像的硬件要求: 二、磁共振快速采集技术 1.采集更少的相位编码线 2.平行采集技术PAT 3.其他与快速采集有关的技术 1)部分回波技术 2)频率…

四川音盛佳云电子商务有限公司正规吗?靠谱吗?

在数字化浪潮席卷全球的今天,电子商务已成为推动经济发展的重要引擎。四川音盛佳云电子商务有限公司,作为抖音电商服务的佼佼者,正以其独特的视角和创新的策略,引领着抖音电商的新潮流,开启着电商服务的新篇章。 四川…

单例模式中的 双判断锁 问题、单例模式的资源问题

》》》Lazy 不存在高并发问题,lazy已经解决了。 CLR 类执行的顺序 静态变量初始化 1次静态构造函数 1次实例变量初始化基类静态变量初始化 1次基类静态构造函数 1次基类实例变量初始化基类实例构造函数实例构造函数 》》》 创建单例模式 好多种 1,静态…

Linux x86_64 UEFI 启动

文章目录 前言一、UEFI二、Disk device compatibility2.1 GPT 磁盘分区表2.1.1 简介2.1.2 Linux 2.2 ESP(EFI) 文件系统2.2.1 简介2.2.2 LinuxLinux Kernel EFI Boot Stub 三、UEFI GPT grub23.1 简介3.2 引导方式 3.3 BOOTX64.EFI3.4 shimx64.efi3.5 …

4.双指针+递归

一、双指针编程技巧 方法参数传递数组 将数组通过方法参数传递,方法操作的数组和main方法中的数组指向同一块内存区域,意味着方法操作数组,同时会引起main方法中数组的改变以引用的方式作为方法参数进行传递的 元素交换 定义临时变量temp&a…

代码随想录算法训练营第16天 |● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数

文章目录 前言104.二叉树的最大深度思路知识点 方法一 递归法方法二 迭代法 559. n叉树的最大深度111.二叉树的最小深度思路方法一 后向遍历递归法方法二 迭代法 222.完全二叉树的节点个数思路方法一 当成普通二叉树来做方法二 利用完全二叉树的特性 总结 前言 所有的题目一刷…

带你玩转OpenHarmony AI:打造智能语音子系统

简介 AI时代,智者当先,判断一个终端设备是否智能,语音能力是必不可缺的。智能家居、智慧厨房、智能汽车等等,一切衣食住行都在往智能方向发展,那我们该如何在OpenAtom OpenHarmony(简称“OpenHarmony”&am…