目录
hadoop伪分布式
HDFS 基础文件操作
完全分布式
hadoop高可用
| ip | hosts | roles |
| 192.168.73.156 | server1 | NameNode |
| 192.168.73.157 | server2 | DataNode |
| 192.168.73.158 | server3 | DataNode |
| 192.168.73.159 | server4 | DataNode |
| 192.168.73.160 | server5 |
[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.gz和jdk-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_HOME、HADOOP_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
页面Utilities→Browse 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~