部署Hadoop核心组件(HDFS、YARN、MapReduce)是一个系统工程,通常分为环境准备、单节点/伪分布式部署和完全分布式集群部署三个阶段。以下是基于最新稳定版本(如Hadoop 3.x系列)的标准部署流程与核心配置指南。
一、 前期环境准备(所有节点执行)
在部署Hadoop之前必须确保底层操作系统和依赖环境符合要求,这是避免后续兼容性报错的关键。
- 操作系统与网络配置
- 系统选择:推荐使用 CentOS 7.x/8.x、Ubuntu 20.04/22.04 LTS 或 Rocky Linux等长期支持版Linux发行版。
- 主机名与hosts映射:
- 修改 /etc/hostname 设置唯一主机名(如 node01, node02)。
- 修改 /etc/hosts,将所有集群节点的IP与主机名进行绑定,确保节点间可通过主机名互相Ping通。
- 防火墙与SELinux:
- 关闭防火墙:systemctl stop firewalld && systemctl disable firewalld
- 关闭SELinux:修改 /etc/selinux/config 中 SELINUX=disabled,并重启生效。
- SSH免密登录:
- Hadoop启动脚本依赖SSH远程执行命令。需配置主节点到所有从节点(包括自身)的免密登录。
- 生成密钥:ssh-keygen -t rsa
- 分发公钥:ssh-copy-id node01, ssh-copy-id node02 等。
- Java运行环境安装
Hadoop基于Java开发,JDK版本匹配至关重要。
- 版本推荐:Hadoop 3.x 强烈建议使用 JDK 1.8 (Java 8) 的LTS版本(如 8u351+)。虽然部分新版Hadoop开始支持Java 11,但Java 8仍是生产环境最稳定的选择。
- 环境变量配置:
在 /etc/profile 或 ~/.bashrc 中添加:
export JAVA_HOME=/usr/local/jdk1.8.0_351 根据实际安装路径修改
export PATH=$PATH:$JAVA_HOME/bin
- 执行 source /etc/profile 使配置生效,并通过 java -version 验证。
二、 Hadoop核心组件安装与配置
以下以完全分布式集群为例,假设规划如下:
- Node01: NameNode, ResourceManager, SecondaryNameNode
- Node02: DataNode, NodeManager
- Node03: DataNode, NodeManager
- 解压与目录规划
将Hadoop安装包(如 hadoop-3.3.4.tar.gz)上传至 /opt/software,解压至 /opt/module 或 /usr/local。
- 解压与目录规划
tar -zxvf hadoop-3.3.4.tar.gz -C /opt/module/
ln -s /opt/module/hadoop-3.3.4 /opt/module/hadoop 创建软链接方便升级
创建必要的数据存储目录:
mkdir -p /opt/module/hadoop/data/namenode
mkdir -p /opt/module/hadoop/data/datanode
mkdir -p /opt/module/hadoop/logs
- 核心配置文件修改
所有配置文件位于 $HADOOP_HOME/etc/hadoop/ 目录下。
(1) hadoop-env.sh
指定Java_home及Hadoop日志目录,防止启动时找不到Java环境。
export JAVA_HOME=/usr/local/jdk1.8.0_351
export HADOOP_LOG_DIR=/opt/module/hadoop/logs
(2) core-site.xml
配置默认文件系统地址和临时目录。
<configuration>
<!– 指定HDFS的NameNode地址 –>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node01:9820</value> <!– Hadoop 3.x默认端口为9820,2.x为8020 –>
</property>
<!– 指定Hadoop运行时产生文件的存储目录 –>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/tmp</value>
</property>
</configuration>
(3) hdfs-site.xml
配置副本数、NameNode和DataNode的数据存放路径。
<configuration>
<!– 指定HDFS副本数量,默认为3 –>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!– NameNode元数据存放路径 –>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///opt/module/hadoop/data/namenode</value>
</property>
<!– DataNode数据块存放路径 –>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///opt/module/hadoop/data/datanode</value>
</property>
<!– 指定SecondaryNameNode地址 –>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node01:9868</value>
</property>
</configuration>
(4) yarn-site.xml
配置YARN的资源管理器地址及NodeManager的服务。
<configuration>
<!– 指定ResourceManager的地址 –>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node01</value>
</property>
<!– 指定NodeManager获取数据的方式是shuffle –>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!– 启用日志聚合功能(可选,便于查看历史日志) –>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>
(5) mapred-site.xml
指定MapReduce运行在YARN上。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(6) workers (Hadoop 3.x) 或 slaves (Hadoop 2.x)
列出所有DataNode和NodeManager所在的主机名,每行一个。
node01
node02
node03
注意:如果Node01也作为计算节点,需将其加入;若仅作为管理节点,则只写Node02和Node03。
- 分发安装包
将配置好的Hadoop目录同步到其他节点:
scp -r /opt/module/hadoop-3.3.4 node02:/opt/module/
scp -r /opt/module/hadoop-3.3.4 node03:/opt/module/
同样需要确保其他节点的 /etc/profile 中配置了 HADOOP_HOME 和 PATH
三、 集群初始化与启动
- 格式化NameNode
仅在首次启动前执行一次。如果在运行过程中重新格式化,会导致ClusterID不一致,DataNode无法启动。
hdfs namenode -format
看到 “Storage directory … has been successfully formatted” 即表示成功。
- 启动集群
可以使用一键启动脚本,也可以分步启动。
方式一:一键启动(推荐测试用)
start-dfs.sh 启动HDFS (NameNode, DataNode, SecondaryNameNode)
start-yarn.sh 启动YARN (ResourceManager, NodeManager)
方式二:分组件启动(生产环境推荐,便于排查故障)
在Node01上执行
hdfs –daemon start namenode
hdfs –daemon start secondarynamenode
yarn –daemon start resourcemanager
在所有节点(Node01, 02, 03)上执行
hdfs –daemon start datanode
yarn –daemon start nodemanager
- 验证部署
- 进程检查:在各节点执行 jps 命令。
- Node01 应包含:NameNode, SecondaryNameNode, ResourceManager, (DataNode, NodeManager)
- Node02/03 应包含:DataNode, NodeManager
- Web UI访问:
- HDFS界面:http://node01:9870 (Hadoop 3.x) 或 http://node01:50070 (Hadoop 2.x)
- YARN界面:http://node01:8088
- 功能测试:
运行Hadoop自带的基准测试或WordCount示例:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input /output
四、 常见避坑指南
- 权限问题:确保Hadoop安装目录和数据目录的所有者一致(建议创建专门的 hadoop 用户),避免使用root直接操作导致权限混乱。
- 内存溢出:默认配置下Hadoop分配的堆内存较小。在生产环境中,需根据服务器物理内存调整 hadoop-env.sh 中的 HADOOP_HEAPSIZE 或 YARN_HEAPSIZE,以及 yarn-site.xml 中的容器内存限制。
- 时间同步:集群所有节点必须保持时间同步,建议安装并启动 ntp 或 chronyd 服务,否则可能导致心跳超时或任务失败。
- 端口冲突:确保防火墙已关闭或开放了相关端口(9820, 9870, 8088, 8042等),且没有其他服务占用这些端口。