1. 部署hadoop伪分布式

  • 尹老师博客:[Hadoop部署方式-伪分布式(Pseudo-Distributed Mode) - 尹正杰 - 博客园](https://www.cnblogs.com/yinzhengjie/p/9058415.html)

1.1 软件包

  • hadoop官方下载地址:[Apache Archive Distribution Directory](https://archive.apache.org/dist/hadoop/common/)
  • 软件包:hadoop-2.7.6.tar.gz等2个文件 链接: https://pan.baidu.com/s/1rdM5vOVHaJh85w7aePRXSQ?pwd=93ng 提取码: 93ng

1.2 配置java环境

# 可以使用压缩包安装jdk,但是系统可能自带openjdk
[root@jumpserver ~]# java -version
openjdk version "11.0.27" 2025-04-15
OpenJDK Runtime Environment BiSheng (build 11.0.27+6)
OpenJDK 64-Bit Server VM BiSheng (build 11.0.27+6, mixed mode, sharing)
[root@jumpserver ~]# which java
/usr/bin/java
[root@jumpserver ~]# ll /usr/bin/java
lrwxrwxrwx 1 root root 22  812 15:35 /usr/bin/java -> /etc/alternatives/java
[root@jumpserver ~]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 65  812 15:35 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-11.0.27.6-1.p01.ky10.x86_64/bin/java

# 这是jdk的家目录,注意所有者都是root
[root@jumpserver ~]# ll /usr/lib/jvm/java-11-openjdk-11.0.27.6-1.p01.ky10.x86_64/
总用量 12
drwxr-xr-x  2 root root  107  812 15:35 bin
lrwxrwxrwx  1 root root   74  520 10:50 conf -> /etc/java/java-11-openjdk/java-11-openjdk-11.0.27.6-1.p01.ky10.x86_64/conf
drwxr-xr-x 73 root root 4096  812 15:35 legal
drwxr-xr-x  6 root root 4096  812 15:35 lib
-rw-r--r--  1 root root 1253  520 10:38 release

1.3 安装hadoop

[root@jumpserver ~]# mkdir /soft
[root@jumpserver ~]# tar xf hadoop-2.7.6.tar.gz -C /soft
[root@jumpserver ~]# ln -s /soft/hadoop-2.7.6 /soft/hadoop
[root@jumpserver ~]# ll /soft/hadoop/
总用量 112
drwxr-xr-x 2 20415 101   194  418  2018 bin
drwxr-xr-x 3 20415 101    20  418  2018 etc
drwxr-xr-x 2 20415 101   106  418  2018 include
drwxr-xr-x 3 20415 101    20  418  2018 lib
drwxr-xr-x 2 20415 101   239  418  2018 libexec
-rw-r--r-- 1 20415 101 86424  418  2018 LICENSE.txt
-rw-r--r-- 1 20415 101 14978  418  2018 NOTICE.txt
-rw-r--r-- 1 20415 101  1366  418  2018 README.txt
drwxr-xr-x 2 20415 101  4096  418  2018 sbin
drwxr-xr-x 4 20415 101    31  418  2018 share
[root@jumpserver ~]# chown -R root:root /soft/
[root@jumpserver ~]# ll /soft/hadoop/
总用量 112
drwxr-xr-x 2 root root   194  418  2018 bin
drwxr-xr-x 3 root root    20  418  2018 etc
drwxr-xr-x 2 root root   106  418  2018 include
drwxr-xr-x 3 root root    20  418  2018 lib
drwxr-xr-x 2 root root   239  418  2018 libexec
-rw-r--r-- 1 root root 86424  418  2018 LICENSE.txt
-rw-r--r-- 1 root root 14978  418  2018 NOTICE.txt
-rw-r--r-- 1 root root  1366  418  2018 README.txt
drwxr-xr-x 2 root root  4096  418  2018 sbin
drwxr-xr-x 4 root root    31  418  2018 share

# 配置hadoop环境变量
[root@jumpserver ~]# vim /etc/profile
[root@jumpserver ~]# tail -n 3 /etc/profile
# hadoop
HADOOP_HOME=/soft/hadoop
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
[root@jumpserver ~]# source /etc/profile
[root@jumpserver ~]# echo $HADOOP_HOME 
/soft/hadoop

# 修改hadoop配置文件的java变量
[root@jumpserver /soft/hadoop/etc/hadoop]# grep -Ei 'java_home' hadoop-env.sh |grep -Ev '^#'
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.27.6-1.p01.ky10.x86_64/"

1.4 部署hadoop伪分布式

# 拷贝文件
[root@jumpserver ~]# cd /soft/hadoop/etc/
[root@jumpserver /soft/hadoop/etc]# ll
总用量 4
drwxr-xr-x 2 root root 4096  920 13:43 hadoop
[root@jumpserver /soft/hadoop/etc]# cp -r hadoop local
[root@jumpserver /soft/hadoop/etc]# cp -r hadoop pseudo
[root@jumpserver /soft/hadoop/etc]# cp -r hadoop full
[root@jumpserver /soft/hadoop/etc]# ll
总用量 16
drwxr-xr-x 2 root root 4096  920 13:52 full
drwxr-xr-x 2 root root 4096  920 13:43 hadoop
drwxr-xr-x 2 root root 4096  920 13:52 local
drwxr-xr-x 2 root root 4096  920 13:52 pseudo

[root@jumpserver /soft/hadoop/etc]# rm hadoop/
文件,目录已经移动到回收站:/recyle/tmp.jKTUL07pAf
[root@jumpserver /soft/hadoop/etc]# ln -s pseudo hadoop
[root@jumpserver /soft/hadoop/etc]# ll
总用量 12
drwxr-xr-x 2 root root 4096  920 13:52 full
lrwxrwxrwx 1 root root    6  920 13:54 hadoop -> pseudo
drwxr-xr-x 2 root root 4096  920 13:52 local
drwxr-xr-x 2 root root 4096  920 13:52 pseudo

1.5 修改hadoop的配置文件

[root@jumpserver /soft/hadoop/etc/hadoop]# cd  hadoop/
[root@jumpserver /soft/hadoop/etc/hadoop]# tail -n 6 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>

[root@jumpserver /soft/hadoop/etc/hadoop]# tail -n 6 hdfs-site.xml 
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

[root@jumpserver /soft/hadoop/etc/hadoop]# cp  mapred-site.xml.template mapred-site.xml
[root@jumpserver /soft/hadoop/etc/hadoop]# vim mapred-site.xml
[root@jumpserver /soft/hadoop/etc/hadoop]# tail -n 6 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>


[root@jumpserver /soft/hadoop/etc/hadoop]# tail -n 10 yarn-site.xml 
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

1.6 配置ssh免密登录

# 生成无需密码的密钥
[root@jumpserver ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
……
# 为自己分发密钥
[root@jumpserver ~]# ssh-copy-id root@localhost
……
# 登录测试
[root@jumpserver ~]# ssh root@localhost

Authorized users only. All activities may be monitored and reported.

Authorized users only. All activities may be monitored and reported.
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sat Sep 20 14:06:08 2025 from 10.0.0.1

1.7 格式化hdfs文件系统

hdfs namenode -format

1.8 启动hadoop服务

[root@jumpserver ~]# start-all.sh 
……
# 验证是否安装成功
# 系统自带的openjdk11没有携带jps,需要安装jdk的开发工具包
[root@jumpserver ~]# jps
-bash: jps:未找到命令
# 真正的jps应该在jdk目录下,这个不是
[root@jumpserver ~]# find /usr -name "jps"
/usr/share/bash-completion/completions/jps
# 下载jdk开发工具包
[root@jumpserver ~]# yum install java-11-openjdk-devel -y
……
[root@jumpserver ~]# jps
9557 DataNode
11191 Jps
9768 SecondaryNameNode
9944 ResourceManager
10074 NodeManager
9391 NameNode

1.9 查看webUI界面

  • webUI端口:50070

在这里插入图片描述

2. 部署hadoop完全分布式

  • 尹老师博客:[Hadoop部署方式-完全分布式(Fully-Distributed Mode) - 尹正杰 - 博客园](https://www.cnblogs.com/yinzhengjie/p/9065191.html)
  • 基础环境:4台虚拟机,一台namenode,三台datanode

2.1 修改hadoop配置文件

  • 其他三个服务器的jdk路径以之前一样,若不一样需要修改hadoop-env文件的java路径
  • 切换软链接
[root@jumpserver /soft/hadoop/etc]# unlink hadoop
[root@jumpserver /soft/hadoop/etc]# ll
总用量 12
drwxr-xr-x 2 root root 4096  920 13:52 full
drwxr-xr-x 2 root root 4096  920 13:52 local
drwxr-xr-x 2 root root 4096  920 14:00 pseudo
[root@jumpserver /soft/hadoop/etc]# ln -s full hadoop
[root@jumpserver /soft/hadoop/etc]# ll
总用量 12
drwxr-xr-x 2 root root 4096  920 13:52 full
lrwxrwxrwx 1 root root    4  920 14:53 hadoop -> full
drwxr-xr-x 2 root root 4096  920 13:52 local
drwxr-xr-x 2 root root 4096  920 14:00 pseudo

2.1.1 core-site.xml 配置文件

[root@jumpserver /soft/hadoop/etc/hadoop]# vim core-site.xml 
[root@jumpserver /soft/hadoop/etc/hadoop]# tail -n 10 core-site.xml
<configuration>
		<property>
                        <name>fs.defaultFS</name> # namenode节点
                        <value>hdfs://10.0.0.117:8020</value> 
                </property>
                <property>
                        <name>hadoop.tmp.dir</name> # hadoop的文件目录
                        <value>/root/hadoop</value>
                </property>
</configuration>

# 手动创建hadoop文件目录
[root@jumpserver /soft/hadoop/etc/hadoop]# mkdir -p /root/hadoop
[root@jumpserver /soft/hadoop/etc/hadoop]# ll -d /root/hadoop
drwxr-xr-x 2 root root 6  920 14:59 /root/hadoop

2.1.2 hdfs-site.xml 配置文件

[root@jumpserver /soft/hadoop/etc/hadoop]# tail -n 6 hdfs-site.xml
<configuration>
	 <property>
                <name>dfs.replication</name> # 副本数量
                <value>3</value>
        </property>
</configuration>

2.1.3 mapred-site.xml 配置文件

[root@jumpserver /soft/hadoop/etc/hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@jumpserver /soft/hadoop/etc/hadoop]# vim mapred-site.xml
[root@jumpserver /soft/hadoop/etc/hadoop]# tail -n 6 mapred-site.xml
<configuration>
	<property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

2.1.4 yarn-site.xml配置文件

[root@jumpserver /soft/hadoop/etc/hadoop]# tail -n 10 yarn-site.xml
<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>jumpserver</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

2.1.5 slaves

# 该配置文件的作用:是NameNode用与记录需要连接哪些DataNode服务器节点,用与启动或停止服务时发送远程命令指令的目标主机。
[root@jumpserver /soft/hadoop/etc/hadoop]# cat slaves
zb
lb01
lb02

2.2 在NameNode节点上配置免密码登录各DataNode节点

rm .ssh/*
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id root@jumpserver
ssh-copy-id root@zb
ssh-copy-id root@lb01
ssh-copy-id root@lb02

2.3 分发hadoop文件和配置环境变量

ssh lb01 mkdir /soft
scp -rp /soft/hadoop-2.7.6 lb01:/soft/hadoop
# 再分发至其他三个节点
# 其他节点也要安装jps
ssh zb yum install -y java-11-openjdk-devel
ssh lb01 yum install -y java-11-openjdk-devel
ssh lb02 yum install -y java-11-openjdk-devel

# 子节点配置hadoop环境变量
ssh root@zb 'echo "HADOOP_HOME=/soft/hadoop" >> /etc/profile'
ssh root@zb 'echo "PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> /etc/profile'
ssh root@zb "source /etc/profile"

ssh root@lb01 'echo "HADOOP_HOME=/soft/hadoop" >> /etc/profile'
ssh root@lb01 'echo "PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> /etc/profile'
ssh root@lb01 "source /etc/profile"

ssh root@lb02 'echo "HADOOP_HOME=/soft/hadoop" >> /etc/profile'
ssh root@lb02 'echo "PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> /etc/profile'
ssh root@lb02 "source /etc/profile"


2.4 自定义shell脚本

2.4.1 批量远程执行命令脚本

[root@jumpserver ~]# cat xcall.sh
#!/bin/bash
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie
#EMAIL:y1053419035@qq.com


#判断用户是否传参
if [ $# -lt 1 ];then
        echo "请输入参数"
        exit
fi

#获取用户输入的命令
cmd=$@

for (( i=114;i<=117;i++ ))
do
        #使终端变绿色 
        tput setaf 2
        echo ============= s$i $cmd ============
        #使终端变回原来的颜色,即白灰色
        tput setaf 7
        #远程执行命令
        ssh root@10.0.0.$i $cmd
        #判断命令是否执行成功
        if [ $? == 0 ];then
                echo "命令执行成功"
        fi
done

  • 测试:
[root@jumpserver ~]# bash xcall.sh "jps"
============= s114 jps ============

Authorized users only. All activities may be monitored and reported.
3493 Jps
命令执行成功
============= s115 jps ============

Authorized users only. All activities may be monitored and reported.
3305 Jps
命令执行成功
============= s116 jps ============

Authorized users only. All activities may be monitored and reported.
5251 Jps
命令执行成功
============= s117 jps ============

Authorized users only. All activities may be monitored and reported.
16451 Jps
9557 DataNode
9768 SecondaryNameNode
9944 ResourceManager
10074 NodeManager
9391 NameNode
命令执行成功

2.4.2 编写远程同步脚本(起名:xrsync.sh)

[root@jumpserver ~]# cat xrsync.sh
#!/bin/bash
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie
#EMAIL:y1053419035@qq.com

#判断用户是否传参
if [ $# -lt 1 ];then
    echo "请输入参数";
    exit
fi


#获取文件路径
file=$@

#获取子路径
filename=`basename $file`

#获取父路径
dirpath=`dirname $file`

#获取完整路径
cd $dirpath
fullpath=`pwd -P`

#同步文件到DataNode
for (( i=114;i<=117;i++ ))
do
    #使终端变绿色 
    tput setaf 2
    echo =========== s$i %file ===========
    #使终端变回原来的颜色,即白灰色
    tput setaf 7
    #远程执行命令
    rsync -lr $filename `whoami`@10.0.0.$i:$fullpath
    #判断命令是否执行成功
    if [ $? == 0 ];then
        echo "命令执行成功"
    fi
done

2.4.3 将自定义脚本添加执行权限并链接到PATH环境变量中

[root@jumpserver ~]# chmod 755 xcall.sh xrsync.sh 
[root@jumpserver ~]# ll x*sh
-rwxr-xr-x 1 root root 626  920 15:50 xcall.sh
-rwxr-xr-x 1 root root 748  920 15:54 xrsync.sh
[root@jumpserver ~]# cp xcall.sh  xrsync.sh /usr/local/bin/

2.5 启动服务并验证是否成功

  • 在主节点执行命令
# 格式化文件系统;需要停止hadoop
stop-all.sh
hdfs namenode -format

# 在子节点设置软链接,看踩坑记录1;
ssh root@zb "ln -s /soft/hadoop /soft/hadoop-2.7.6"
ssh root@lb01 "ln -s /soft/hadoop /soft/hadoop-2.7.6"
ssh root@lb02 "ln -s /soft/hadoop /soft/hadoop-2.7.6"

#启动hadoop
start-all.sh
  • 用自定义脚本验证NameNode和DataNode是否已经正常启动
[root@jumpserver ~]# xcall.sh "jps"
============= s114 jps ============

Authorized users only. All activities may be monitored and reported.
4592 NodeManager
4739 Jps
4443 DataNode
命令执行成功
============= s115 jps ============

Authorized users only. All activities may be monitored and reported.
4228 DataNode
4378 NodeManager
4525 Jps
命令执行成功
============= s116 jps ============

Authorized users only. All activities may be monitored and reported.
6628 NodeManager
6774 Jps
6460 DataNode
命令执行成功
============= s117 jps ============

Authorized users only. All activities may be monitored and reported.
20883 Jps
20149 NameNode
20541 ResourceManager
20383 SecondaryNameNode
命令执行成功

2.6 上传文件到服务器

[root@jumpserver ~]# hdfs dfs -put  x*sh /
……

[root@jumpserver ~]# hdfs dfs -ls /
……
Found 2 items
-rw-r--r--   3 root supergroup        626 2025-09-20 16:18 /xcall.sh
-rw-r--r--   3 root supergroup        748 2025-09-20 16:18 /xrsync.sh

2.7 webUI查看

在这里插入图片描述

在这里插入图片描述

2.8 Hadoop常用参数介绍

1>.dfs.name.dir

  作用:NameNode节点用于存储HDFS元数据的本地目录,官方建议为/home/hadoop/dfs/name;
2>.dfs.data.dir

  作用:DataNode节点用于存储HDFS文件数据块的本地目录,官方建议为/home/hadoop/dfs/data;
3>.mapred.system.dir

  作用:HDFS中用于存储共享的MapReduce系统文件的目录,官方建议为/hadoop/mapred/system;
4>.mapred.local.dir

  作用:TaskNode节点用于存储临时数据的本地文件目录;
5>.mapred.tasktracker.{map|reduce}.tarks.maximum

  作用:在TaskTracker上可同时运行的的map或reduce任务的最大数目;
6>.hadoop.tmp.dir

  作用: Hadoop临时目录;
7>.mapred.child.java.opts

  作用:每个子任务可申请使用的heap大小;官方建议为-Xmx512m;
8>.mapred.reduce.tasks

  作用:每任务的reduce数量;

3. Prometheus监控hadoop

  • Prometheus官方提供了hadoop-exporter:[marcelmay/hadoop-hdfs-fsimage-exporter:将 Hadoop HDFS 内容统计信息导出到 Prometheus](https://github.com/marcelmay/hadoop-hdfs-fsimage-exporter?tab=readme-ov-file)
  • 官方exporter需要编译成jar包:fsimage-exporter-1.4.11-SNAPSHOT.jar 链接: https://pan.baidu.com/s/1Z4cDpSve1OAtwPqCRSRxcw?pwd=p94n 提取码: p94n

3.1 部署Maven 3.9.x

# 下载软件包
[root@jumpserver /soft]# wget https://dlcdn.apache.org/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz
……
[root@jumpserver /soft]# tar xf apache-maven-3.9.11-bin.tar.gz 
[root@jumpserver /soft]# ln -s apache-maven-3.9.11 maven
# 配置maven环境变量
[root@jumpserver ~]# tail -n 5 /etc/profile
# hadoop
export HADOOP_HOME=/soft/hadoop
# maven
export MAVEN_HOME=/soft/maven
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$MAVEN_HOME/bin
[root@jumpserver ~]# source /etc/profile
# 查看maven版本
[root@jumpserver ~]# mvn -version
Apache Maven 3.9.11 (3e54c93a704957b63ee3494413a2b544fd3d825b)
Maven home: /soft/maven
Java version: 11.0.27, vendor: BiSheng, runtime: /usr/lib/jvm/java-11-openjdk-11.0.27.6-1.p01.ky10.x86_64
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "4.19.90-52.22.v2207.ky10.x86_64", arch: "amd64", family: "unix"

3.2 编译hadoop-exporter

# git克隆
[root@jumpserver /soft]# git clone https://github.com/marcelmay/hadoop-hdfs-fsimage-exporter.git
……
[root@jumpserver /soft]# cd hadoop-hdfs-fsimage-exporter/
# 编译项目
[root@jumpserver /soft/hadoop-hdfs-fsimage-exporter]# mvn clean install
……

3.3 启动fsimage-exporter

# 编写yarn的配置文件,指定fsimage的位置,该路径是hdfs数据存储的位置
[root@jumpserver /soft/hadoop-hdfs-fsimage-exporter]# cat fsimage_configuration.yml
fsImagePath: /root/hadoop/dfs/name/current
# 尽可能跳过不必要的计算,以加快响应速度
skipFileDistributionForGroupStats : true
skipFileDistributionForUserStats : true
skipFileDistributionForPathStats : true
skipFileDistributionForPathSetStats : true


# 启动exporter
java -Xmx1024m -dsa -server -XX:+UseG1GC \
       -jar target/fsimage-exporter-1.4.11-SNAPSHOT.jar \
       0.0.0.0 9709 fsimage_configuration.yml


在这里插入图片描述

3.4 Prometheus监控hadoop

# 编辑Prometheus的配置文件
[root@prometheus-server31 /oldboyedu/softwares/prometheus-2.53.4.linux-amd64]# tail -n 15 prometheus.yml
……
    # hadoop  
  - job_name: 'fsimage'
    #scrape_interval: 180m
    #scrape_timeout:  300s
    static_configs:
      - targets: ['10.0.0.117:9709']

# 热加载Prometheus配置文件
[root@prometheus-server31 /oldboyedu/softwares/prometheus-2.53.4.linux-amd64]# curl -X POST https://10.0.0.31:9090/-/reload -k -u k8s:yinzhengjie


在这里插入图片描述

4. Grafana数据展示

  • 官方文档中给出了granfana的模版

在这里插入图片描述

  • granfana模板地址:[Hadoop HDFS FSImage | Grafana Labs](https://grafana.com/grafana/dashboards/12236-hadoop-hdfs-fsimage/)
  • 模板Id:12236

在这里插入图片描述

5. 踩坑记录

5.1 /soft/hadoop-2.7.6/sbin/yarn-daemon.sh: 没有那个文件或目录

  • start-all.sh命令:

在这里插入图片描述

  • 原因:Hadoop的启动脚本中有硬编码的路径 ,它们没有使用 $HADOOP_HOME 环境变量,而是直接写死了路径。
  • 解决方案:
# 在所有节点创建符号链接
ln -s /soft/hadoop /soft/hadoop-2.7.6

5.2 Prometheus显示状态为:UNKNOWN

在这里插入图片描述

  • 原因:
    • 参数:scrape_interval: 180m表示间隔180分钟抓取一次数据
    • scrape_timeout: 300s表示每次抓取的时间最长为300秒
  • 解决方案:将上面两个参数注释掉,就是一直抓取数据
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