本文档风哥主要介绍Hadoop集群规划与服务器环境准备,包括Hadoop集群规划原则、Hadoop节点角色划分、Hadoop环境要求概述、Hadoop硬件资源规划、Hadoop存储规划、Hadoop网络规划、Hadoop操作系统配置、Hadoop内核参数优化、Hadoop用户与目录配置、Hadoop集群拓扑设计、Hadoop机架感知配置、Hadoop环境初始化脚本等内容,风哥教程参考Hadoop官方文档Cluster Setup、Getting Started等内容,适合大数据运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 Hadoop集群规划原则
Hadoop集群规划需要遵循以下原则:高可用性、可扩展性、高性能、安全性、可维护性。更多视频教程www.fgedu.net.cn
- 高可用性:关键组件必须配置HA,避免单点故障
- 可扩展性:支持横向扩展,方便扩容
- 高性能:合理分配资源,优化性能
- 安全性:配置认证授权,保障数据安全
- 可维护性:便于运维管理和故障排查
1.2 Hadoop节点角色划分
Hadoop集群节点角色划分:
| 节点类型 | 部署服务 | 硬件要求 | 数量建议 |
|---|---|---|---|
| Master节点 | NameNode、ResourceManager | 高CPU、大内存 | 2-3台(HA) |
| Worker节点 | DataNode、NodeManager | 大磁盘、高IO | 3台以上 |
| 协调节点 | ZooKeeper、JournalNode | 中等配置 | 3台以上 |
| 客户端节点 | Hive、Spark、Sqoop | 中等配置 | 2-3台 |
1.3 Hadoop环境要求概述
Hadoop环境要求包括硬件要求、操作系统要求、网络要求、软件要求等:
- 硬件要求:CPU、内存、磁盘、网络
- 操作系统要求:Linux系统、内核版本、系统参数
- 网络要求:网络带宽、网络延迟、网络隔离
- 软件要求:JDK、SSH、NTP、Python
Part02-生产环境规划与建议
2.1 Hadoop硬件资源规划
Hadoop硬件资源规划需要根据业务规模和性能要求进行合理配置:
## NameNode硬件配置
– CPU:16-32核
– 内存:64GB-256GB(根据文件数量调整)
* 每100万文件约需1GB内存
* 建议预留50%内存给操作系统
– 磁盘:2块1TB-2TB SAS盘(RAID1)
* 存储元数据和编辑日志
* 建议使用SSD提升性能
– 网络:万兆网卡(建议双网卡绑定)
## DataNode硬件配置
– CPU:16-24核
– 内存:64GB-256GB
* 根据数据量和计算任务调整
* 建议预留30%内存给操作系统
– 磁盘:12-24块4TB-8TB SATA盘
* JBOD模式,不使用RAID
* 建议配置热备盘
– 网络:万兆网卡(建议双网卡绑定)
## ResourceManager硬件配置
– CPU:16-32核
– 内存:64GB-128GB
– 磁盘:2块1TB SAS盘(RAID1)
– 网络:万兆网卡
## ZooKeeper硬件配置
– CPU:8-16核
– 内存:16GB-32GB
– 磁盘:2块500GB SAS盘(RAID1)
* 使用SSD提升性能
– 网络:千兆或万兆网卡
2.2 Hadoop存储规划
Hadoop存储规划需要考虑数据量、副本数、增长率等因素:
## 存储容量计算公式
总存储容量 = 原始数据量 × 副本数 ÷ 压缩比 ÷ 有效容量比
## 参数说明
– 原始数据量:业务数据总量
– 副本数:默认3副本
– 压缩比:根据压缩算法,通常0.3-0.5
– 有效容量比:预留空间,建议0.7-0.8
## 计算示例
原始数据量:100TB
副本数:3
压缩比:0.4
有效容量比:0.75
总存储容量 = 100TB × 3 ÷ 0.4 ÷ 0.75 = 1000TB
## 磁盘配置建议
– 单节点磁盘数量:12-24块
– 单块磁盘容量:4TB-8TB
– 单节点存储容量:48TB-192TB
– 节点数量:根据总存储容量计算
## 示例:1000TB集群
单节点存储:96TB(12块8TB盘)
节点数量:1000TB ÷ 96TB ≈ 11台
建议配置:15台DataNode(考虑冗余和扩展)
2.3 Hadoop网络规划
Hadoop网络规划需要考虑网络拓扑、网络带宽、网络隔离等因素:
## 网络拓扑设计
– 核心交换机:万兆或更高带宽
– 接入交换机:万兆带宽
– 服务器网卡:万兆网卡
– 网络拓扑:Spine-Leaf架构
## 网络隔离方案
方案一:单网络方案
– 所有流量共用一个网络
– 优点:简单、成本低
– 缺点:网络拥塞、性能影响
方案二:双网络方案
– 管理网络:集群管理、监控
– 数据网络:数据传输、计算
– 优点:网络隔离、性能好
– 缺点:成本较高
方案三:三网络方案
– 管理网络:集群管理、监控
– 数据网络:数据传输
– 计算网络:Shuffle数据传输
– 优点:性能最优
– 缺点:成本最高
## 网络带宽计算
每节点网络带宽 = 节点磁盘数量 × 单盘吞吐量
示例:
– 12块磁盘,单盘吞吐量150MB/s
– 网络带宽 = 12 × 150MB/s = 1800MB/s ≈ 18Gbps
– 建议配置:万兆网卡(10Gbps)或双万兆绑定(20Gbps)
Part03-生产环境项目实施方案
3.1 Hadoop操作系统配置
3.1.1 操作系统初始化
#!/bin/bash
# os_init.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 关闭SELinux
setenforce 0
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 配置主机名
hostnamectl set-hostname nn1.fgedu.net.cn
# 配置hosts
cat >> /etc/hosts << EOF
192.168.1.10 nn1.fgedu.net.cn nn1
192.168.1.11 nn2.fgedu.net.cn nn2
192.168.1.12 dn1.fgedu.net.cn dn1
192.168.1.13 dn2.fgedu.net.cn dn2
192.168.1.14 dn3.fgedu.net.cn dn3
EOF
# 安装必要软件
yum install -y vim wget curl net-tools lsof telnet ntpdate
# 配置时间同步
ntpdate ntp.aliyun.com
echo "*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com > /dev/null 2>&1″ >> /var/spool/cron/root
# 验证配置
echo “操作系统初始化完成”
3.1.2 验证操作系统配置
getenforce
Disabled
# 验证防火墙状态
systemctl status firewalld
● firewalld.service – firewalld – dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
# 验证主机名
hostname
nn1.fgedu.net.cn
# 验证hosts配置
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.10 nn1.fgedu.net.cn nn1
192.168.1.11 nn2.fgedu.net.cn nn2
192.168.1.12 dn1.fgedu.net.cn dn1
192.168.1.13 dn2.fgedu.net.cn dn2
192.168.1.14 dn3.fgedu.net.cn dn3
# 验证时间同步
date
Wed Apr 8 10:45:30 CST 2026
3.2 Hadoop内核参数优化
3.2.1 配置内核参数
cat >> /etc/sysctl.conf << 'EOF' # 关闭透明大页 vm.transparent_hugepage_enabled = never vm.transparent_hugepage_defrag = never # 文件描述符 fs.file-max = 6815744 # 进程数 kernel.pid_max = 65536 # 网络参数 net.core.somaxconn = 32768 net.core.netdev_max_backlog = 32768 net.ipv4.tcp_max_syn_backlog = 65536 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_max_tw_buckets = 65535 net.ipv4.ip_local_port_range = 1024 65535 # 内存参数 vm.swappiness = 10 vm.dirty_ratio = 80 vm.dirty_background_ratio = 5 EOF # 使内核参数生效 sysctl -p vm.transparent_hugepage_enabled = never vm.transparent_hugepage_defrag = never fs.file-max = 6815744 kernel.pid_max = 65536 net.core.somaxconn = 32768 net.core.netdev_max_backlog = 32768 net.ipv4.tcp_max_syn_backlog = 65536 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_max_tw_buckets = 65535 net.ipv4.ip_local_port_range = 1024 65535 vm.swappiness = 10 vm.dirty_ratio = 80 vm.dirty_background_ratio = 5
3.2.2 配置文件描述符限制
cat >> /etc/security/limits.conf << 'EOF' * soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536 hadoop soft nofile 65536 hadoop hard nofile 65536 hadoop soft nproc 65536 hadoop hard nproc 65536 EOF # 验证配置 ulimit -n 65536 ulimit -u 65536
3.3 Hadoop用户与目录配置
3.3.1 创建Hadoop用户
useradd hadoop
echo “hadoop” | passwd –stdin hadoop
Changing password for user hadoop.
passwd: all authentication tokens updated successfully.
# 配置sudo权限
echo “hadoop ALL=(ALL) NOPASSWD: ALL” >> /etc/sudoers
# 验证用户
id hadoop
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
3.3.2 创建Hadoop目录
mkdir -p /bigdata/app
mkdir -p /bigdata/fgdata
mkdir -p /bigdata/logs
mkdir -p /bigdata/tmp
# 设置目录权限
chown -R hadoop:hadoop /bigdata
# 验证目录
ls -ld /bigdata/*
drwxr-xr-x 2 hadoop hadoop 6 Apr 8 10:50 /bigdata/app
drwxr-xr-x 2 hadoop hadoop 6 Apr 8 10:50 /bigdata/fgdata
drwxr-xr-x 2 hadoop hadoop 6 Apr 8 10:50 /bigdata/logs
drwxr-xr-x 2 hadoop hadoop 6 Apr 8 10:50 /bigdata/tmp
Part04-生产案例与实战讲解
4.1 Hadoop集群拓扑设计
以10节点Hadoop集群为例,介绍集群拓扑设计:
| 主机名 | IP地址 | 部署服务 | 角色 |
|---|---|---|---|
| nn1.fgedu.net.cn | 192.168.1.10 | NameNode、ZKFC、JournalNode | Master |
| nn2.fgedu.net.cn | 192.168.1.11 | NameNode、ZKFC、JournalNode | Master |
| rm1.fgedu.net.cn | 192.168.1.15 | ResourceManager、JobHistoryServer | Master |
| rm2.fgedu.net.cn | 192.168.1.16 | ResourceManager | Master |
| dn1.fgedu.net.cn | 192.168.1.12 | DataNode、NodeManager、JournalNode | Worker |
| dn2.fgedu.net.cn | 192.168.1.13 | DataNode、NodeManager、ZooKeeper | Worker |
| dn3.fgedu.net.cn | 192.168.1.14 | DataNode、NodeManager、ZooKeeper | Worker |
| zk1.fgedu.net.cn | 192.168.1.17 | ZooKeeper | 协调 |
| client1.fgedu.net.cn | 192.168.1.18 | Hive、Spark、Sqoop | 客户端 |
| client2.fgedu.net.cn | 192.168.1.19 | Hive、Spark、Presto | 客户端 |
4.2 Hadoop机架感知配置
Hadoop机架感知配置可以提高数据可靠性和性能:
cat > /bigdata/app/hadoop/etc/hadoop/rack-topology.sh << 'EOF' #!/bin/bash # rack-topology.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # 机架映射配置 RACK_MAP=( "192.168.1.10:/rack01" "192.168.1.11:/rack01" "192.168.1.12:/rack01" "192.168.1.13:/rack02" "192.168.1.14:/rack02" "192.168.1.15:/rack01" "192.168.1.16:/rack01" ) # 查找机架信息 for item in "${RACK_MAP[@]}"; do ip=$(echo $item | cut -d: -f1) rack=$(echo $item | cut -d: -f2) if [ "$1" = "$ip" ]; then echo $rack exit 0 fi done # 默认机架 echo "/default-rack" EOF # 设置执行权限 chmod +x /bigdata/app/hadoop/etc/hadoop/rack-topology.sh # 配置core-site.xml cat >> /bigdata/app/hadoop/etc/hadoop/core-site.xml << 'EOF'
4.3 Hadoop环境初始化脚本
Hadoop环境初始化脚本可以批量配置所有节点:
#!/bin/bash
# hadoop_env_init.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 节点列表
NODES=”nn1 nn2 dn1 dn2 dn3″
# 环境初始化函数
init_env() {
local node=$1
echo “开始初始化节点: $node”
# 关闭SELinux
ssh $node “setenforce 0”
ssh $node “sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config”
# 关闭防火墙
ssh $node “systemctl stop firewalld”
ssh $node “systemctl disable firewalld”
# 配置内核参数
ssh $node “sysctl -w vm.swappiness=10”
# 创建用户和目录
ssh $node “useradd hadoop 2>/dev/null || true”
ssh $node “mkdir -p /bigdata/app /bigdata/fgdata /bigdata/logs /bigdata/tmp”
ssh $node “chown -R hadoop:hadoop /bigdata”
echo “节点 $node 初始化完成”
}
# 批量初始化
for node in $NODES; do
init_env $node
done
echo “所有节点初始化完成”
Part05-风哥经验总结与分享
5.1 Hadoop集群规划最佳实践
Hadoop集群规划最佳实践:
- 高可用架构:NameNode和ResourceManager必须配置HA
- 机架感知:配置机架感知,提高数据可靠性
- 资源隔离:使用YARN队列进行资源隔离
- 网络规划:管理网络和数据网络分离
- 存储规划:预留足够的存储空间,考虑增长率
- 监控规划:提前规划监控告警体系
5.2 Hadoop容量计算方法
Hadoop容量计算方法:
## 存储容量计算
原始数据量:500TB
副本数:3
压缩比:0.4
有效容量比:0.75
总存储容量 = 500TB × 3 ÷ 0.4 ÷ 0.75 = 5000TB
## 节点数量计算
单节点存储:96TB(12块8TB盘)
节点数量:5000TB ÷ 96TB ≈ 53台
建议配置:60台DataNode(考虑冗余和扩展)
## 内存容量计算
NameNode内存:
– 文件数量:1亿
– 每100万文件约需1GB内存
– NameNode内存 = 1亿 ÷ 100万 × 1GB = 100GB
– 建议配置:128GB
DataNode内存:
– 根据计算任务调整
– 建议:64GB-128GB
5.3 Hadoop环境检查清单
Hadoop环境检查清单:
- □ 操作系统版本符合要求
- □ SELinux已关闭
- □ 防火墙已关闭
- □ 主机名已配置
- □ hosts文件已配置
- □ 时间同步已配置
- □ JDK已安装
- □ SSH免密登录已配置
- □ 内核参数已优化
- □ 文件描述符已配置
- □ Hadoop用户已创建
- □ Hadoop目录已创建
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
