第二章 服务器规划与操作系统初始化
好,咱们正式开始搭建集群的第一步。说实话,这一步最容易被忽视,但恰恰是决定集群命运的关键。我见过太多人一上来就装 Hadoop,结果跑起来各种卡顿、报错,最后回头一看——硬件规划就没做好。
这一章,咱们把硬件选型、操作系统配置、SSH 免密登录这些基础打牢。你想想看,地基不稳,楼盖得再高也是危房。
2.1 硬件选型:CPU/内存/磁盘/网络
硬件选型没有标准答案,但有几个核心原则。我个人习惯是「按角色分配,按场景取舍」。
2.1.1 CPU 选型
Hadoop 是计算密集型吗?其实不是。它更吃 CPU 的并发能力,而不是单核主频。
- NameNode:对 CPU 要求不高,4-8 核足够。它主要处理元数据请求,不是计算节点。
- DataNode:建议 8-16 核。数据读写、计算任务都在这里跑。
- NodeManager:跟 DataNode 混部时,CPU 要留余量。我建议至少 12 核起步。
2.1.2 内存选型
内存是 Hadoop 的命根子。为什么?因为 MapReduce 和 Spark 都是内存计算模型。
| 节点角色 | 建议内存 | 说明 |
|---|---|---|
| NameNode | 64GB - 128GB | 元数据全在内存里,文件越多越吃内存 |
| DataNode | 128GB - 256GB | 计算任务的内存大户 |
| SecondaryNameNode | 32GB - 64GB | 合并 edit logs 时比较吃内存 |
我在项目中遇到过,一个客户把 NameNode 只配了 16GB 内存,结果集群文件数刚到 500 万就开始频繁 GC。嗯,后来加了 64GB 才稳住。
2.1.3 磁盘选型
磁盘是 Hadoop 的仓库。说白了,数据存哪?就存磁盘上。
- 容量:单盘 4TB - 8TB 比较常见。别用 1TB 的小盘,管理成本高。
- 类型:SATA SSD 做热数据层,HDD 做冷数据层。全 SSD 太贵,全 HDD 太慢。
- 数量:每台 DataNode 建议 12-24 块盘。盘太少,I/O 并发上不去。
- RAID:Hadoop 自己有副本机制,所以别做 RAID 5/6。用 JBOD 直通模式,性能最好。
2.1.4 网络选型
网络是集群的血管。数据在节点间 shuffle、复制,全靠网络。
- 万兆网络:这是底线。千兆网络在 10 节点以上就会成为瓶颈。
- 交换机:建议用堆叠或 Spine-Leaf 架构。别用单台交换机,单点故障。
- 网卡绑定:做 bond 4(802.3ad),提升带宽和冗余。
你想想看,一个 100 节点的集群,每天 PB 级的数据流动。网络不行,再好的 CPU 和内存也白搭。
2.2 操作系统配置
操作系统是 Hadoop 的土壤。土壤不好,种子再好也长不大。我一般用 CentOS 7.9 或 Rocky Linux 8.x,稳定第一。
2.2.1 内核参数调优
Hadoop 对网络和文件系统很敏感。内核参数不改,性能差一大截。
# /etc/sysctl.conf 关键参数
# 网络优化
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
# 文件系统优化
vm.swappiness = 1
vm.dirty_ratio = 30
vm.dirty_background_ratio = 10
# 最大文件打开数
fs.file-max = 1000000
这里重点说下 vm.swappiness。我建议设成 1,甚至 0。为什么?Hadoop 进程吃内存,一旦触发 swap,性能直接崩。我在生产环境见过,swappiness 默认 60,结果 DataNode 进程被 swap 出去,整个集群响应慢了 10 倍。
2.2.2 文件句柄限制
Hadoop 会打开大量文件。DataNode 上每个 block 对应一个文件句柄。你想想看,一个节点存了 10 万个 block,就要打开 10 万个句柄。
# /etc/security/limits.conf
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 65536
* hard nproc 65536
# /etc/security/limits.d/20-nproc.conf
* soft nproc 65536
我曾经遇到一个坑:只改了 limits.conf,没改 20-nproc.conf。结果用户进程数还是被限制在 4096。排查了半天才发现是这文件覆盖了配置。
2.2.3 时间同步
时间不同步,Hadoop 会出各种诡异问题。比如 HDFS 的 lease 过期、Kerberos 认证失败。
我推荐用 chrony,比 ntp 更精准、更稳定。
# 安装 chrony
yum install -y chrony
# 配置 /etc/chrony.conf
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
allow 192.168.1.0/24
# 启动并设置开机自启
systemctl enable chronyd
systemctl start chronyd
# 验证同步状态
chronyc sources -v
chronyc tracking
2.3 SSH 免密登录
Hadoop 集群管理,说白了就是靠 SSH 在各节点间发号施令。没有免密登录,你每次启动集群都要输密码,那画面太美我不敢看。
2.3.1 生成密钥对
在 NameNode 上操作,生成 RSA 密钥对。
# 生成密钥对,一路回车
ssh-keygen -t rsa -b 4096 -P '' -f ~/.ssh/id_rsa
# 查看公钥
cat ~/.ssh/id_rsa.pub
2.3.2 分发公钥
把公钥复制到所有 DataNode 上。包括 NameNode 自己。
# 复制到本机
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 复制到其他节点
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@datanode1
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@datanode2
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@datanode3
2.3.3 验证免密登录
# 测试连接
ssh hadoop@datanode1 "hostname"
ssh hadoop@datanode2 "hostname"
# 如果不需要密码直接返回主机名,就成功了
for 循环加 sshpass,一次搞定所有节点。但生产环境建议手动操作,避免密码泄露。
2.3.4 常见问题
- 权限问题:
~/.ssh目录权限必须是 700,authorized_keys必须是 600。否则 SSH 会拒绝使用。 - SELinux 干扰:如果免密登录失败,检查 SELinux 状态。我建议直接关闭 SELinux,省心。
- 防火墙:确保 22 端口互通。或者干脆在测试环境关掉防火墙。
# 关闭 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
嗯,到这里,服务器规划和操作系统初始化就搞定了。别小看这些基础工作,我见过太多人在这上面栽跟头。你把这些做好了,后面搭建 Hadoop 就是水到渠成的事。
下一章,咱们开始装 Hadoop 集群。准备好了吗?