如何部署Hadoop核心组件

部署Hadoop核心组件(HDFS、YARN、MapReduce)是一个系统工程,通常分为环境准备、单节点/伪分布式部署和完全分布式集群部署三个阶段。以下是基于最新稳定版本(如Hadoop 3.x系列)的标准部署流程与核心配置指南。

一、 前期环境准备(所有节点执行)

在部署Hadoop之前必须确保底层操作系统和依赖环境符合要求,这是避免后续兼容性报错的关键。

  1. 操作系统与网络配置
  • 系统选择:推荐使用 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 等。
  1. 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
    1. 解压与目录规划
      将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

  1. 核心配置文件修改
    所有配置文件位于 $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。

  1. 分发安装包
    将配置好的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

三、 集群初始化与启动

  1. 格式化NameNode
    仅在首次启动前执行一次。如果在运行过程中重新格式化,会导致ClusterID不一致,DataNode无法启动。

hdfs namenode -format

看到 “Storage directory … has been successfully formatted” 即表示成功。

  1. 启动集群
    可以使用一键启动脚本,也可以分步启动。

方式一:一键启动(推荐测试用)

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

  1. 验证部署
  • 进程检查:在各节点执行 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

四、 常见避坑指南

  1. 权限问题:确保Hadoop安装目录和数据目录的所有者一致(建议创建专门的 hadoop 用户),避免使用root直接操作导致权限混乱。
  2. 内存溢出:默认配置下Hadoop分配的堆内存较小。在生产环境中,需根据服务器物理内存调整 hadoop-env.sh 中的 HADOOP_HEAPSIZE 或 YARN_HEAPSIZE,以及 yarn-site.xml 中的容器内存限制。
  3. 时间同步:集群所有节点必须保持时间同步,建议安装并启动 ntp 或 chronyd 服务,否则可能导致心跳超时或任务失败。
  4. 端口冲突:确保防火墙已关闭或开放了相关端口(9820, 9870, 8088, 8042等),且没有其他服务占用这些端口。
滚动至顶部