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

178 阅读3分钟

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

Linux Cluster

一、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 refusedSSH服务未启动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 大数据组件端口表

组件默认端口协议用途
HDFS9000TCP文件系统访问
YARN8088HTTP资源管理器Web UI
Spark7077TCP集群通信端口
Flink6123TCPTaskManager RPC
Kafka9092TCPBroker监听端口

五、系统优化配置

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

环境验证清单

  1. 所有节点主机名解析正常
  2. JDK版本符合组件要求
  3. SSH免密登录全通
  4. 关键端口未被防火墙阻挡
  5. 系统资源限制已调整

下一步准备:完成本章配置后,您已具备搭建单机/集群环境的基础条件。下一章将开始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 |                      |