Hadoop集群部署与Prometheus监控
·
文章目录
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 8月 12 15:35 /usr/bin/java -> /etc/alternatives/java
[root@jumpserver ~]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 65 8月 12 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 8月 12 15:35 bin
lrwxrwxrwx 1 root root 74 5月 20 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 8月 12 15:35 legal
drwxr-xr-x 6 root root 4096 8月 12 15:35 lib
-rw-r--r-- 1 root root 1253 5月 20 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 4月 18 2018 bin
drwxr-xr-x 3 20415 101 20 4月 18 2018 etc
drwxr-xr-x 2 20415 101 106 4月 18 2018 include
drwxr-xr-x 3 20415 101 20 4月 18 2018 lib
drwxr-xr-x 2 20415 101 239 4月 18 2018 libexec
-rw-r--r-- 1 20415 101 86424 4月 18 2018 LICENSE.txt
-rw-r--r-- 1 20415 101 14978 4月 18 2018 NOTICE.txt
-rw-r--r-- 1 20415 101 1366 4月 18 2018 README.txt
drwxr-xr-x 2 20415 101 4096 4月 18 2018 sbin
drwxr-xr-x 4 20415 101 31 4月 18 2018 share
[root@jumpserver ~]# chown -R root:root /soft/
[root@jumpserver ~]# ll /soft/hadoop/
总用量 112
drwxr-xr-x 2 root root 194 4月 18 2018 bin
drwxr-xr-x 3 root root 20 4月 18 2018 etc
drwxr-xr-x 2 root root 106 4月 18 2018 include
drwxr-xr-x 3 root root 20 4月 18 2018 lib
drwxr-xr-x 2 root root 239 4月 18 2018 libexec
-rw-r--r-- 1 root root 86424 4月 18 2018 LICENSE.txt
-rw-r--r-- 1 root root 14978 4月 18 2018 NOTICE.txt
-rw-r--r-- 1 root root 1366 4月 18 2018 README.txt
drwxr-xr-x 2 root root 4096 4月 18 2018 sbin
drwxr-xr-x 4 root root 31 4月 18 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 9月 20 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 9月 20 13:52 full
drwxr-xr-x 2 root root 4096 9月 20 13:43 hadoop
drwxr-xr-x 2 root root 4096 9月 20 13:52 local
drwxr-xr-x 2 root root 4096 9月 20 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 9月 20 13:52 full
lrwxrwxrwx 1 root root 6 9月 20 13:54 hadoop -> pseudo
drwxr-xr-x 2 root root 4096 9月 20 13:52 local
drwxr-xr-x 2 root root 4096 9月 20 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 9月 20 13:52 full
drwxr-xr-x 2 root root 4096 9月 20 13:52 local
drwxr-xr-x 2 root root 4096 9月 20 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 9月 20 13:52 full
lrwxrwxrwx 1 root root 4 9月 20 14:53 hadoop -> full
drwxr-xr-x 2 root root 4096 9月 20 13:52 local
drwxr-xr-x 2 root root 4096 9月 20 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 9月 20 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 9月 20 15:50 xcall.sh
-rwxr-xr-x 1 root root 748 9月 20 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秒
- 参数:
- 解决方案:将上面两个参数注释掉,就是一直抓取数据
更多推荐


所有评论(0)