200字
Linux部署Hadoop集群
2025-12-22
2025-12-22

一、前期准备工作

1.1 服务器基础配置(3台服务器均需操作)

1.1.1 关闭防火墙和SELinux

防火墙会阻止集群节点间的通信,必须关闭:

# 关闭防火墙(临时)
systemctl stop firewalld
# 禁止防火墙开机自启(永久)
systemctl disable firewalld
# 查看防火墙状态(确保显示inactive)
systemctl status firewalld

关闭SELinux(安全增强型Linux),避免权限限制:

# 临时关闭(立即生效,重启失效)
setenforce 0
# 永久关闭(修改配置文件,重启生效)
vi /etc/selinux/config
# 将SELINUX=enforcing改为SELINUX=disabled
# 保存退出后,重启服务器验证
reboot
# 查看SELinux状态(确保显示Disabled)
getenforce

1.1.2 设置主机名

分别在3台服务器上设置对应的主机名:

# 主节点(hadoop01)
hostnamectl set-hostname hadoop01
# 从节点1(hadoop02)
hostnamectl set-hostname hadoop02
# 从节点2(hadoop03)
hostnamectl set-hostname hadoop03
# 验证主机名(各节点执行)
hostname

1.1.3 配置主机名与IP映射

在3台服务器的/etc/hosts文件中添加IP与主机名的映射,确保节点间能通过主机名通信:

# 编辑hosts文件
vi /etc/hosts
# 添加以下内容(替换为自己的服务器IP)
192.168.1.101 hadoop01
192.168.1.102 hadoop02
192.168.1.103 hadoop03
# 验证映射(各节点执行,能ping通即正常)
ping hadoop01 -c 3
ping hadoop02 -c 3
ping hadoop03 -c 3

1.2 安装JDK(3台服务器均需操作)

Hadoop基于Java开发,必须安装JDK,且3台节点的JDK版本需一致。

1.2.1 卸载系统自带JDK(若有)

# 查看系统自带JDK
rpm -qa | grep java
# 卸载自带JDK(替换为查询到的文件名)
rpm -e --nodeps 文件名

1.2.2 安装JDK 1.8

# 1. 下载JDK 1.8(可从Oracle官网下载,或使用wget命令)
# 示例:wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
# 2. 解压JDK到指定目录(推荐/usr/local/)
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/
# 3. 重命名JDK目录(方便后续操作)
mv /usr/local/jdk1.8.0_202 /usr/local/jdk1.8
# 4. 配置JDK环境变量
vi /etc/profile
# 在文件末尾添加以下内容
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
# 5. 生效环境变量
source /etc/profile
# 6. 验证JDK安装(显示版本信息即正常)
java -version

1.3 配置主节点免密登录从节点(仅主节点hadoop01操作)

Hadoop集群主节点需要远程管理从节点,配置免密登录可避免频繁输入密码。

# 1. 生成密钥对(默认保存到~/.ssh目录,按回车即可)
ssh-keygen -t rsa
# 2. 将公钥复制到3台节点(包括自身)
ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03
# 3. 验证免密登录(无需输入密码即可登录即正常)
ssh hadoop02
exit  # 退出从节点
ssh hadoop03
exit

二、Hadoop安装与配置

2.1 下载并解压Hadoop(仅主节点hadoop01操作)

# 1. 下载Hadoop 3.3.4(华为云镜像,速度较快)
wget https://repo.huaweicloud.com/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
# 2. 解压到/usr/local/目录
tar -zxvf hadoop-3.3.4.tar.gz -C /usr/local/
# 3. 重命名Hadoop目录
mv /usr/local/hadoop-3.3.4 /usr/local/hadoop
# 4. 查看Hadoop目录结构(验证解压成功)
ls /usr/local/hadoop

2.2 配置Hadoop环境变量(3台服务器均需操作)

# 1. 编辑环境变量配置文件
vi /etc/profile
# 2. 添加以下内容
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 3. 生效环境变量
source /etc/profile
# 4. 验证Hadoop环境(显示版本信息即正常)
hadoop version

2.3 修改Hadoop核心配置文件(仅主节点hadoop01操作)

Hadoop配置文件位于/usr/local/hadoop/etc/hadoop目录,需修改以下6个核心文件。

2.3.1 hadoop-env.sh(环境变量配置)

vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh
# 添加JDK路径(指定Hadoop使用的JDK)
export JAVA_HOME=/usr/local/jdk1.8
# 添加Hadoop用户名(默认是当前登录用户,如root)
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"

2.3.2 core-site.xml(核心配置)

vi /usr/local/hadoop/etc/hadoop/core-site.xml
# 在<configuration>标签内添加以下内容
<configuration><!-- 指定HDFS主节点(NameNode)的地址和端口 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop01:9000</value>
    </property&gt;
    <!-- 指定Hadoop临时文件存储目录(需手动创建) -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>
</configuration>

2.3.3 hdfs-site.xml(HDFS配置)

vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml
# 在<configuration>标签内添加以下内容
<configuration>
   <!-- 指定HDFS副本数(默认3,3台节点建议设为2,避免单点故障) -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <!-- 指定NameNode数据存储目录(需手动创建) -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/local/hadoop/hdfs/name</value>
    </property&gt;
    <!-- 指定DataNode数据存储目录(需手动创建) -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/local/hadoop/hdfs/data</value>
    &lt;/property&gt;
    <!-- 关闭HDFS权限检查(小白友好,避免权限问题) -->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
</configuration>

2.3.4 mapred-site.xml(MapReduce配置)

