写点什么

大数据 -146 Apache Kudu Docker 快速部署:3 Master/5 TServer 实战与踩坑速查

作者:武子康
  • 2025-11-08
    山东
  • 本文字数:5053 字

    阅读完需:约 17 分钟

大数据-146 Apache Kudu Docker 快速部署:3 Master/5 TServer 实战与踩坑速查

TL;DR

  • 场景:在 Ubuntu 云主机上用 Docker Compose 快速起 Kudu 集群(Master×3,TServer×5)。

  • 结论:示例可直接跑通,但需注意 KUDU_QUICKSTART_IP、NTP、Hole Punching、端口与副本因子。

  • 产出:一套可复制的部署骨架 + 版本矩阵 + 常见错误速查卡(含定位/修复指令)。


版本矩阵


安装准备

硬件准备

  • 一台或者多台跑 kudu-master。建议一个 Master(无容错机制)、三个 Master(允许一个节点出错)、五个 Master(允许两个节点出错)

  • 一台或者多台机器跑 kudu-server。当需要使用副本,至少需要三个节点运行 kudu-server 服务。

操作系统

  • Ubuntu 云服务器(我的环境是三台小云服务器)

  • 内核和文件系统支持 Hole Punching 选项。

  • NTP 服务

  • xfs or ext4 formatterd drivers

存储要求

  • 尽量使用固态存储,显著提供 kudu 性能

环境说明

  • 如果你使用的是 CDH,需要 ClouderaManager 5.4.3 及以上的版本。

  • 三台云服务器,h121 启动 Master,h122 和 123 启动 TabletServer。

Dockerfile

https://github.com/apache/kudu/blob/master/docker/quickstart.yml
复制代码


官方的配置文件为:


  • 3 个 Master

  • 4 个 TabletServer


