hadoop伪分布 完全分布式 高可用
2026/8/23 7:28:34 网站建设 项目流程

目录

hadoop伪分布式

HDFS 基础文件操作

完全分布式

hadoop高可用


iphostsroles
192.168.73.156server1NameNode
192.168.73.157server2DataNode
192.168.73.158server3DataNode
192.168.73.159server4DataNode
192.168.73.160server5

[root@server1 ~]# wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

Hadoop 官方建议禁止使用 root 用户运行集群,因此我们新建普通用户sxy用于整套 Hadoop 操作,同时设置密码方便登录管理。 将提前下载好的hadoop-3.3.6.tar.gzjdk-8u181-linux-x64.tar.gz移动至 sxy 家目录,切换 sxy 用户进行解压部署。

[root@server1 ~]# useradd sxy
[root@server1 ~]# passwd sxy

[root@server1 ~]# mv hadoop-3.3.6.tar.gz jdk-8u181-linux-x64.tar.gz /home/sxy/
[root@server1 ~]# su sxy

[sxy@server1 ~]$ tar zxf hadoop-3.3.6.tar.gz
[sxy@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz

[sxy@server1 ~]$ ln -s hadoop-3.3.6 hadoop
[sxy@server1 ~]$ ln -s jdk1.8.0_181 jdk

hadoop伪分布式

Hadoop 伪分布式模式是学习 Hadoop 的入门部署方案,仅使用单台服务器,将 HDFS、YARN 所有组件以独立进程运行在本机,模拟分布式架构。和完全分布式、高可用 HA 集群相比,部署简单,适合理解 Hadoop 基础组件通信流程,也是后续学习完全分布式、Hadoop HA 高可用的基础。本文采用 Hadoop-3.3.6 + JDK1.8 完成伪分布式完整部署。

[sxy@server1 ~]$ vim .bash_profile

编辑用户个人环境变量文件.bash_profile,定义JAVA_HOMEHADOOP_HOME,并将两个软件的 bin、sbin 目录加入系统 PATH。 执行source ~/.bash_profile让环境变量立即生效,实现任意目录直接调用 java、hadoop 相关命令。

说明:.bash_profile仅对当前 sxy 用户生效;如果需要全局所有用户生效,则配置/etc/profile

[sxy@server1 ~]$ source ~/.bash_profile

进入/home/sxy/hadoop

hadoop-env.sh是 Hadoop 的环境配置脚本,必须指定 JAVA_HOME,Hadoop 启动各守护进程时依赖 JDK 运行环境,如果不配置会直接启动失败。

[sxy@server1 hadoop]$ vim etc/hadoop/hadoop-env.sh

进入/home/sxy/hadoop/etc/hadoop目录

[sxy@server1 hadoop]$ vim core-site.xml

core-site.xml 是 Hadoop 核心全局配置文件。 属性fs.defaultFS:定义 HDFS 默认文件系统地址。伪分布式填写hdfs://localhost:9000,代表本机监听 9000 端口作为 HDFS 访问入口。

[sxy@server1 hadoop]$ vim hdfs-site.xml

负责 HDFS 相关参数配置。 属性dfs.replication:数据块副本数量。伪分布式只有一台服务器,无法存储多副本,因此设置值为 1;生产完全分布式一般配置 3 副本。

配置免密

Hadoop 启停脚本(start-dfs.sh/start-yarn.sh)底层使用 SSH 远程登录管理各个节点进程,伪分布式本机也必须配置localhost免密登录,否则执行启停脚本会反复要求输入密码,部署失败。

[sxy@server1 ~]$ ssh-keygen
[sxy@server1 ~]$ ssh-copy-id localhost

/home/sxy/hadoop

该命令用于初始化 NameNode 元数据目录,生成集群唯一的 ClusterID,搭建全新 HDFS 文件系统。

⚠️ 重点提醒:格式化仅允许执行一次,多次格式化会造成 NameNode 与 DataNode 的集群 ID 不一致,DataNode 无法正常注册,集群启动失败。控制台输出successfully formatted代表格式化成功。

启动 HDFS 集群 + 进程验证

[sxy@server1 hadoop]$ bin/hdfs namenode -format

[sxy@server1 hadoop]$ sbin/start-dfs.sh

[sxy@server1 ~]$ jps

start-dfs.sh一键启动 HDFS 三大守护进程:NameNode、DataNode、SecondaryNameNode。jps是 JDK 自带工具,用来查看本机 Java 进程,伪分布式正常结果需要看到:NameNode、DataNode、SecondaryNameNode。缺少任意进程代表启动异常,需要查看日志排错。

HDFS 基础文件操作

[sxy@server1 hadoop]$ bin/hdfs dfs -mkdir /user

[sxy@server1 hadoop]$ bin/hdfs dfs -mkdir /user/sxy

HDFS 是分布式文件系统,使用hdfs dfs作为文件操作命令,语法类似 Linux 本地命令:

  • -mkdir:在 HDFS 上创建目录,遵循 Hadoop 规范,创建用户工作目录/user/sxy
  • -put:将本地服务器文件上传至 HDFS 分布式文件系统,此处上传配置 xml 文件作为 MapReduce 测试数据源

[sxy@server1 hadoop]$ bin/hdfs dfs -mkdir input
[sxy@server1 hadoop]$ bin/hdfs dfs -put etc/hadoop/*.xml input

运行 MapReduce 官方示例程序(grep 单词统计)

[sxy@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'

下载任务结果,查看输出内容

[sxy@server1 hadoop]$ bin/hdfs dfs -get output output

[sxy@server1 hadoop]$ cat output/*

访问地址:http://192.168.73.156:9870

页面UtilitiesBrowse the file system,可以可视化浏览 HDFS 上所有目录、文件,在线查看文件内容、副本数量,方便运维查看集群数据,替代命令行操作。

完全分布式

伪分布式仅单机运行,无法体现多节点分布式存储特性;完全分布式采用多台独立服务器部署 Hadoop 组件,节点分工不同,数据可以跨机器保存多副本,贴近真实生产基础架构。本次实验采用三台机器 server1、server2、server3 搭建,利用 NFS 共享目录实现三台服务器统一部署 Hadoop,简化多机同步配置工作。

添加server2 server3

三台节点安装

安装 nfs 服务

[root@server1 ~]# yum install -y nfs-utils

编辑 NFS 导出配置/etc/exports,写入:

  • rw,sync:读写权限、同步写入,保证数据一致性
  • all_squash,anonuid=1000,anongid=1000:所有访问用户映射为 sxy 用户 uid=1000,权限统一,避免 hadoop 读写权限报错
  • no_subtree_check:关闭子树校验,提升访问性能

设置开机自启

[sxy@server1 root]$ sudo systemctl enable --now nfs

2,3建立用户并创建密码

[root@server3 ~]# useradd sxy
[root@server3 ~]# passwd sxy

免密

[sxy@server1 ~]$ ssh-copy-id server2
[sxy@server1 ~]$ ssh-copy-id server3

查找server1的对外共享目录

[root@server2 ~]# showmount -e server1

2,3均挂载

[root@server2 ~]# mount 192.168.73.156:home/sxy/ /home/sxy/

停止原有伪分布式集群

[sxy@server1 hadoop]$ sbin/stop-dfs.sh

如果之前运行过伪分布式,必须先正常关闭集群,避免旧元数据干扰完全分布式部署。

进入目录/home/sxy/hadoop/etc/hadoop

[sxy@server1 hadoop]$ vim core-site.xml

和伪分布式 localhost 不同,完全分布式填写主节点主机名 server1,所有节点通过域名访问统一的 NameNode 服务。

[sxy@server1 hadoop]$ vim hdfs-site.xml

副本数修改为 2,三台节点环境下,数据块保存 2 份副本,实现跨机器冗余;生产环境常用 3 副本。

[sxy@server1 hadoop]$ vim workers

写入 DataNode 从节点主机名

重新格式化

[sxy@server1 hadoop]$ pwd
/home/sxy/hadoop

[sxy@server1 hadoop]$ bin/hdfs namenode -format

输入Y

开启

[sxy@server1 hadoop]$ sbin/start-dfs.sh

报错:第一次查看没有server3

[root@server3 ~]# cd /home/sxy/hadoop/logs
[root@server3 logs]# grep -E "register|denied|ERROR" hadoop-sxy-datanode-server3.log

发现是hosts解析把server1的ip写错了,修改之后就对了

[sxy@server1 ~]$ cd hadoop
[sxy@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[sxy@server1 hadoop]$ bin/hdfs dfs -mkdir /user/sxy
[sxy@server1 hadoop]$ bin/hdfs dfs -mkdir input
[sxy@server1 hadoop]$ bin/hdfs dfs -put etc/hadoop/*.xml input

完全分布式和伪分布式的 HDFS 操作命令语法完全一致,区别在于底层存储: 伪分布式所有副本保存在单台机器;完全分布式文件副本跨多台服务器存放,具备基础数据容错能力。文件上传完成后,可以访问 HDFS Web UI,查看文件存储位置、副本分布,验证多节点存储特性。

hadoop高可用

集群扩容,新加server4

新开server4

创建用户设密码 并安装nfs共享工具

[root@server4 ~]# useradd sxy
[root@server4 ~]# passwd sxy
[root@server4 ~]# yum install -y nfs-utils

同样设置免密

[sxy@server1 ~]$ ssh-copy-id server4

查看server1共享目录

沿用 NFS 共享/home/sxy,无需在 server4 重新上传、解压 Hadoop 和 JDK,所有节点共用同一套程序文件,统一维护配置,降低多节点部署工作量。

[root@server4 ~]# showmount -e server1

挂载

[root@server4 ~]# mount 192.168.73.156:home/sxy/ /home/sxy/

[root@server4 ~]# cd /home/sxy/
[root@server4 sxy]# cd hadoop/etc/hadoop/
[root@server4 hadoop]# vim workers

添加server4

[sxy@server1 hadoop]$ vim mapred-site.xml

配置解释:指定 MapReduce 任务运行调度框架为 YARN,并配置 MR 程序依赖包路径,保证 MapReduce 任务可以正常提交运行。

[sxy@server1 hadoop]$ vim yarn-site.xml

配置解释:开启 YARN 的 shuffle 服务,Map 阶段输出的数据依靠 shuffle 传递给 Reduce;配置环境变量白名单,NodeManager 容器可以读取 Hadoop 相关环境变量,避免 MR 任务运行报环境缺失错误。

[sxy@server1 hadoop]$ vim hdfs-site.xml

配置解释:集群扩容至 3 个数据节点,修改数据块副本数为 3,和生产环境标准配置保持一致,三份副本分散存储在不同 DataNode,提升数据容错能力。

[sxy@server1 hadoop]$ pwd
/home/sxy/hadoop

在主节点启动YARN整套服务
[sxy@server1 hadoop]$ sbin/start-yarn.sh

server4手动验证进程(也可直接使用一键脚本批量启停)

[sxy@server4 ~]$ /home/sxy/hadoop/bin/hdfs --daemon start datanode
[sxy@server4 ~]$ /home/sxy/jdk/bin/jps

正常启动后,server4 节点必须看到两个进程:

  • DataNode:HDFS 数据存储进程
  • NodeManager:YARN 节点资源管理进程

查看节点,server4已就位

今天的博客到这里就结束了,886~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询