vi /usr/local/hadoop/etc/hadoop/mapred-site.xml
# 在<configuration>标签内添加以下内容
<configuration>
<!-- 指定MapReduce运行在YARN上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value&gt;yarn&lt;/value&gt;
    &lt;/property&gt;
    <!-- 指定MapReduce历史服务器地址和端口 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop01:10020</value>
    &lt;/property&gt;
    <!-- 指定MapReduce历史服务器web界面地址和端口 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop01:19888</value>
    </property>
</configuration>

2.3.5 yarn-site.xml(YARN配置)

vi /usr/local/hadoop/etc/hadoop/yarn-site.xml
# 在<configuration>标签内添加以下内容
<configuration&gt;
    <!-- 指定YARN主节点(ResourceManager)的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop01</value>
    </property>
    <!-- 指定MapReduce运行模式(洗牌机制) -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
   <!-- 关闭YARN内存检查(小白友好,避免内存不足问题) -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

2.3.6 workers(指定从节点,Hadoop 3.x之前叫slaves)

vi /usr/local/hadoop/etc/hadoop/workers
# 删除默认内容,添加从节点主机名
hadoop02
hadoop03

2.4 复制配置好的Hadoop到从节点(仅主节点hadoop01操作)

主节点配置完成后,将Hadoop目录复制到2台从节点,避免重复配置。

# 复制到hadoop02
scp -r /usr/local/hadoop hadoop02:/usr/local/
# 复制到hadoop03
scp -r /usr/local/hadoop hadoop03:/usr/local/

三、Hadoop集群初始化与启动

3.1 创建Hadoop数据存储目录(3台服务器均需操作)

# 按照hdfs-site.xml中的配置创建目录
mkdir -p /usr/local/hadoop/tmp
mkdir -p /usr/local/hadoop/hdfs/name
mkdir -p /usr/local/hadoop/hdfs/data
# 赋予目录权限(当前用户为root,可省略,若为其他用户需执行)
chown -R 用户名:用户名 /usr/local/hadoop

3.2 初始化HDFS(仅主节点hadoop01操作)

首次启动Hadoop前,必须初始化NameNode。

# 进入Hadoop目录
cd /usr/local/hadoop
# 初始化HDFS(仅需执行一次)
hdfs namenode -format
# 初始化成功标志:显示“successfully formatted”

3.3 启动Hadoop集群(仅主节点hadoop01操作)

# 启动HDFS(包含NameNode、DataNode、SecondaryNameNode)
start-dfs.sh
# 启动YARN(包含ResourceManager、NodeManager)
start-yarn.sh
# 启动历史服务器(可选,用于查看MapReduce任务历史)
mr-jobhistory-daemon.sh start historyserver
# 查看启动的进程(主节点应包含NameNode、ResourceManager、SecondaryNameNode、JobHistoryServer)
jps
# 从节点验证(登录hadoop02或hadoop03,执行jps,应包含DataNode、NodeManager)
ssh hadoop02 jps
ssh hadoop03 jps

四、集群验证与测试

4.1 Web界面验证

通过浏览器访问以下地址(确保本地能访问服务器IP):

  • HDFS Web界面:http://hadoop01IP:9870 (查看HDFS文件系统、DataNode状态等)

  • YARN Web界面:http://hadoop01IP:8088 (查看集群资源、运行的任务等)

  • 历史服务器Web界面:http://hadoop01IP:19888 (查看已完成的MapReduce任务)

4.2 命令行测试HDFS

# 1. 在HDFS上创建测试目录
hdfs dfs -mkdir /test
# 2. 上传本地文件到HDFS
echo "Hello Hadoop" > test.txt
hdfs dfs -put test.txt /test/
# 3. 查看HDFS上的文件
hdfs dfs -ls /test
# 4. 下载HDFS文件到本地
hdfs dfs -get /test/test.txt ./test_download.txt
# 5. 查看文件内容
cat test_download.txt

4.3 运行MapReduce示例程序(验证集群可用性)

# 运行Hadoop自带的单词计数示例(输入为Hadoop的README文件)
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /test/test.txt /test/output
# 查看运行结果(output目录为自动生成,包含结果文件)
hdfs dfs -cat /test/output/part-r-00000

五、常见问题与解决方法

  • 问题1:启动集群时,DataNode无法启动 解决:可能是多次初始化导致NameNode和DataNode的clusterID不一致。删除3台节点的hdfs/name和hdfs/data目录,重新执行hdfs namenode -format,再启动集群。

  • 问题2:免密登录失败 解决:检查~/.ssh目录权限(应为700),authorized_keys文件权限(应为600),执行chmod 700 ~/.ssh和chmod 600 ~/.ssh/authorized_keys。

  • 问题3:Web界面无法访问 解决:检查防火墙是否关闭,服务器IP是否正确,端口是否被占用(9870、8088、19888),执行netstat -tuln | grep 端口号查看端口状态。

  • 问题4:MapReduce任务运行失败 解决:检查YARN是否正常启动,节点的资源是否充足,可通过YARN Web界面(8088端口)查看任务日志排查问题。

六、集群停止命令(仅主节点hadoop01操作)

# 停止历史服务器
mr-jobhistory-daemon.sh stop historyserver
# 停止YARN
stop-yarn.sh
# 停止HDFS
stop-dfs.sh
# 验证所有进程已停止(执行jps,无Hadoop相关进程)
jps

备注:部署过程中,所有命令请严格按照步骤执行,若出现错误,先查看日志(Hadoop日志目录:/usr/local/hadoop/logs),根据日志信息排查问题。

Linux部署Hadoop集群
作者
whhh
发表于
2025-12-22
License
whh

评论