十三、格式化 HDFS 文件系统、启动伪分布式集群
一、 格式化 HDFS 文件系统
Hadoop 生态中的文件系统 HDFS 类似一块磁盘,初次使用硬盘需要格式化,让存储空间明白该按什么方式组织存储数据。
格式化 HDFS,此操作仅需执行一次。
执行命令:
hdfs namenode -format
如图 3.23 所示,确认格式化结果。
2023-06-14 23:28:06,122 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.num.users = 10
2023-06-14 23:28:06,122 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.windows.minute = 1,5,25
2023-06-14 23:28:06,124 INFO namenode.FSNamesystem: Retry cache on namenode is enabled
2023-06-14 23:28:06,124 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis
2023-06-14 23:28:06,125 INFO util.GSet: Computing capacity for map NameNodeRetryCache
2023-06-14 23:28:06,125 INFO util.GSet: VM type = 64-bit
2023-06-14 23:28:06,126 INFO util.GSet: 0.029999999329447746% max memory 495.5 MB = 142.6 KB
2023-06-14 23:28:06,126 INFO util.GSet: capacity = 2^14 = 16384 entries
2023-06-14 23:28:06,149 INFO namenode.FSImage: Allocated new BlockPoolId: BP-624839550-127.0.0.1-1686754686141
说明格式化成功
2023-06-14 23:28:06,163 INFO common.Storage: Storage directory /opt/module/hadoop-3.2.1/tmp/dfs/name has been successfully formatted.
2023-06-14 23:28:06,180 INFO namenode.FSImageFormatProtobuf: Saving image file /opt/module/hadoop-3.2.1/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
2023-06-14 23:28:06,242 INFO namenode.FSImageFormatProtobuf: Image file /opt/module/hadoop-3.2.1/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 399 bytes saved in 3 seconds .
2023-06-14 23:28:06,251 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
2023-06-14 23:28:06,255 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid=0 when me et shutdown.
2023-06-14 23:28:06,256 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1
************************************************************/
图 3.23 格式化结果确认
二、启动伪分布式集群
(1)启动 Hadoop 集群
执行命令:
start-all.sh
(2)查看各节点的服务进程,确认集群启动是否成功
执行命令:
jps
如图 3.24 所示,可以查看到 NameNode
、DataNode
、ResourceManager
、SecondaryNameNode
、NodeManager
五个服务进程则表示 Hadoop 启动正常。
[root@localhost ~]# jps
2708 NodeManager
2078 NameNode
2341 SecondaryNameNode
3130 Jps
2155 DataNode
2589 ResourceManager
图 3.24 Hadoop 进程
(3)确认安装部署成功
① 打开 Google 浏览器,输入地址
http://192.168.128.130:9870
可以打开 HDFS 页面。
图 3.25 HDFS 管理页面
如图 3.25 所示,在 HDFS 主页中可以获得许多信息。
Overview:集群概述。介绍了集群的基本情况,包括版本、集群 ID、安全模式、数据节点文件系统的容量和使用率、数据存储的路径等基本信息。
Datanode:数据节点。包含了数据节点使用率柱状图、每个数据节点的磁盘使用率、运行中的节点、进入维护的节点列表、退役的节点列表等信息。
datanode-volume-failures:数据节点卷故障。
snapshot:快照。包含了快照摘要、快照目录列表、已创建的快照目录等信息。
startup-progress:启动进度。包含了集群启动时加载的
fsimage
和edits
信息。Utilities:包含了集群 DFS 存储系统的可视化浏览、各个集群组件的日志等信息。
② 打开 Google 浏览器,输入地址 http://192.168.128.130:8088
,可以打开 Yarn 页面。
图 3.26 YARN 管理页面
如图 3.26 所示,在 Yarn 主页中可以获得许多信息。
Active Nodes:表示 Yarn 集群管理的节点的个数,其实就是
NodeManager
的个数,我们集群有 1 个NodeManager
。Memory Total:表示 Yarn 集群管理的内存的总大小,这个内存总大小等于所有的
NodeManager
管理的内存之和。Vcores Total:表示 Yarn 集群管理的 CPU 的虚拟核心的总数,这个大小等于所有的
NodeManager
管理的虚拟核心之和。Scheduler Type:表示资源分配的类型。
Minimum Allocation:最小分配资源,即当一个任务向 Yarn 申请资源时,Yarn 至少会分配
<memory: 1024, vCores: 1>
这个资源给这个任务。分配的最小内存可以由yarn-site.xml
配置文件中的yarn.scheduler.minimum-allocation-mb
(默认值是 1024MB)来控制,最小核心数可以由yarn-site.xml
配置文件中的yarn.scheduler.minimum-allocation-vcores
(默认值是 1)来控制。Maximum Allocation:最大分配资源,即当一个任务向 Yarn 申请资源时,Yarn 最多会分配
<memory: 1630, vCores: 2>
这个资源给这个任务。这个分配的最大内存由yarn-site.xml
配置文件中的yarn.scheduler.maximum-allocation-mb
(默认值是 8192MB)来控制,最多核心数可以由yarn-site.xml
配置文件中的yarn.scheduler.maximum-allocation-vcores
(默认值是 32)来控制,当然这两个值肯定不能比集群管理的资源还要多。
③ 还可以使用 netstat -ntpl
命令查看 ip 和端口地址是否正常 执行命令:
netstat -nltp
如图 3.27 所示,使用 netstat -ntpl
命令查看 ip 和端口地址。
[root@localhost ~]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8030 0.0.0.0:* LISTEN 2589/java
tcp 0 0 0.0.0.0:8031 0.0.0.0:* LISTEN 2589/java
tcp 0 0 0.0.0.0:8032 0.0.0.0:* LISTEN 2589/java
tcp 0 0 0.0.0.0:8033 0.0.0.0:* LISTEN 2589/java
tcp 0 0 127.0.0.1:33739 0.0.0.0:* LISTEN 2155/java
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2087/java
tcp 0 0 0.0.0.0:8040 0.0.0.0:* LISTEN 2708/java
tcp 0 0 0.0.0.0:8042 0.0.0.0:* LISTEN 2708/java
tcp 0 0 0.0.0.0:9864 0.0.0.0:* LISTEN 2155/java
tcp 0 0 0.0.0.0:9866 0.0.0.0:* LISTEN 2155/java
tcp 0 0 0.0.0.0:9867 0.0.0.0:* LISTEN 2155/java
tcp 0 0 0.0.0.0:9868 0.0.0.0:* LISTEN 2155/java
tcp 0 0 0.0.0.0:34926 0.0.0.0:* LISTEN 2341/java
tcp 0 0 0.0.0.0:9870 0.0.0.0:* LISTEN 2087/java
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 887/sshd
tcp 0 0 0.0.0.0:9876 0.0.0.0:* LISTEN 2087/java
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 2589/master
tcp 0 0 0.0.0.0:13562 0.0.0.0:* LISTEN 2708/java
tcp6 0 0 :::22 :::* LISTEN 887/sshd
tcp6 0 0 ::1:125 :::* LISTEN 7808/jsvc
tcp6 0 0 :::* :::* LISTEN 1897/master
图 3.27 开发端口一览
[root@localhost ~]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8030 0.0.0.0:* LISTEN 2589/java
tcp 0 0 0.0.0.0:8031 0.0.0.0:* LISTEN 2589/java
tcp 0 0 0.0.0.0:8032 0.0.0.0:* LISTEN 2589/java
tcp 0 0 0.0.0.0:8033 0.0.0.0:* LISTEN 2589/java
tcp 0 0 127.0.0.1:33739 0.0.0.0:* LISTEN 2155/java
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2087/java
tcp 0 0 0.0.0.0:8040 0.0.0.0:* LISTEN 2708/java
tcp 0 0 0.0.0.0:8042 0.0.0.0:* LISTEN 2708/java
tcp 0 0 0.0.0.0:9864 0.0.0.0:* LISTEN 2155/java
tcp 0 0 0.0.0.0:9866 0.0.0.0:* LISTEN 2155/java
tcp 0 0 0.0.0.0:9867 0.0.0.0:* LISTEN 2155/java
tcp 0 0 0.0.0.0:9868 0.0.0.0:* LISTEN 2155/java
tcp 0 0 0.0.0.0:34926 0.0.0.0:* LISTEN 2341/java
tcp 0 0 0.0.0.0:9870 0.0.0.0:* LISTEN 2087/java
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 887/sshd
tcp 0 0 0.0.0.0:9876 0.0.0.0:* LISTEN 2087/java
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 2589/master
tcp 0 0 0.0.0.0:13562 0.0.0.0:* LISTEN 2708/java
tcp6 0 0 :::22 :::* LISTEN 887/sshd
tcp6 0 0 ::1:125 :::* LISTEN 7808/jsvc
tcp6 0 0 :::* :::* LISTEN 1897/master
三、报错问题处理
1、主机名映射到IP问题
从报错信息 Node1: ssh: Could not resolve hostname node1: Name or service not known
来看,这是因为系统无法解析主机名 Node1
,导致在启动 NameNode
和 SecondaryNameNode
时出现问题 ,尽管你修改了 core-site.xml
中的 NameNode
地址,但这个主机名解析问题依然存在。以下是一些可能的原因及解决办法:
/etc/hosts
文件配置问题
/etc/hosts
文件用于将主机名映射到 IP 地址,Hadoop 启动时会依赖它来解析主机名。
vim /etc/hosts
解决方法:使用文本编辑器打开
/etc/hosts
文件(命令vim /etc/hosts
),确保文件中有一行包含你主机的 IP 地址和主机名的映射关系。例如,如果你的主机 IP 是192.168.1.100
,主机名是Node1
,那么文件中应该有这样一行:192.168.128.130 Node1
保存文件后,再尝试启动
HDFS
。
2、运行进程问题(停止进程、运行进程)
NameNode 正在以进程 ID 为 3671 的进程运行,要先停止它(才能执行格式化操作)。
解决办法
可以使用以下命令停止 NameNode 进程:
hdfs --daemon stop namenode
停止后,再执行 hdfs namenode -format
命令来格式化 NameNode。
执行 stop-all.sh
停止所有服务,再执行 start-all.sh
启动
stop-all.sh
start-all.sh
3、网页无法打开,防火墙问题
检查防火墙设置
若 Hadoop 服务器开启了防火墙,需确保9870端口在防火墙的允许访问规则内。
对于
iptables
防火墙,可使用iptables -A INPUT -p tcp --dport 9870 -j ACCEPT
命令开放端口(需根据实际系统调整)。
对于
firewalld
防火墙,可使用firewall-cmd --zone=public --add-port=9870/tcp --permanent
然后再使用
firewall-cmd --reload
来开放端口。