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.pswp.cn/bicheng/16895.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16895.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16895.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CDGP|數據治理策略揭秘:因企制宜,實現精準管控新高度

隨著信息化、數字化的深入推進,數據已經成為企業最重要的資產之一。如何高效、安全地管理和利用數據,成為企業面臨的重要課題。數據治理策略的制定與實施,成為解決這一問題的關鍵所在。本文將探討如何因企制宜,制定符合企業實際情…

23種設計模式全面總結 | 快速復習(附PDF+MD版本)

本篇文章是對于23種設計模式的一個全面的總結,受限于文章篇幅無法對每個設計模式做到全面的解析,但幾乎每個設計模式都提供了案例和類圖結構,非常適合快速復習和在學習設計模式之前的全預習把握。 💡文章的 pdf markdown 版本可通…

Mysql的復制技術

一、異步復制: 主服務器上的事務更新了數據后,就不管從服務器是否立刻跟上,主服務器繼續處理其他事務,而從服務器會在它空閑的時候去檢查并應用這些更新。 ——老師(源服務器)給學生(從服務器&…

JSP期末要點復習

一、JSP工作原理 1.客戶端請求JSP頁面:用戶通過瀏覽器發送一個請求到服務器,請求一個特定的JSP頁面。這個請求被服務器上的Web容器(如Apache Tomcat)接收。 2.JSP轉換為Servlet:當JSP頁面第一次被請求時&#xff0…

一戰中海洋敗,二戰梭哈兩電一郵!

這個系列會邀請上岸學長學姐進行經驗分享~ 經驗分享 大家好哇,能寫這個帖子,本人倍感榮幸。 先介紹一下個人情況吧,我本科就讀于中北大學,GPA:3.61/5,有電子類競賽,大創項目,大學…

JavaSE 字符串String及相關API StringBuilder StringJoiner 底層原理 詳解

字符串和相關API java不會字符串即涼一半 學好字符串很重要 API 為應用程序編程接口 獲得字符串對象 1.直接賦值 空參構造 string s1“abc”; s1 記錄的是串池里的地址 2.用new的方式 string s2new string(); new(在堆內存里開辟空…

opencv調用攝像頭保存視頻

opencv調用攝像頭保存視頻 文章目錄 opencv調用攝像頭保存視頻保存視頻(采用默認分辨率640 x 480)保存視頻(指定分辨率,例1280720) 保存視頻(采用默認分辨率640 x 480) import cv2 import time # 定義視頻捕捉對象 cap cv2.Vide…

SD4054單節鋰電子恒定電壓線性充電器SOT-23-5封裝電源適配器

SD4054是一款完整的單節鋰離子電池采用恒定電流/恒定電壓線性充電器。它采用的 SOT-23-5封裝,只需外接極少的外部元件,使得SD4054成為便攜式應用的理想選擇。 SD4054可以適合USB電源和適配器電源工作。 采用了內部PMOSFET架構,加上防倒充電路…

數據安全革命:Web3帶來的隱私保護創新

隨著數字化時代的發展,數據安全和隱私保護問題日益突出。傳統的中心化數據存儲和管理方式已經無法滿足日益增長的數據安全需求,而Web3作為下一代互聯網的新興力量,正以其去中心化、加密安全的特性,引領著一場數據安全革命。本文將…

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

環境 anaconda : 24.1.2python : 3.7.13pyinstaller : 5.13.0 問題描述 之前使用pyintaller執行spec文件打包都是能成功,今天打包報了“文件所在的卷已被外部更改,因此打開的文件不再有效。”的錯誤 Traceback (most recent call last):File "C…

「架構」微服務

微服務架構是一種軟件開發架構,它將應用程序作為一組小的服務構建,每個服務實現特定的業務功能,并通過輕量級的通信機制(通常是HTTP RESTful API)進行交互。這些服務是松耦合的,可以獨立部署、擴展和更新。 核心功能: 服務分解:將應用程序分解為一組小型、獨立的服務。…

ecc dsa rsa des

ECC(橢圓曲線密碼學)、DSA(數字簽名算法)、RSA(一種公鑰加密技術)和DES(數據加密標準)都是密碼學領域中重要的加密和安全技術。下面是對這四種技術的簡要介紹: 橢圓曲線密…

想提升,應該學PMP還是NPDP?

NPDP(新產品開發專業認證)是由美國產品開發與管理協會(PDMA)發起的國際認證,涵蓋新產品開發的理論、方法和實踐,為公司提供全方位的知識體系支持。通過考試獲得NPDP認證證書,能夠提升個人工作能…

條款8:了解各種不同意義的new和delete

有時候我們覺得,C的術語仿佛是要故意讓人難以理解似的。 這里就有一個例子:請說明new operator 和operator new 之間的差異(譯注:本書所說的new operator,即某些C教程如C Primer 所謂的new expression) 當你寫出這樣…

粒子愛心特效||輕松實現浪漫效果||完整代碼

關注微信公眾號「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…

[大師C語言(第十二篇)]C語言堆排序技術詳解

引言 堆排序&#xff08;Heap Sort&#xff09;是一種基于比較的排序算法&#xff0c;它利用堆這種數據結構的特點來進行排序。堆是一種近似完全二叉樹的結構&#xff0c;并同時滿足堆積的性質&#xff1a;即子節點的鍵值或索引總是小于&#xff08;或者大于&#xff09;它的父…

性能怪獸!香橙派 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語言的輸入和輸出。 在看到一些代碼里面&…