Apache Doris 基础(一) -- Getting Started

news2024/11/20 14:35:01

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.coloradmin.cn/o/1686886.html

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

相关文章

vue3封装ElementUI plus Dialog弹窗

因为ElementuiPlus的dialog弹框的初始样式不太好看,而公司要求又要好看,本来是已经实现了,但是后来想想了发现封装完dialog的其他功能也要,所以特此记录一下 方案一 思路:封装一个组件,将所有新增的参数引入el-dialog 参数中,实现参数共用 新建一个组件,将官网暴露的属性全部引…

达梦数据库详解

达梦认证是指针对中国数据库管理系统(DBMS)厂商达梦公司所推出的数据库产品,即达梦数据库(DMDB),进行的一种官方认证体系。达梦认证旨在验证数据库管理人员对达梦数据库产品的掌握程度,及其在数…

【AD936X】 SDR 版图 欣赏

DIE : 4336x4730 um 的 65 nm 芯片 在顶部金属上,您可以看到 PLL 的电感器和日期代码 - 芯片在推出前两年就已准备就绪: 右下角是主数字块,应该是 128 抽头 FIR 滤波器。在最大放大倍率下,我们可以看到一排排标准单元。它们的放置…

[深度学习]基于yolov8+bytetrack+pyqt5实现车辆进出流量统计+车辆实时测速实现

以前使用过yolov5deepsort实现过车辆进出流量统计车辆实时测速,可以看我往期视频,这回改成yolov8bytetrack实现,实时性更好,原理和原来一样。车流量进出统计车速测量优点: 使用目标检测算法考虑bbox抖动,解…

绿联NAS DXP系列发布:内网穿透技术在私有云的应用分析

5月23日,绿联科技举行了“新一代存储方式未来已来”发布会,发布了绿联NAS私有云DXP系列(包括两盘位到八盘位的九款新品)以及由绿联科技自研的全新NAS系统UGOS Pro。此次绿联发布的DXP系列九款产品,共有两盘位、四盘位、…

Windows DNS 服务器配置转发器

DNS服务器转发器 在企业中由于自身条件的限制, 可能本身的DNS新能并不是很好,这个时候通过使用转发器功能, 将收到的DNS请求转发给另外一台高性能的DNS服务器,让其做后面的迭代查询。 1. 选择DNS服务器, 右击选择属性…

【LeetCode:496. 下一个更大元素 I + 单调栈】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

windows2008修改远程桌面端口,如何果断修改远程桌面端口,确保系统安全无忧!

在数字化时代的浪潮中,Windows 2008系统以其卓越的稳定性和可靠性,赢得了众多企业和个人的青睐。然而,随着网络安全问题的日益严峻,如何确保远程桌面连接的安全,成为了摆在我们面前的一道难题。今天,我将为…

MySQL的ODBC驱动下载、安装以及配置数据源

下载地址:odbc官方下载地址 MySQL :: Download Connector/ODBC 下载安装ODBC驱动 配置MySQL ODBC 数据源 进入控制面板->系统和安全->Windows工具 Data Source Name填写需要生成的ODBC数据源的名称。Description选填。如果使用远程数据库服务器&a…

我怎么使用AI大语言模型学英语

今天已经是我开始英语拉练任务的第39天了,一直在笃定的、雷打不动的、机械笨拙的重复做一件事,那就是使用AI工具,将我想要说的话翻译成英文,生成语音文件,每天朗读三小时,最终整个背下来。我也在思考&#…

使用分水岭算法进行图像分割

文章目录 理论代码 原文路径:opencv-4.6.0\doc\py_tutorials\py_imgproc\py_watershed 目标 在这一章当中, 我们将学习使用分水岭算法使用基于标记的图像分割我们将看到:cv.watershed() 理论 任何灰度图像都可以被视为地形表面,其中高强度…

【面经】单片机

1、单片机IO口工作方式 输入 模拟输入(GPIO_Mode_AIN):关闭施密特触发器,将电压信号传送到片上外设模块,通常用于连接模拟信号源。浮空输入(GPIO_Mode_IN_FLOATING):在浮空输入状态…

element ui 的密码输入框点击显示隐藏密码时,图标随之改变

场景图&#xff1a; 原理&#xff1a; 通过修改el-input框的type属性&#xff0c;来设置显示或者隐藏。从而改变图标地址。 <el-input class"passwordinput" :type"pwdObj.pwdType" ref"pwdInput" placeholder"密码"v-model"…

VScode C/C++环境安装配置

1. 编译器需要从如下网站下载&#xff1a; MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 2. 切换到file选项&#xff0c;下拉找到对应的文件版本直接下载&#xff1a; 3. 右键解压到当前文件夹如下&#xff1a; 4. 如图所示复制浏览器上的相应的…

Java 8 Lambda 表达式

目录 出现的背景 外部类 代码 运行 内部类 代码 运行 匿名内部类 代码 运行 Lambda 表达式简介 Lambda 表达式的结构 lambda表达式 代码 运行 什么是功能接口&#xff08;Functional interface&#xff09; 代码 接口 实现类 使用方法重写 使用lambda表达…

解决 fatal: Not a git repository (or any of the parent directories): .git 问题

解决方法&#xff1a;在命令行 输入 git init 然后回车就好了

Aware接口作用

介绍 Aware&#xff08;感知&#xff09;接口是一个标记&#xff0c;里面没有任何方法,实际方法定义都是子接口确定&#xff08;相当于定义了一套规则&#xff0c;并建议子接口中应该只有一个无返回值的方法&#xff09;。 我们知道spring已经定义好了很多对象&#xff0c;如…

深入解析R语言的贝叶斯网络模型:构建、优化与预测;INLA下的贝叶斯回归;现代贝叶斯统计学方法;R语言混合效应(多水平/层次/嵌套)

目录 ①基于R语言的贝叶斯网络模型的实践应用 ②R语言贝叶斯方法在生态环境领域中的应用 ③基于R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析 ④基于R语言的现代贝叶斯统计学方法&#xff08;贝叶斯参数估计、贝叶斯回归、…

Python 实现批量文件重命名工具

在现代软件开发中&#xff0c;图形用户界面 (GUI) 工具的创建是一个常见需求。对于那些需要频繁处理文件的任务&#xff0c;拥有一个简便的 GUI 工具尤为重要。在这篇博客中&#xff0c;我们将介绍如何使用 wxPython 创建一个简单的批量文件重命名工具。该工具可以选择一个文件…

AWS EC2 连接 AWS RDS(Mysql)

1 创建RDS数据库 点击创建数据库 引擎选项 模板 设置 连接 2 EC2连接Mysql $ sudo yum list mariadb* Installed Packages mariadb-connector-c.x86_64 3.1.13-1.amzn2023.0.3 amazonl…