Stories

Detail Return Return

更高效的數據處理解決方案:基於 MinIO 部署 Apache Doris 存算分離版本實踐 - Stories Detail

引言

現代數據處理在多維度面臨嚴峻挑戰,一方面,數據量的持續增長致使傳統存儲成本居高不下,非結構化數據所佔比例日益攀升,進一步加重了存儲負擔,且數據質量問題推高了存儲和清洗成本;另一方面,企業內部往往存在多套系統,數據難以集成,這對數據分析的成本和時效性也提出了更高的要求。

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。

為什麼選擇 Apache Doris 和 MinIO.png

MinIO 是一個開源、分佈式對象存儲系統,專為高性能和雲原生工作負載設計。其主要優勢包括:

  • 高性能:Minio 提供快速的數據訪問,滿足實時分析需求。
  • 可擴展性:支持水平擴展,能夠輕鬆應對數據量增長。
  • 成本效益:作為開源軟件,Minio 可在本地部署,避免雲存儲的高昂費用。
  • S3 兼容性:與 Amazon S3 API 完全兼容,易於與現有工具和應用集成。
  • 分佈式架構:通過擦除碼(Erasure Coding)技術,提供高可用性和數據冗餘。
  • 靈活部署:支持裸金屬、容器(如 Kubernetes)或雲平台部署,適應多種環境。

這些特性使 Minio 成為 Apache Doris 存算分離架構的理想存儲後端。

部署指南

01 規劃

在我們進行部署之前,需要進行容量規劃,如果你部署的是在生產環節,那麼你應該考慮使用更高規格配置的機器,並且將各個組件獨立部署。

軟件版本準備:

規劃-1.png

服務器規劃:

規劃-2.png

02 準備工作

  1. 操作系統參數修改

    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
  2. 安裝必要的命令

    apt update
    apt install -y net-tools
    apt install -y cron
    apt install -y iputils-ping

03 部署 MinIO

  1. 下載 MinIO:訪問 MinIO 下載頁面,選擇適合的版本和操作系統。

    wget https://dl.min.io/server/minio/release/linux-amd64/minio
    chmod +x minio
  2. 在每個節點上啓動 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 &
  3. 配置 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

  1. 下載 Doris Manager

      wget https://enterprise-doris-releases.oss-accelerate.aliyuncs.com/doris-manager/velodb-manager-25.0.0-x64-bin.tar.gz
  2. 解壓並啓動服務

    tar -zxf velodb-manager-25.0.0-x64-bin.tar.gz
    cd velodb-manager-25.0.0-x64-bin/webserver/bin
    bash start.sh
  3. 服務啓動後,通過瀏覽器訪問 http://<Doris-Manager-IP>:8004 即可進入管理界面並根據指引創建賬號

    部署 Doris Manager.png

05 部署 Doris

  1. 下載 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
  2. 進入主界面,根據指引創建集羣

    部署 Doris-1.png

  3. 選擇指定版本並設置 root 密碼

    部署 Doris-2.png

  4. 填寫 MinIO 信息

    部署 Doris-3.png

  5. 填寫節點信息

    1. 分別在每個節點執行以下命令

      wget http://172.20.1.2:8004/api/download/deploy.sh -O deploy_agent.sh && chmod +x deploy_agent.sh && ./deploy_agent.sh
    2. 在界面上填寫節點 IP
      部署 Doris-4.png
  6. 配置 FE 節點

    部署 Doris-5.png

  7. 配置 BE 節點

    部署 Doris-6.png

  8. 部署你的集羣

    部署 Doris-7.png

    部署 Doris-8.png

開始查詢

01 準備數據

  1. 進入查詢頁面

    準備數據-1.png

    準備數據-2.png

  2. 創建 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"
    );
  3. 下載亞馬遜評論數據:

    wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_2010.snappy.parquet
  4. 導入數據到 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
  5. 登錄 MinIO 控制枱,查看數據大小
    登錄 MinIO 控制枱.png

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 的實時分析能力。這種架構不僅提升了系統的可擴展性和靈活性,還顯著降低了存儲成本,同時確保了業務負載的隔離和穩定性。希望本教程能幫助您快速部署並體驗這一高效的數據處理解決方案。

user avatar Rocokingdom2024 Avatar hashdata Avatar jianweilai Avatar huaweichenai Avatar infodator Avatar junyidedalianmao Avatar chen_5ec331606ce75 Avatar nizi_60e514d097c9a Avatar openanolis Avatar danxiaodezixingche Avatar jueqiangdeshitou_ Avatar shumile_5f6954c414184 Avatar
Favorites 16 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.