3、技术选型与环境搭建:Hadoop生态选型(HDFS/YARN)、MPP数据库选型(ClickHouse/Doris)、资源规划与集群部署

好,咱们进入第三章。这一章说白了就是“选家伙事儿”和“搭台子”。

做储能数据仓库,最怕什么?最怕数据量一上来,查询慢得像蜗牛,或者集群动不动就崩。我见过不少团队,上来就搞一套特别重的技术栈,结果运维成本高得吓人,业务还没跑起来,先把自己累死了。

所以,技术选型一定要务实。咱们的目标是:够用、稳定、好维护

3.1 Hadoop生态选型:HDFS与YARN

先聊聊Hadoop。很多人觉得Hadoop过时了,其实不然。在储能场景下,HDFS依然是存储海量历史数据(比如电芯全生命周期数据、秒级采样数据)最靠谱的选择之一。

3.1.1 HDFS:存储的基石

我个人习惯,把HDFS当作“冷热数据”的冷备层。热数据放ClickHouse,温数据放HDFS,冷数据归档到对象存储。

为什么选HDFS?

  • 吞吐量高:适合大文件顺序读写。储能数据大多是时序的,写入模式很友好。
  • 容错性强:默认三副本,不用担心磁盘坏道。我在项目里遇到过硬盘集体报警,HDFS自动恢复数据,愣是没丢一条记录。
  • 生态成熟:Spark、Flink、Hive都能直接读HDFS,集成成本低。

避坑指南:我曾经犯过一个错,把大量小文件(比如几KB的日志)直接丢进HDFS。结果NameNode内存爆了,因为每个文件都要在内存里维护元数据。后来我养成了习惯,小文件先合并成大文件(比如按小时合并),再写入HDFS。

3.1.2 YARN:资源调度器

YARN的作用,说白了就是管好集群里的CPU和内存。你想想看,如果Spark任务和MapReduce任务抢资源,谁也别想跑好。

在储能场景下,我建议这样配置YARN:

  • 内存分配:给操作系统预留20%内存,剩下的给YARN。比如物理机128G内存,YARN可用约100G。
  • CPU虚拟核数(vcore):一般按物理核数的1.5~2倍配置。比如16核物理机,配置24~32个vcore。
  • 调度策略:用Fair Scheduler(公平调度器)。避免一个任务占着茅坑不拉屎,其他任务饿死。
小技巧:在YARN上跑Spark任务时,记得设置 spark.dynamicAllocation.enabled=true。这样任务会根据数据量自动调整executor数量,省资源。

3.2 MPP数据库选型:ClickHouse vs Doris

这是大家最纠结的地方。ClickHouse和Doris都是优秀的MPP数据库,但侧重点不同。我两个都用过,说说我的感受。

3.2.1 ClickHouse:极致查询速度

ClickHouse的强项是单表查询聚合分析。如果你要查“过去24小时,某型号电芯的电压平均值”,ClickHouse能在毫秒级返回。

适用场景

  • 时序数据聚合(储能最典型的需求)
  • 大宽表查询(比如把几百个传感器字段拼成一张表)
  • 日志分析

需要注意的地方

  • ClickHouse的多表JOIN性能一般。我建议尽量用大宽表,或者把JOIN逻辑放到应用层。
  • 它不支持事务。如果你需要严格的数据一致性(比如金融级),ClickHouse不太合适。但储能场景下,大部分是分析型查询,问题不大。
我的经验:在ClickHouse中,分区键和排序键的设计是性能的关键。比如按时间分区(toYYYYMMDD(timestamp)),排序键用(device_id, timestamp)。这样查询时能快速跳过无关分区。

3.2.2 Doris:全能型选手

Doris的优势在于高并发多表关联。如果你需要支持几百个用户同时跑报表,或者做复杂的OLAP分析,Doris更合适。

适用场景

  • 实时报表(比如储能电站的运营大屏)
  • 多表JOIN查询(比如关联设备表、告警表、运维表)
  • 数据更新频繁的场景(Doris支持部分列更新)

需要注意的地方

  • Doris的导入性能不如ClickHouse。大批量数据导入时,建议用Stream Load分批导入。
  • 它的存储压缩率比ClickHouse略低,磁盘占用会多一些。