version: "3"services:  kudu-master-1:    image: apache/kudu:${KUDU_QUICKSTART_VERSION:-latest}    ports:      - "7051:7051"      - "8051:8051"    command: ["master"]    volumes:      - kudu-master-1:/var/lib/kudu    environment:      - KUDU_MASTERS=kudu-master-1:7051,kudu-master-2:7151,kudu-master-3:7251      - >        MASTER_ARGS=--fs_wal_dir=/var/lib/kudu/master        --rpc_bind_addresses=0.0.0.0:7051        --rpc_advertised_addresses=${KUDU_QUICKSTART_IP:?Please set KUDU_QUICKSTART_IP environment variable}:7051        --webserver_port=8051        --webserver_advertised_addresses=${KUDU_QUICKSTART_IP}:8051        --webserver_doc_root=/opt/kudu/www        --stderrthreshold=0        --use_hybrid_clock=false        --unlock_unsafe_flags=true
kudu-master-2: image: apache/kudu:${KUDU_QUICKSTART_VERSION:-latest} ports: - "7151:7151" - "8151:8151" command: ["master"] volumes: - kudu-master-2:/var/lib/kudu environment: - KUDU_MASTERS=kudu-master-1:7051,kudu-master-2:7151,kudu-master-3:7251 - > MASTER_ARGS=--fs_wal_dir=/var/lib/kudu/master --rpc_bind_addresses=0.0.0.0:7151 --rpc_advertised_addresses=${KUDU_QUICKSTART_IP}:7151 --webserver_port=8151 --webserver_advertised_addresses=${KUDU_QUICKSTART_IP}:8151 --webserver_doc_root=/opt/kudu/www --stderrthreshold=0 --use_hybrid_clock=false --unlock_unsafe_flags=true kudu-master-3: image: apache/kudu:${KUDU_QUICKSTART_VERSION:-latest} ports: - "7251:7251" - "8251:8251" command: ["master"] volumes: - kudu-master-3:/var/lib/kudu environment: - KUDU_MASTERS=kudu-master-1:7051,kudu-master-2:7151,kudu-master-3:7251 - > MASTER_ARGS=--fs_wal_dir=/var/lib/kudu/master --rpc_bind_addresses=0.0.0.0:7251 --rpc_advertised_addresses=${KUDU_QUICKSTART_IP}:7251 --webserver_port=8251 --webserver_advertised_addresses=${KUDU_QUICKSTART_IP}:8251 --webserver_doc_root=/opt/kudu/www --stderrthreshold=0 --use_hybrid_clock=false --unlock_unsafe_flags=true kudu-tserver-1: image: apache/kudu:${KUDU_QUICKSTART_VERSION:-latest} depends_on: - kudu-master-1 - kudu-master-2 - kudu-master-3 ports: - "7050:7050" - "8050:8050" command: ["tserver"] volumes: - kudu-tserver-1:/var/lib/kudu environment: - KUDU_MASTERS=kudu-master-1:7051,kudu-master-2:7151,kudu-master-3:7251 - > TSERVER_ARGS=--fs_wal_dir=/var/lib/kudu/tserver --rpc_bind_addresses=0.0.0.0:7050 --rpc_advertised_addresses=${KUDU_QUICKSTART_IP}:7050 --webserver_port=8050 --webserver_advertised_addresses=${KUDU_QUICKSTART_IP}:8050 --webserver_doc_root=/opt/kudu/www --stderrthreshold=0 --use_hybrid_clock=false --unlock_unsafe_flags=true kudu-tserver-2: image: apache/kudu:${KUDU_QUICKSTART_VERSION:-latest} depends_on: - kudu-master-1 - kudu-master-2 - kudu-master-3 ports: - "7150:7150" - "8150:8150" command: ["tserver"] volumes: - kudu-tserver-2:/var/lib/kudu environment: - KUDU_MASTERS=kudu-master-1:7051,kudu-master-2:7151,kudu-master-3:7251 - > TSERVER_ARGS=--fs_wal_dir=/var/lib/kudu/tserver --rpc_bind_addresses=0.0.0.0:7150 --rpc_advertised_addresses=${KUDU_QUICKSTART_IP}:7150 --webserver_port=8150 --webserver_advertised_addresses=${KUDU_QUICKSTART_IP}:8150 --webserver_doc_root=/opt/kudu/www --stderrthreshold=0 --use_hybrid_clock=false --unlock_unsafe_flags=true kudu-tserver-3: image: apache/kudu:${KUDU_QUICKSTART_VERSION:-latest} depends_on: - kudu-master-1 - kudu-master-2 - kudu-master-3 ports: - "7250:7250" - "8250:8250" command: ["tserver"] volumes: - kudu-tserver-3:/var/lib/kudu environment: - KUDU_MASTERS=kudu-master-1:7051,kudu-master-2:7151,kudu-master-3:7251 - > TSERVER_ARGS=--fs_wal_dir=/var/lib/kudu/tserver --rpc_bind_addresses=0.0.0.0:7250 --rpc_advertised_addresses=${KUDU_QUICKSTART_IP}:7250 --webserver_port=8250 --webserver_advertised_addresses=${KUDU_QUICKSTART_IP}:8250 --webserver_doc_root=/opt/kudu/www --stderrthreshold=0 --use_hybrid_clock=false --unlock_unsafe_flags=true kudu-tserver-4: image: apache/kudu:${KUDU_QUICKSTART_VERSION:-latest} depends_on: - kudu-master-1 - kudu-master-2 - kudu-master-3 ports: - "7350:7350" - "8350:8350" command: ["tserver"] volumes: - kudu-tserver-4:/var/lib/kudu environment: - KUDU_MASTERS=kudu-master-1:7051,kudu-master-2:7151,kudu-master-3:7251 - > TSERVER_ARGS=--fs_wal_dir=/var/lib/kudu/tserver --rpc_bind_addresses=0.0.0.0:7350 --rpc_advertised_addresses=${KUDU_QUICKSTART_IP}:7350 --webserver_port=8350 --webserver_advertised_addresses=${KUDU_QUICKSTART_IP}:8350 --webserver_doc_root=/opt/kudu/www --stderrthreshold=0 --use_hybrid_clock=false --unlock_unsafe_flags=true kudu-tserver-5: image: apache/kudu:${KUDU_QUICKSTART_VERSION:-latest} depends_on: - kudu-master-1 - kudu-master-2 - kudu-master-3 ports: - "7450:7450" - "8450:8450" command: ["tserver"] volumes: - kudu-tserver-5:/var/lib/kudu environment: - KUDU_MASTERS=kudu-master-1:7051,kudu-master-2:7151,kudu-master-3:7251 - > TSERVER_ARGS=--fs_wal_dir=/var/lib/kudu/tserver --rpc_bind_addresses=0.0.0.0:7450 --rpc_advertised_addresses=${KUDU_QUICKSTART_IP}:7450 --webserver_port=8450 --webserver_advertised_addresses=${KUDU_QUICKSTART_IP}:8450 --webserver_doc_root=/opt/kudu/www --stderrthreshold=0 --use_hybrid_clock=false --unlock_unsafe_flags=truevolumes: kudu-master-1: kudu-master-2: kudu-master-3: kudu-tserver-1: kudu-tserver-2: kudu-tserver-3: kudu-tserver-4: kudu-tserver-5:
复制代码

