(一)集群规划
| 节点序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| NameNode | 1 | 1 | ||||||||
| DataNode | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||
| ResourceManager | 1 | 1 | ||||||||
| NodeManager | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||
| ZooKeeper | 1 | 1 | 1 | |||||||
| Kafka | 1 | 1 | 1 | |||||||
| Flume | 1 | 1 | 1 | |||||||
| HIVE | 1 | 1 | ||||||||
| MySQL | 1 | 1 | ||||||||
| Spark | 1 | 1 | ||||||||
| Flink | 1 | 1 | ||||||||
| HBase | 1 | 1 | 1 | |||||||
| DolphinScheduler | 1 | 1 | 1 |
| 节点序号 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
|---|---|---|---|---|---|---|---|---|---|
| Redis | 1 | 1 | 1 | ||||||
| ClickHouse | 1 | 1 | 1 | ||||||
| ElasticSearch | 1 | 1 | 1 |
- 节点类型 分为 管理节点(NameNode、ResourceManager…) 和 工作节点(DataNode、NodeManager…)
- 客户端(HIVE、Spark等)集中在一起,便于访问
- 内存消耗较大(HBase、NameNode、Redis、ClickHouse等)的要分开
- ZooKeeper、Kafka 、Flume数据传输较紧密,放一起
- 其它待补充:Azkaban(作业调度)、Zabbix(服务器监控)、Atlas(元数据管理)…
(二)设备
| 用途 | 内存(GB) | CPU | 磁盘(TB) | 数量 | CPU与内存配比 |
|---|---|---|---|---|---|
| 生产-大数据 | 128 | 16核32线程 | 8 | 20 | 1:4 |
| 生产-日志服务器 | 16 | 4核8线程 | 2 | 3 | 1:2 |
| 生产-算法 | 64 | 16核(GPU) | 2 | 1 | 1:2 |
| CPU与内存配比 | 类型 | 应用 |
|---|---|---|
| 1:2 | 计算型 | 个人电脑;低并发量的Web服务 |
| 1:4 | 通用型 | 高并发量的Web服务 |
| 1:8 | 内存型 | 大数据 |
物理机需要机房(场地费、电费…)和机房运维人员
规模较小的情况下,物理机总成本高于云主机
初创企业首选云主机,大企业可选物理机
涉密数据(例如金融)首选物理机
建议大数据集群CPU与内存配比为1比6~8
(三)数据量
-
每天:百万 日活,十万订单
-
百万日活
每个活跃用户约100条日志,每条日志约1KB
每天日志条数 ≈ 1百 x 1百万 ≈ 1亿
每天日志数据量 ≈ 1KB x 1亿 ≈ 100GB -
十万订单
每个订单约10行数据,每行数据约1KB
每天订单数据量 ≈ 1KB x 10 x 100,000 ≈ 1GB -
每天数据量 ≈ 100GB + 1GB ≈ 100GB
补充:
近年的普通电商,没有各种乱七八糟的让人沉浸的短视频、段子、游戏等,下单率通常在9%
如果电商中融入让人沉迷于刷的短视频,流量会提升而下单率会下降
下单后不一定付款,下单后付款率大概90%(折算付款率8.1%)
(四)硬盘
- 预留空间:30%
HDFS
-
HDFS副本数:3
LZO压缩+Parquet列式存储:10G=>1G -
ODS层每天 ≈ 100G x 3 / 10 ≈ 30G
| 数仓分层 | 磁盘占用 | 备注 |
|---|---|---|
| ODS层 | 30G | 压缩+列式存储+副本策略(100=>30) |
| DWD层 | 30G | 压缩+列式存储+副本策略(100=>30) |
| DWS+DWT层 | 140G | 列式存储+副本策略 |
| ADS | 忽略不计 | 不使用压缩,不使用列式存储 |
-
日志数据+业务数据
数仓一年 ≈ 200G/天 x 360天 ≈ 72T
硬盘一年 ≈ 72T / (1-0.3) ≈ 100T -
仅业务数据(MySQL)
数仓一年 ≈ 7T
硬盘一年 ≈ 10T
Kafka
-
保存时间:3天
副本数:2 -
Kafka数据量 ≈ 100GB x 2 x 3 ≈ 600GB
硬盘建议:1T
日志服务器
- 保存时间:30天
数据量 ≈ 100G/天 x 30天 ≈ 3T
硬盘建议:5T
(五)峰值分析
- 流量分布:遵循 二八原则
- 预热期:流量(大幅)上升,付款率下降
- 开售期:流量上升,订单(大幅)上升,付款率上升
按秒
平
均
每
秒
日
志
数
据
量
≈
100
G
B
60
×
60
×
24
≈
1.2
M
B
平均每秒日志数据量 \approx \frac{100GB}{60 \times 60 \times 24} \approx 1.2MB
平均每秒日志数据量≈60×60×24100GB≈1.2MB
高
峰
期
每
秒
日
志
数
据
量
≈
平
均
每
秒
数
据
量
×
10
≈
12
M
B
高峰期每秒日志数据量 \approx 平均每秒数据量 \times 10 \approx 12MB
高峰期每秒日志数据量≈平均每秒数据量×10≈12MB
按小时
| 高峰时段 | 低谷时段 |
|---|---|
| 22、23点 | 3、4、5点 |
| 活动 | 流量高峰时段 | 订单高峰时段 | 备注 |
|---|---|---|---|
| 无 | [11,12,13],[21,22,23] | [11,12,13],[21,22,23] | 午休,晚上下班 |
| 大促 | [23,0,1] | [0,1] | 近年大促多是零点肝的玩法 |
按天
流
量
大
促
≈
流
量
日
常
×
2
流量_{大促} \approx 流量_{日常} \times 2
流量大促≈流量日常×2
订
单
大
促
≈
订
单
日
常
×
10
订单_{大促} \approx 订单_{日常} \times 10
订单大促≈订单日常×10
(六)内存 & CPU
| 服务名 | 内存 | 配置文件 | 参数 | 默认值 | 备注 |
|---|---|---|---|---|---|
| NameNode | 动态分配 | ||||
| NodeManager | 100G | yarn-site.xml | yarn.nodemanager.resource.memory-mb | -1 | 多数情况默认8192MB |
| Kafka | 4~6G | kafka-server-start.sh | KAFKA_HEAP_OPTS | -Xms1G -Xmx1G | |
| Flume | 4~6G | flume-env.sh | JAVA_OPTS | ||
| HBase | 48G | hbase-env.sh | |||
| HIVE | hive-env.sh | HADOOP_HEAPSIZE | |||
| Redis | maxmemory |
| 集群参数 | 总虚拟核心数 | 总内存 | CPU与内存配比 |
|---|---|---|---|
| YARN参数值 | 100 | 600G | 1:6 |
Spark任务的内存和核心数(并行度优化):https://yellow520.blog.youkuaiyun.com/article/details/119932541
(七)组织架构
| IT部门小组 | 人员 | 人数 | 合计72 |
|---|---|---|---|
| 架构组 | 架构师 | 1 | 1 |
| 后端组 | Java工程师 | 30 | 30 |
| 前端组 | 前端工程师 | 15 | 15 |
| 测试组 | 测试工程师 | 10 | 10 |
| 运维组 | 运维工程师 | 6 | 6 |
| 数据组 | 大数据平台工程师 大数据开发工程师 算法工程师 Python工程师 | 1 6 2 1 | 10 |
(八)工作量
-
1个业务系统的MySQL约150个表
服役的约80
导入到数仓ods的大概40+前端埋点表几个
dim约20
dwd约20
dws约20
dwt约5
ads约30
一个ads表,指标10个
表总数:100+
指标总是200+;常用指标数十个 -
离线任务时间
Sqoop导MySQL到HIVE:30分钟内
前端or物联网数据Kafka到HDFS时间:1h+
HIVE时间,逐个SQL执行(不并行):2h+
859



被折叠的 条评论
为什么被折叠?