3.2.3 选型对比表

维度 ClickHouse Doris
单表查询速度 极快(毫秒级) 快(秒级)
多表JOIN 一般 优秀
高并发 一般(适合低并发) 优秀(支持高并发)
数据更新 不支持(需重建分区) 支持(部分列更新)
存储压缩率 高(约5-10倍) 中(约3-5倍)
运维复杂度

我的建议:如果团队小、场景简单,优先选ClickHouse。如果业务复杂、并发高,选Doris。当然,也可以两个都用——ClickHouse做实时聚合,Doris做报表查询。

3.3 资源规划与集群部署

选好技术栈,接下来就是搭集群。资源规划做不好,后面全是坑。

3.3.1 硬件选型

我一般按这个标准来:

  • CPU:建议用Intel Xeon或AMD EPYC,核心数32核起步。ClickHouse和Doris都吃CPU。
  • 内存:至少128GB。ClickHouse的MergeTree引擎很吃内存,尤其是做GROUP BY时。
  • 磁盘:用NVMe SSD。别省这个钱,机械盘在大量数据写入时根本扛不住。容量按数据量的3倍预留(算上副本和冗余)。
  • 网络:万兆网卡。数据shuffle和副本同步都靠网络,千兆网卡会成为瓶颈。
警告:千万别用虚拟机跑生产环境!我见过有人用VMware搭ClickHouse,结果I/O延迟高得离谱,查询慢如蜗牛。物理机或裸金属云主机才是正道。

3.3.2 集群规模估算

假设每天新增100GB数据,保留90天,三副本:

  • 总存储需求:100GB × 90天 × 3副本 = 27TB
  • 单节点可用容量:假设每台机器4块2TB SSD,RAID10后可用4TB
  • 节点数:27TB ÷ 4TB ≈ 7台

再加上20%的冗余,建议部署9台。嗯,这个规模对于中型储能项目来说,基本够用。

3.3.3 部署架构图

下面这张图,是我常用的部署架构。你看一眼就明白了:

储能数据仓库集群部署架构 数据源层 BMS数据 | 逆变器数据 | 环境传感器 | 业务系统 数据接入层 Kafka(消息队列) | Flink(实时ETL) 存储与计算层 HDFS 冷数据存储 ClickHouse 实时聚合查询 Doris 报表与多维分析 应用层 Superset(可视化) | 自研API | 告警系统

这张图里,数据从BMS等系统流入Kafka,Flink做实时ETL后,分别写入ClickHouse(实时查询)和HDFS(冷备)。Doris则从HDFS或ClickHouse拉取数据,做复杂的报表分析。各层职责清晰,互不干扰。

3.3.4 部署步骤(简化版)

这里我给出一个最小化部署的步骤,适合测试环境:

# 1. 安装Hadoop(HDFS + YARN)
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -xzf hadoop-3.3.6.tar.gz
# 配置 core-site.xml, hdfs-site.xml, yarn-site.xml
# 启动
./sbin/start-dfs.sh
./sbin/start-yarn.sh

# 2. 安装ClickHouse
sudo apt-get install clickhouse-server clickhouse-client
sudo systemctl start clickhouse-server

# 3. 安装Doris(FE + BE)
# 下载并解压 Doris 二进制包
# 启动 FE
./fe/bin/start_fe.sh --daemon
# 启动 BE
./be/bin/start_be.sh --daemon

嗯,生产环境建议用Ansible或SaltStack做自动化部署,别手动一台台配,容易出错。

3.4 本章小结

这一章内容不少,我帮你捋一下重点:

  • HDFS:存冷数据,注意小文件问题。
  • YARN:管资源,用Fair Scheduler避免任务饿死。
  • ClickHouse:单表查询快,适合时序聚合。
  • Doris:多表JOIN强,适合报表分析。
  • 资源规划:CPU、内存、磁盘、网络,一个都不能少。

技术选型没有银弹。说白了,你得根据自己团队的能力和业务特点来选。别盲目追新,稳定压倒一切。

一句话总结:HDFS做冷存储,ClickHouse做实时查询,Doris做复杂分析。三层架构,各司其职。

专注资料整理