大数据环境准备:从系统配置到网络调优

一、Linux系统基础配置
1.1 操作系统选择建议
graph TD
A[Linux发行版] --> B{CentOS/RHEL}
A --> C{Ubuntu/Debian}
B --> D[企业级稳定性]
B --> E[长期支持版本]
C --> F[新版软件支持]
C --> G[社区活跃]
版本推荐:
- CentOS 7.9 (2009) 最小化安装
- Ubuntu 22.04 LTS 服务器版
1.2 基础系统配置(CentOS/Ubuntu通用)
# 1. 设置主机名(所有节点)
sudo hostnamectl set-hostname node01
# 2. 配置hosts文件(所有节点)
cat <<EOF | sudo tee -a /etc/hosts
192.168.1.101 node01
192.168.1.102 node02
192.168.1.103 node03
EOF
# 3. 时间同步配置(NTP服务)
# CentOS
sudo yum install chrony -y
sudo systemctl enable chronyd
# Ubuntu
sudo apt install chrony -y
sudo systemctl enable chrony
# 4. 关闭SELinux(CentOS)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 5. 关闭交换分区(所有节点)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
二、JDK安装与配置
2.1 JDK版本选择矩阵
Java版本 = \begin{cases}
JDK8 & \text{兼容Hadoop 2.x/3.x} \\
JDK11 & \text{Spark 3.0+推荐} \\
JDK17 & \text{最新框架实验性支持}
\end{cases}
2.2 多版本JDK安装示例
# CentOS
sudo yum install -y java-1.8.0-openjdk-devel java-11-openjdk-devel
# Ubuntu
sudo apt install -y openjdk-8-jdk openjdk-11-jdk
# 配置默认JDK版本
sudo update-alternatives --config java
2.3 环境变量配置
# Python脚本自动生成环境配置
import os
jdk_path = "/usr/lib/jvm/java-8-openjdk-amd64" # 根据实际路径修改
env_config = f"""\
export JAVA_HOME={jdk_path}
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
"""
with open("/etc/profile.d/java.sh", "w") as f:
f.write(env_config)
# 执行配置生效
os.system("source /etc/profile")
验证安装:
java -version
# 期望输出:openjdk version "1.8.0_382"
三、SSH免密登录配置
3.1 密钥生成与分发流程
sequenceDiagram
participant Master as 主节点
participant Worker as 工作节点
Master->>Master: ssh-keygen -t rsa
Master->>Worker: ssh-copy-id user@worker
Worker->>Master: 测试ssh连接
3.2 详细配置步骤
# 1. 生成密钥对(所有节点)
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
# 2. 配置authorized_keys(主节点执行)
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 3. 分发公钥到其他节点(示例node02)
scp ~/.ssh/authorized_keys node02:~/.ssh/
# 4. 设置权限(所有节点)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 5. 验证免密登录
ssh node02 "hostname"
3.3 常见问题排查表
| 现象 | 原因 | 解决方案 |
|---|---|---|
| Permission denied | 密钥文件权限过大 | chmod 600 ~/.ssh/* |
| Connection refused | SSH服务未启动 | systemctl restart sshd |
| Host key verification | 已知主机记录冲突 | 删除~/.ssh/known_hosts |
四、防火墙与端口管理
4.1 防火墙策略配置
graph LR
A[防火墙方案] --> B{生产环境?}
B -->|Yes| C[精确开放端口]
B -->|No| D[完全关闭防火墙]
CentOS 7+ (firewalld)
# 查看已开放端口
sudo firewall-cmd --list-ports
# 开放Hadoop端口
sudo firewall-cmd --permanent --add-port=8020/tcp # NameNode
sudo firewall-cmd --permanent --add-port=9000/tcp # HDFS
sudo firewall-cmd --reload
Ubuntu (ufw)
sudo ufw allow 22/tcp # SSH
sudo ufw allow 9000/tcp # HDFS
sudo ufw enable
4.2 端口连通性测试工具
# Python端口扫描工具
import socket
def check_port(host, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
try:
s.connect((host, port))
return True
except:
return False
finally:
s.close()
# 测试NameNode端口
print("NN端口状态:", check_port("node01", 8020))
4.3 大数据组件端口表
| 组件 | 默认端口 | 协议 | 用途 |
|---|---|---|---|
| HDFS | 9000 | TCP | 文件系统访问 |
| YARN | 8088 | HTTP | 资源管理器Web UI |
| Spark | 7077 | TCP | 集群通信端口 |
| Flink | 6123 | TCP | TaskManager RPC |
| Kafka | 9092 | TCP | Broker监听端口 |
五、系统优化配置
5.1 资源限制调整
\begin{cases}
\text{最大文件打开数} \geq 65535 \\
\text{用户进程数} \geq 32768 \\
\text{swap使用倾向} = 0
\end{cases}
# 修改limits.conf
cat <<EOF | sudo tee -a /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 32768
* hard nproc 32768
EOF
# 内核参数调整
cat <<EOF | sudo tee -a /etc/sysctl.conf
vm.swappiness = 0
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 2097152
EOF
sudo sysctl -p
5.2 磁盘挂载优化
# 1. 使用noatime挂载选项
UUID=xxx /data xfs defaults,noatime 0 0
# 2. 禁用文件访问时间更新
echo 'proc /proc proc defaults,noatime 0 0' | sudo tee -a /etc/fstab
# 3. 调整IO调度器(SSD)
echo 'deadline' | sudo tee /sys/block/sda/queue/scheduler
环境验证清单:
- 所有节点主机名解析正常
- JDK版本符合组件要求
- SSH免密登录全通
- 关键端口未被防火墙阻挡
- 系统资源限制已调整
下一步准备:完成本章配置后,您已具备搭建单机/集群环境的基础条件。下一章将开始Hadoop伪分布式部署实战。
---
### 附录:常用命令速查表
| 功能 | CentOS | Ubuntu |
|--------------------|----------------------|----------------------|
| 服务管理 | systemctl start sshd | service ssh start |
| 包更新 | yum update | apt update && upgrade|
| 查看开放端口 | firewall-cmd --list | ufw status |
| 检查磁盘挂载 | lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | |