引言
現代數據處理在多維度面臨嚴峻挑戰,一方面,數據量的持續增長致使傳統存儲成本居高不下,非結構化數據所佔比例日益攀升,進一步加重了存儲負擔,且數據質量問題推高了存儲和清洗成本;另一方面,企業內部往往存在多套系統,數據難以集成,這對數據分析的成本和時效性也提出了更高的要求。
Apache Doris 作為一款具備高性能的實時分析數據庫,擁有湖倉一體的能力。當它與 MinIO 這樣高性能且 S3 兼容的對象存儲系統相結合時,能夠構建出一個高效且具備低成本特性的數據分析系統。本文將介紹基於 Apache Doris 和 MinIO 的存算分離部署教程與使用實踐。
為什麼選擇 Apache Doris 和 MinIO
Apache Doris 是一款基於 MPP 架構的高性能、實時分析型數據庫。它以高效、簡單和統一的特性著稱,能夠在亞秒級的時間內返回海量數據的查詢結果。Doris 具備以下優勢:
- 高性能:在海量數據下實現亞秒級查詢響應,支持高併發點查詢和複雜分析。
- 實時分析:支持實時數據導入和查詢,適合需要即時洞察的業務場景。
- 易用性:設計簡單,操作和維護成本低。
- 可擴展性:通過 MPP 架構實現水平擴展,處理大規模數據和高併發請求。
- 多場景支持:適用於報表分析、即席查詢、用户畫像、日誌檢索等多種場景。
- 強大集成性:可與 MySQL、PostgreSQL、Hive、Flink 等數據源和工具無縫集成。
- 活躍社區:擁有超過 600 名貢獻者和全球 5000 多家企業的生產環境應用,得到 TikTok、Baidu 等巨頭的驗證。
與此同時,Doris 還支持存算一體和存算分離兩種部署模式,在存算一體模型下,Doris 會在內部存儲數據,而在存算分離模式下,Doris 可以選擇第三方存儲系統,如 MinIO。
MinIO 是一個開源、分佈式對象存儲系統,專為高性能和雲原生工作負載設計。其主要優勢包括:
- 高性能:Minio 提供快速的數據訪問,滿足實時分析需求。
- 可擴展性:支持水平擴展,能夠輕鬆應對數據量增長。
- 成本效益:作為開源軟件,Minio 可在本地部署,避免雲存儲的高昂費用。
- S3 兼容性:與 Amazon S3 API 完全兼容,易於與現有工具和應用集成。
- 分佈式架構:通過擦除碼(Erasure Coding)技術,提供高可用性和數據冗餘。
- 靈活部署:支持裸金屬、容器(如 Kubernetes)或雲平台部署,適應多種環境。
這些特性使 Minio 成為 Apache Doris 存算分離架構的理想存儲後端。
部署指南
01 規劃
在我們進行部署之前,需要進行容量規劃,如果你部署的是在生產環節,那麼你應該考慮使用更高規格配置的機器,並且將各個組件獨立部署。
軟件版本準備:
服務器規劃:
02 準備工作
-
操作系統參數修改
swapoff -a cat >> /etc/sysctl.conf << EOF vm.max_map_count = 2000000 EOF # Take effect immediately sysctl -p vi /etc/security/limits.conf * soft nofile 1000000 * hard nofile 1000000 -
安裝必要的命令
apt update apt install -y net-tools apt install -y cron apt install -y iputils-ping
03 部署 MinIO
-
下載 MinIO:訪問 MinIO 下載頁面,選擇適合的版本和操作系統。
wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio -
在每個節點上啓動 MinIO 服務器:
export MINIO_REGION_NAME=us-east-1 export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=minioadmin mkdir -p /mnt/disk{1..4}/minio nohup minio server --address :9000 --console-address :9001 http://172.20.1.{2...5}:9000/mnt/disk{1...4}/minio 2>&1 & -
配置 MinIO 客户端:
wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc ./mc alias set myminio http://127.0.0.1:9000 minio minioadmin ./mc mb myminio/doris注意:如果 MinIO 部署在本地網絡且未啓用 TLS,需在 endpoint 中顯式添加“http://”。
04 部署 Doris Manager
-
下載 Doris Manager
wget https://enterprise-doris-releases.oss-accelerate.aliyuncs.com/doris-manager/velodb-manager-25.0.0-x64-bin.tar.gz -
解壓並啓動服務
tar -zxf velodb-manager-25.0.0-x64-bin.tar.gz cd velodb-manager-25.0.0-x64-bin/webserver/bin bash start.sh -
服務啓動後,通過瀏覽器訪問 http://<Doris-Manager-IP>:8004 即可進入管理界面並根據指引創建賬號
05 部署 Doris
-
下載 Doris
wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-3.0.6.2-bin-x64.tar.gz mv apache-doris-3.0.6.2-bin-x64.tar.gz /opt/downloads/doris -
進入主界面,根據指引創建集羣
-
選擇指定版本並設置 root 密碼
-
填寫 MinIO 信息
-
填寫節點信息
-
分別在每個節點執行以下命令
wget http://172.20.1.2:8004/api/download/deploy.sh -O deploy_agent.sh && chmod +x deploy_agent.sh && ./deploy_agent.sh - 在界面上填寫節點 IP
-
-
配置 FE 節點
-
配置 BE 節點
-
部署你的集羣
開始查詢
01 準備數據
-
進入查詢頁面
-
創建 Doris 表:
CREATE DATABASE IF NOT EXISTS `test`; USE `test`; CREATE TABLE `amazon_reviews` ( `review_date` int(11) NULL, `marketplace` varchar(20) NULL, `customer_id` bigint(20) NULL, `review_id` varchar(40) NULL, `product_id` varchar(10) NULL, `product_parent` bigint(20) NULL, `product_title` varchar(500) NULL, `product_category` varchar(50) NULL, `star_rating` smallint(6) NULL, `helpful_votes` int(11) NULL, `total_votes` int(11) NULL, `vine` boolean NULL, `verified_purchase` boolean NULL, `review_headline` varchar(500) NULL, `review_body` string NULL ) ENGINE=OLAP DUPLICATE KEY(`review_date`) COMMENT 'OLAP' DISTRIBUTED BY HASH(`review_date`) BUCKETS 16 PROPERTIES ( "compression" = "ZSTD" ); -
下載亞馬遜評論數據:
wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_2010.snappy.parquet -
導入數據到 Doris:
curl --location-trusted -u root:<your password> \ -T amazon_reviews_2010.snappy.parquet \ -H "format:parquet" \ http://127.0.0.1:8030/api/test/amazon_reviews/_stream_load - 登錄 MinIO 控制枱,查看數據大小
02 查詢
SELECT
product_id,
AVG(product_title),
AVG(star_rating) AS rating,
COUNT() AS count
FROM
amazon_reviews
WHERE
review_body LIKE '%is super awesome%'
GROUP BY
product_id
ORDER BY
count DESC,
rating DESC,
product_id
LIMIT 5;
總結
在導入相同數據(3 副本配置)方面,相較於存算一體模式 3.98 GB 的存儲佔用,採用 MinIO 的存算分離模式僅佔用 1.3 GB,存儲佔用是存算一體模式的 1/3;與此同時,在數據導入速度方面,採用 MinIO 僅需 15 秒,而存算一體模式需要 61 秒,導入速度快 4 倍。
通過結合 MinIO 和 Apache Doris 的存算分離架構,用户可以充分利用 Minio 的高性能、低成本對象存儲和 Doris 的實時分析能力。這種架構不僅提升了系統的可擴展性和靈活性,還顯著降低了存儲成本,同時確保了業務負載的隔離和穩定性。希望本教程能幫助您快速部署並體驗這一高效的數據處理解決方案。