国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(上)
🚀 優質資源分享 🚀
| 🧡 Python實戰微信訂餐小程序 🧡 | 進階級 | 本課程是python flask+微信小程序的完美結合,從項目搭建到騰訊云部署上線,打造一個全棧訂餐系統。 |
| 💛Python量化交易實戰💛 | 入門級 | 手把手帶你打造一個易擴展、更安全、效率更高的量化交易系統 |
概述
背景
Apache Doris官方地址 https://doris.apache.org/
Apache Doris GitHub源碼地址 https://github.com/apache/incubator-doris
- Apache Doris是一個現代化的MPP分析型數據庫產品。僅需亞秒級響應時間即可獲得查詢結果,有效地支持實時數據分析。Apache Doris的分布式架構非常簡潔,易于運維,并且可以支持10PB以上的超大數據集。
- Apache Doris可以滿足多種數據分析需求,例如固定歷史報表,實時數據分析,交互式數據分析和探索式數據分析等。令您的數據分析工作更加簡單高效!
- Doris 最早是解決百度鳳巢統計報表的專用系統,隨著百度業務的飛速發展對系統進行了多次迭代,逐漸承擔起百度內部業務的統計報表和多維分析需求。2013 年,百度把 Doris 進行了 MPP 框架的升級,并將新系統命名為 Palo ,2017 年以百度 Palo 的名字在 GitHub 上進行了開源,2018 年貢獻給 Apache 基金會時,由于與國外數據庫廠商重名,因此選擇用回最初的名字,這就是 Apache Doris 的由來。
- 之后在美團, 小米, 字節跳動, 京東等互聯網企業被適用于核心業務實時數據分析。Apache Doris 與 Clickhouse 都是 MPP 數據庫領域的優秀產品,各自擅長的領域或適用的場景存在差異,所有用戶可以基于技術認知和業務需求來抉擇到底該選擇哪一款產品,甚至在大多場景里兩者是可以并存和相互補足的。
- 2020 年 2 月,百度 Doris 團隊的個別同學離職創業,基于 Apache Doris 之前的版本做了自己的商業化閉源產品 DorisDB ,這就是 StarRocks 的前身。DorisDB升級為StarRocks,并全面開源。
定義
StarRocks官網地址 https://www.starrocks.com/zh-CN/index 目前最新版本為2.2.0
StarRocks官網文檔地址 https://docs.starrocks.com/zh-cn/main/introduction/StarRocks_intro
StarRocks GitHub源碼地址 https://github.com/StarRocks/starrocks
- StarRocks是新一代極速全場景MPP數據庫。
- StarRocks充分吸收關系型OLAP數據庫和分布式存儲系統在大數據時代的優秀研究成果,在業界實踐的基礎上,進一步改進優化、升級架構,并增添了眾多全新功能,形成了全新的企業級產品。
- StarRocks致力于構建極速統一分析體驗,滿足企業用戶的多種數據分析場景,支持多種數據模型(明細模型、聚合模型、更新模型),多種導入方式(批量和實時),支持導入多達10000列的數據,可整合和接入多種現有系統(Spark、Flink、Hive、 ElasticSearch)。
- StarRocks兼容MySQL協議,可使用MySQL客戶端和常用BI工具對接StarRocks來進行數據分析。
- StarRocks采用分布式架構,對數據表進行水平劃分并以多副本存儲。集群規模可以靈活伸縮,能夠支持10PB級別的數據分析; 支持MPP框架,并行加速計算; 支持多副本,具有彈性容錯能力。
- StarRocks采用關系模型,使用嚴格的數據類型和列式存儲引擎,通過編碼和壓縮技術,降低讀寫放大;使用向量化執行方式,充分挖掘多核CPU的并行計算能力,從而顯著提升查詢性能。
發布路線
這個是StarRocks2021年前規劃,現在最新版本已為2.2.0
特性
- 架構精簡:StarRocks內部通過MPP計算框架完成SQL的具體執行工作。MPP框架本身能夠充分的利用多節點的計算能力,整個查詢并行執行,從而實現良好的交互式分析體驗。 StarRocks集群不需要依賴任何其他組件,易部署、易維護,極簡的架構設計,降低了StarRocks系統的復雜度和維護成本,同時也提升了系統的可靠性和擴展性。 管理員只需要專注于StarRocks系統,無需學習和管理任何其他外部系統。
- 全面向量化引擎:StarRocks的計算層全面采用了向量化技術,將所有算子、函數、掃描過濾和導入導出模塊進行了系統性優化。通過列式的內存布局、適配CPU的SIMD指令集等手段,充分發揮了現代CPU的并行計算能力,從而實現亞秒級別的多維分析能力。
- 智能查詢優化:StarRocks通過CBO優化器(Cost Based Optimizer)可以對復雜查詢自動優化。無需人工干預,就可以通過統計信息合理估算執行成本,生成更優的執行計劃,大大提高了Adhoc和ETL場景的數據分析效率。
- 聯邦查詢:StarRocks支持使用外表的方式進行聯邦查詢,當前可以支持Hive、MySQL、Elasticsearch三種類型的外表,用戶無需通過數據導入,可以直接進行數據查詢加速。
- 高效更新:StarRocks支持多種數據模型,其中更新模型可以按照主鍵進行upsert/delete操作,通過存儲和索引的優化可以在并發更新的同時實現高效的查詢優化,更好的服務實時數倉的場景。
- 智能物化視圖:StarRocks支持智能的物化視圖。用戶可以通過創建物化視圖,預先計算生成預聚合表用于加速聚合類查詢請求。StarRocks的物化視圖能夠在數據導入時自動完成匯聚,與原始表數據保持一致。并且在查詢的時候,用戶無需指定物化視圖,StarRocks能夠自動選擇最優的物化視圖來滿足查詢請求。
- 標準SQL:StarRocks支持標準的SQL語法,包括聚合、JOIN、排序、窗口函數和自定義函數等功能。StarRocks可以完整支持TPC-H的22個SQL和TPC-DS的99個SQL。此外,StarRocks還兼容MySQL協議語法,可使用現有的各種客戶端工具、BI軟件訪問StarRocks,對StarRocks中的數據進行拖拽式分析。
- 流批一體:StarRocks支持實時和批量兩種數據導入方式,支持的數據源有Kafka、HDFS、本地文件,支持的數據格式有ORC、Parquet和CSV等,支持導入多達10000列的數據。StarRocks可以實時消費Kafka數據來完成數據導入,保證數據不丟不重(exactly once)。StarRocks也可以從本地或者遠程(HDFS)批量導入數據。
- 高可用易擴展:StarRocks的元數據和數據都是多副本存儲,并且集群中服務有熱備,多實例部署,避免了單點故障。集群具有自愈能力,可彈性恢復,節點的宕機、下線、異常都不會影響StarRocks集群服務的整體穩定性。 StarRocks采用分布式架構,存儲容量和計算能力可近乎線性水平擴展。StarRocks單集群的節點規模可擴展到數百節點,數據規模可達到10PB級別。 擴縮容期間無需停服,可以正常提供查詢服務。 另外StarRocks中表模式熱變更,可通過一條簡單SQL命令動態地修改表的定義,例如增加列、減少列、新建物化視圖等。同時,處于模式變更中的表也可也正常導入和查詢數據。
使用場景
StarRocks可以滿足企業級用戶的多種分析需求,包括OLAP多維分析、定制報表、實時數據分析和Ad-hoc數據分析等。具體的業務場景包括:
- OLAP多維分析
- 用戶行為分析
- 用戶畫像、標簽分析、圈人
- 高維業務指標報表
- 自助式報表平臺
- 業務問題探查分析
- 跨主題業務分析
- 財務報表
- 系統監控分析
- 實時數據分析
- 電商大促數據分析
- 教育行業的直播質量分析
- 物流行業的運單分析
- 金融行業績效分析、指標計算
- 廣告投放分析
- 管理駕駛艙
- 探針分析APM(Application Performance Management)
- 高并發查詢
- 廣告主報表分析
- 零售行業渠道人員分析
- SaaS行業面向用戶分析報表
- Dashbroad多頁面分析
- 統一分析
- 通過使用一套系統解決多維分析、高并發查詢、預計算、實時分析、Adhoc查詢等場景,降低系統復雜度和多技術棧開發與維護成本。
與其他分析層數倉框架對比,其極速統一架構如下
與Flink生態對接
基本概念和架構
系統架構圖
組件介紹
StarRocks 集群由 FE 和 BE 構成, 可以使用 MySQL 客戶端訪問 StarRocks 集群。
FrontEnd
簡稱 FE,是 StarRocks 的前端節點,負責管理元數據,管理客戶端連接,進行查詢規劃,查詢調度等工作。FE 接收 MySQL 客戶端的連接, 解析并執行 SQL 語句。
- 管理元數據, 執行 SQL DDL 命令, 用 Catalog 記錄庫, 表,分區,tablet 副本等信息。
- FE 的 SQL layer 對用戶提交的 SQL 進行解析,分析, 改寫, 語義分析和關系代數優化, 生產邏輯執行計劃。
- FE 的 Planner 負責把邏輯計劃轉化為可分布式執行的物理計劃,分發給一組 BE。
- FE 監督 BE,管理 BE 的上下線, 根據 BE 的存活和健康狀態, 維持 tablet 的副本的數量。
- FE 協調數據導入, 保證數據導入的一致性。
- FE 高可用部署,使用復制協議選主和主從同步元數據, 所有的元數據修改操作,由 FE leader 節點完成, FE follower 節點可執行讀操作。 元數據的讀寫滿足順序一致性。FE 的節點數目采用 2n+1,可容忍 n 個節點故障。當 FE leader 故障時,從現有的 follower 節點重新選主,完成故障切換。
BackEnd
簡稱 BE,是 StarRocks 的后端節點,負責數據存儲,計算執行,以及 compaction,副本管理等工作。
- BE 管理 tablet 的副本。
- BE 受 FE 指導, 創建或刪除 tablet。
- BE 接收 FE 分發的物理執行計劃并指定 BE coordinator 節點,在 BE coordinator 的調度下,與其他 BE worker 共同協作完成執行。
- BE 讀本地的列存儲引擎獲取數據, 并通過索引和謂詞下沉快速過濾數據。
- BE 后臺執行 compact 任務,減少查詢時的讀放大。
- 數據導入時, 由 FE 指定 BE coordinator, 將數據以 fanout 的形式寫入到 tablet 多副本所在的 BE 上。
其他組件
Broker
Broker 是 StarRocks 和 HDFS 對象存儲等外部數據對接的中轉服務,輔助提供導入導出功能,如需使用 broker load,spark load,備份恢復等功能需要安裝啟動 Broker。
- Hdfs Broker: 用于從 Hdfs 中導入數據到 StarRocks 集群,詳見 數據導入 章節。
StarRocksManager
StarRocksManager 是 StarRocks 企業版提供的管理工具,通過 Manager 可以可視化的進行 StarRocks 集群管理、在線查詢、故障查詢、監控報警、可視化慢查詢分析等功能。
手動部署
環境支持
集群節點需要以下環境支持:
- Linux (Centos 7+)
- 推薦 Oracle Java 1.8+
- CPU 需要支持 AVX2 指令集
- ulimit -n 配置 65535,啟動腳本會自動設置,需要啟動的用戶有設置 ulimit -n 權限
- 集群時鐘需同步
- 網絡需要萬兆網卡和萬兆交換機
通過 cat /proc/cpuinfo |grep avx2 命令查看節點配置,有結果則 cpu 支持 AVX2 指令集。
測試集群建議節點配置:BE 推薦 16 核 64GB 以上,FE 推薦 8 核 16GB 以上。建議 FE,BE 獨立部署。
系統參數配置建議:
關閉交換區,消除交換內存到虛擬內存時對性能的擾動。
echo 0 | sudo tee /proc/sys/vm/swappiness建議使用 Overcommit,把 cat /proc/sys/vm/overcommit_memory 設成 1。
echo 1 | sudo tee /proc/sys/vm/overcommit_memory部署
部署規劃
| 192.168.5.52 | FE、BE、Broker | |
| 192.168.5.53 | BE、Broker | |
| 192.168.12.28 | BE、Broker |
下載
# 從官網下載 wget https://www.starrocks.com/zh-CN/download/request-download/22/StarRocks-2.2.0-rc01.tar.gz # 下載的安裝包可直接解壓后進行安裝部署 tar -xvf StarRocks-2.2.0-rc02.tar.gz查看FE目錄結構
查看BE目錄結構
部署FE
- FE 的基本配置
- FE 的配置文件為 fe/conf/fe.conf, 此處僅列出其中 JVM 配置和元數據目錄配置,生產環境可參考 FE 參數配置 對集群進行詳細優化配置。
可以根據 FE 內存大小調整-Xmx8192m,為了避免 GC 建議 16G 以上,StarRocks 的元數據都在內存中保存。
# 第二步: 創建元數據目錄,需要與 fe.conf 中配置路徑保持一致: mkdir -p meta # 第三步: 啟動 FE 進程: bin/start_fe.sh --daemon # 第四步: 確認啟動 FE 啟動成功。- 查看日志 log/fe.log 確認。
- 如果 FE 啟動失敗,可能是由于端口號被占用,可修改配置文件 conf/fe.conf 中的端口號 http_port。
- 使用 jps 命令查看 java 進程確認 “StarRocksFe” 存在。
- 使用瀏覽器訪問 FE ip:http_port(默認 8030),打開 StarRocks 的 WebUI, 用戶名為 root, 密碼為空。
訪問 StarRocks 的 WebUI,http://192.168.5.52:8030
使用 MySQL 客戶端訪問 FE,這里默認 root 用戶密碼為空,端口為 fe/conf/fe.conf 中的 query_port 配置項,默認為 9030,查看 FE 狀態是正常
通過SQLyog的第三方MySQL客戶端連接和查詢結果
部署BE
BE 的基本配置:BE 的配置文件為 be/conf/be.conf,默認配置即可啟動集群,生產環境可參考 BE 參數配置對集群進行詳細優化配置。
BE 部署:通過以下命令啟動 be 并添加 be 到 StarRocks 集群, 一般至少在三個節點部署 3 個 BE 實例, 每個實例的添加步驟相同。
# 進入be的安裝目錄 cd StarRocks-2.2.0-rc02/be # 第一步: 創建數據目錄(當前設置為 be.conf 中默認 storage\_root\_path 配置項路徑): # 創建數據存儲目錄 mkdir -p storage # 第二步: 通過 mysql 客戶端添加 BE 節點:host 為與 priority\_networks 設置相匹配的 IP,port 為 BE 配置文件中的 heartbeat\_service\_port,默認為 9050。 mysql> ALTER SYSTEM ADD BACKEND "192.168.5.52:9050";如出現錯誤,需要刪除 BE 節點,可通過以下命令將 BE 節點從集群移除,host 和 port 與添加時一致:具體參考 擴容縮容。
mysql> ALTER SYSTEM decommission BACKEND "host:port"; # 第三步: 啟動 BE: bin/start_be.sh --daemon # 第四步: 查看 BE 狀態, 確認 BE 就緒:顯示isAlive 為 true,則說明 BE 正常接入集群。如果 BE 沒有正常接入集群,請查看 log 目錄下的 be.WARNING 日志文件確定原因。
如果日志中出現類似"backend ip saved in master does not equal to backend local ip127.0.0.1 vs. 192.168.5.22"的信息,說明 priority_networks 的配置存在問題。此時需要,先用以下命令 drop 掉原來加進去的 be,然后重新以正確的 IP 添加 BE。
mysql> ALTER SYSTEM DROPP BACKEND "192.168.5.22:9050";由于是初次啟動,如果在操作過程中遇到任何意外問題,都可以刪除并重新創建 storage 目錄,再從頭開始操作。
其他兩臺是相同部署方式,由于192.168.12.28上8040和8060端口已經被占用,所以配置文件的端口信息
啟動192.168.12.28的BE,查看
啟動192.168.5.52的BE,查看
部署Broker
配置文件為 apache_hdfs_broker/conf/apache_hdfs_broker.conf
注意:Broker 沒有也不需要 priority_networks 參數,Broker 的服務默認綁定在 0.0.0.0 上,只需要在 ADD BROKER 時,填寫正確可訪問的 Broker IP 即可。
如果有特殊的 hdfs 配置,復制線上的 hdfs-site.xml 到 conf 目錄下
啟動 broker:
cd StarRocks-2.2.0-rc02/apache_hdfs_broker bin/start_broker.sh --daemon添加 broker 節點到集群中,查看 broker 狀態:
mysql> 查看 broker 狀態:繼續部署其他兩個broker,三個broker的狀態都是正常
實戰使用
表創建示例
# 使用 root 用戶建立 example\_db 數據庫 mysql> create database example\_db; # 通過 `show databases;` 查看數據庫信息: mysql> show databases;
通過官方提供建表腳本創建表
建表語句說明
-
排序鍵
- StarRocks 表內部組織存儲數據時會按照指定列排序,這些列為排序列(Sort Key),明細模型中由 DUPLICATE KEY 指定排序列,以上 demo 中的 make_time, mache_verson 兩列為排序列。注意排序列在建表時應定義在其他列之前。排序鍵詳細描述以及不同數據模型的表的設置方法請參考 排序鍵。
-
字段類型
- StarRocks 表中支持多種字段類型,除 demo 中已經列舉的字段類型,還支持 BITMAP 類型,HLL 類型,Array 類型,字段類型介紹詳見 數據類型章節。
- 建表時盡量使用精確的類型。例如整形就不要用字符串類型,INT 類型滿足則不要使用 BIGINT,精確的數據類型能夠更好的發揮數據庫的性能。
-
分區,分桶
- PARTITION 關鍵字用于給表 [創建分區](https://docs.starrocks.com/zh-cn/main/sql-reference/sql-statements/data-definition/CREATE TABLE#Syntax),當前 demo 中使用 make_time 進行范圍分區,從 11 日到 15 日每天創建一個分區。StarRocks 支持動態生成分區,PROPERTIES 中的 dynamic_partition 開頭的相關屬性配置都是為表設置動態分區。詳見 動態分區管理。
- DISTRIBUTED 關鍵字用于給表 [創建分桶](https://docs.starrocks.com/zh-cn/main/sql-reference/sql-statements/data-definition/CREATE TABLE#Syntax),當前 demo 中使用 make_time, mache_verson 兩個字段通過 Hash 算法創建 32 個桶。
- 創建表時合理的分區和分桶設計可以優化表的查詢性能,分區分桶列如何選擇詳見 數據分布章節。
-
數據模型
- DUPLICATE 關鍵字表示當前表為明細模型,KEY 中的列表示當前表的排序列。StarRocks 支持多種數據模型,分別為 明細模型,聚合模型,更新模型,主鍵模型。不同模型的適用于多種業務場景,合理選擇可優化查詢效率。
-
索引
- StarRocks 默認會給 Key 列創建稀疏索引加速查詢,具體規則見 排序鍵和 shortke index 章節。支持的索引類型有 Bitmap 索引,Bloomfilter 索引 等。
注意:索引創建對表模型和列有要求,詳細說明見對應索引介紹章節。
- ENGINE 類型
- 默認為 olap。可選 mysql,elasticsearch,hive,ICEBERG 代表創建表為 外部表。
**本人博客網站 **IT小神 www.itxiaoshen.com
總結
以上是生活随笔為你收集整理的国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公交车管理系统
- 下一篇: 向量空间 vector space