保姆级教程:在CentOS 7上从零搭建Hadoop 3.3.3完全分布式集群(含SSH免密登录与防火墙配置)

第一次接触Hadoop集群搭建时,面对众多配置文件和网络设置,很容易在某个环节卡住。本文将用最直白的语言,带你一步步完成从系统准备到集群验证的全过程。不同于简单罗列命令的教程,我们会深入每个关键步骤背后的原理,比如为什么需要关闭防火墙、SSH免密登录如何工作等,确保你真正理解每个操作的意义。

1. 环境准备与系统配置

1.1 硬件与软件规划

对于学习环境,建议使用三台配置相同的虚拟机(至少2核CPU/4GB内存/50GB存储)。主节点(master)承担管理职责,两个从节点(worker1、worker2)负责实际计算和存储。以下是版本选择建议:

组件推荐版本备注
操作系统CentOS 7.9长期支持版本,兼容性最佳
JDK1.8.0_382Hadoop官方认证的LTS版本
Hadoop3.3.3当前稳定版,修复了早期3.x漏洞

注意:所有节点需保持时间同步,避免后续出现认证问题。可执行yum install -y ntp && ntpdate pool.ntp.org同步时间。

1.2 基础环境配置

首先在所有节点执行以下操作:

# 关闭SELinux(重启后生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 安装必要工具
yum install -y vim net-tools wget openssh-clients

关键原理:SELinux是Linux的安全模块,会限制Hadoop进程间的通信。生产环境应精细配置策略,但学习环境直接关闭更易排查问题。

2. 网络与SSH配置

2.1 主机名与hosts映射

在master节点编辑/etc/hosts,添加如下内容(IP需替换为实际内网地址):

192.168.1.101 master
192.168.1.102 worker1
192.168.1.103 worker2

使用scp将文件同步到所有worker节点:

scp /etc/hosts root@worker1:/etc/
scp /etc/hosts root@worker2:/etc/

2.2 SSH免密登录详解

  1. 生成密钥对(所有节点执行):

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    
  2. 合并公钥: 将各节点的~/.ssh/id_rsa.pub内容追加到master节点的~/.ssh/authorized_keys中,然后分发该文件:

    scp ~/.ssh/authorized_keys root@worker1:~/.ssh/
    scp ~/.ssh/authorized_keys root@worker2:~/.ssh/
    

工作原理:RSA非对称加密确保通信安全。当NodeManager尝试连接ResourceManager时,会自动使用私钥进行认证,避免每次手动输入密码。

3. Hadoop核心配置

3.1 配置文件详解

解压Hadoop安装包后,需要修改etc/hadoop/下的关键文件:

  • core-site.xml(集群全局设置):

    <configuration>
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
      </property>
      <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
      </property>
    </configuration>
    
  • hdfs-site.xml(HDFS专用配置):

    <property>
      <name>dfs.replication</name>
      <value>2</value> <!-- 与worker节点数匹配 -->
    </property>
    

3.2 环境变量设置

在/etc/profile末尾追加(所有节点需同步):

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

执行source /etc/profile立即生效后,运行hadoop version验证输出应类似:

Hadoop 3.3.3
Source code repository https://github.com/apache/hadoop.git

4. 集群启动与验证

4.1 初始化HDFS

仅在master节点执行:

hdfs namenode -format  # 首次初始化
start-dfs.sh           # 启动HDFS
start-yarn.sh          # 启动YARN

使用jps命令检查进程是否正常:

  • master应有:NameNode、ResourceManager、SecondaryNameNode
  • worker应有:DataNode、NodeManager

4.2 实战测试:WordCount案例

  1. 创建测试文件并上传:

    echo -e "hadoop\nhdfs\nyarn\nmapreduce" > input.txt
    hdfs dfs -mkdir /input
    hdfs dfs -put input.txt /input
    
  2. 运行MapReduce作业:

    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /input /output
    
  3. 查看结果:

    hdfs dfs -cat /output/part-r-00000
    

    预期输出:

    hadoop  1
    hdfs    1
    mapreduce       1
    yarn    1
    

遇到问题时,可先检查日志文件:

  • NameNode日志:$HADOOP_HOME/logs/hadoop-root-namenode-master.log
  • YARN日志:$HADOOP_HOME/logs/yarn-root-resourcemanager-master.log

更多推荐