内容解释

  • version: "3":指定使用 Docker Compose 文件的版本。版本 3 是当前常用的版本,支持多种高级功能,适用于 Docker 1.13.0 及更高版本。

  • services:定义了多个服务,每个服务对应一个 Docker 容器。在本配置中,定义了多个 Kudu Master 和 Kudu Tablet Server(简称 TServer)。

  • volumes:定义了持久化存储卷,用于存储各个服务的数据,确保即使容器重新创建或删除,数据仍然保留。


3 个 Kudu Master 节点:


  • kudu-master-1

  • kudu-master-2

  • kudu-master-3


5 个 Kudu Tablet Server 节点:


  • kudu-tserver-1

  • kudu-tserver-2

  • kudu-tserver-3

  • kudu-tserver-4

  • kudu-tserver-5

Master

每个 Master 节点的配置基本相同,只是端口和持久化卷不同。以下以 kudu-master-1 为例进行解释:


kudu-master-1:  image: apache/kudu:${KUDU_QUICKSTART_VERSION:-latest}  ports:    - "7051:7051"    - "8051:8051"  command: ["master"]  volumes:    - kudu-master-1:/var/lib/kudu  environment:    - KUDU_MASTERS=kudu-master-1:7051,kudu-master-2:7151,kudu-master-3:7251    - >      MASTER_ARGS=--fs_wal_dir=/var/lib/kudu/master      --rpc_bind_addresses=0.0.0.0:7051      --rpc_advertised_addresses=${KUDU_QUICKSTART_IP:?Please set KUDU_QUICKSTART_IP environment variable}:7051      --webserver_port=8051      --webserver_advertised_addresses=${KUDU_QUICKSTART_IP}:8051      --webserver_doc_root=/opt/kudu/www      --stderrthreshold=0      --use_hybrid_clock=false      --unlock_unsafe_flags=true
复制代码


  • udu-master-1:服务名称,标识第一个 Kudu Master 节点。

  • image: apache/kudu:${KUDU_QUICKSTART_VERSION:-latest}:指定使用的 Docker 镜像。apache/kudu 是官方 Kudu 镜像。

  • ${KUDU_QUICKSTART_VERSION:-latest}:使用环境变量 KUDU_QUICKSTART_VERSION 指定版本,如果未设置,则默认使用 latest。

  • ports:"7051:7051":将主机的 7051 端口映射到容器的 7051 端口,用于 Kudu Master 的 RPC 通信。"8051:8051":将主机的 8051 端口映射到容器的 8051 端口,用于 Kudu Master 的 Web 界面。

  • command: ["master"]:指定容器启动时运行的命令,这里启动 Kudu Master 进程。

  • volumes:kudu-master-1:/var/lib/kudu:将 Docker 卷 kudu-master-1 挂载到容器内的 /var/lib/kudu 目录,用于持久化存储数据。

  • KUDU_MASTERS:定义了集群中所有 Master 节点的地址,格式为 hostname:port,以逗号分隔。

启动服务

export KUDU_QUICKSTART_IP=$(ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | tail -1)docker-compose up -d
复制代码

访问服务

http://localhost:8051/
复制代码


这样我们的服务就顺利的启动了:


错误速查

其他系列

🚀 AI 篇持续更新中(长期更新)

AI 炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用 AI 工具指南!AI-调查研究-108-具身智能 机器人模型训练全流程详解:从预训练到强化学习与人类反馈🔗 AI模块直达链接

💻 Java 篇持续更新中(长期更新)

Java-154 深入浅出 MongoDB 用 Java 访问 MongoDB 数据库 从环境搭建到 CRUD 完整示例 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务正在更新!深入浅出助你打牢基础!🔗 Java模块直达链接

📊 大数据板块已完成多项干货更新(300 篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解🔗 大数据模块直达链接

发布于: 3 小时前阅读数: 6
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-146 Apache Kudu Docker 快速部署:3 Master/5 TServer 实战与踩坑速查_大数据_武子康_InfoQ写作社区