Hadoop 伪分布式部署实训任务单(学生用)
================================================================
姓名:____________ 班级:____________ 学号:____________ 日期:__________
实验环境:1 台 CentOS 7 虚拟机
主机名:master
IP 地址:192.168.137.211
登录用户:root(密码 123456)
JDK 1.8:已经装好,JAVA_HOME=/usr/lib/jvm/java
Hadoop 3.1.1:已经装好,装在 /opt/hadoop
配置文件目录:/opt/hadoop/etc/hadoop
说明:本实训的这台机器**已经装好 JDK 和 Hadoop**,
所以不用再做"装 JDK、解压 Hadoop、分发"这些事,
重点是把伪分布式跑起来必须做对的那几件事做好。
本实训共 5 个任务 + 启动验证:
任务 1 关闭防火墙
任务 2 关闭 SELinux
任务 3 修改主机名,配置主机名与 IP 地址的映射
任务 4 配置 SSH 免密登录
任务 5 修改 core-site.xml 的主机名,把 hdfs-site.xml 的副本数量从 1 改成 3
最后 格式化、启动并验证伪分布式集群
【操作前先熟悉终端】
· 页面上只有一台机器(master),提示符形如 root@master:~#
· Tab 补全命令和文件名;↑ ↓ 翻历史命令;Ctrl+L 清屏;Ctrl+C 中断。
· vim 打开编辑窗口后:按 i 进入插入模式 → 改内容 → Esc → 输入 :wq 回车保存退出。
也可以直接用鼠标在窗口里编辑,改完点【:wq 保存并退出】。
· 页面左侧任务清单会自动打勾,并且显示每一步的任务描述,做完一项看一眼对不对。
· 先输入 help 可以看这台机器支持哪些命令。
· 命令不要求跟书上逐字一样,做出同样的效果就算完成。
================================================================
任务 1 关闭防火墙
================================================================
做什么:把 firewalld 停掉,并且禁止它开机自启。
为什么:Hadoop 各进程之间要用 9000(NameNode RPC)、50070(Web UI)、
8088(YARN)等端口互相通信。防火墙只要拦掉其中一个端口,
NameNode 和 DataNode 就连不上,启动时会报 Connection refused
或者 No route to host,而且报错信息看不出是防火墙的问题。
命令:
systemctl stop firewalld
systemctl disable firewalld
验证:
systemctl status firewalld 看到 inactive (dead)
firewall-cmd --state 显示 not running
================================================================
任务 2 关闭 SELinux
================================================================
做什么:先临时关掉 SELinux,再改配置文件永久关闭。
为什么:SELinux 默认是 Enforcing,它会把 Hadoop 进程访问自己数据目录的
动作当成越权操作拦下来,典型现象是 DataNode 起不来、或者一直报
Permission denied,报错信息还很不直观。
命令:
setenforce 0
vim /etc/selinux/config 把 SELINUX=enforcing 改成 SELINUX=disabled
验证:
getenforce 显示 Permissive(改完配置文件并重启后显示 Disabled)
说明:setenforce 0 是临时生效,重启后会恢复;
/etc/selinux/config 是永久配置,需要 reboot 才彻底生效。
================================================================
任务 3 修改主机名,配置主机名与 IP 地址的映射
================================================================
做什么:把主机名从 localhost.localdomain 改成 master,
并在 /etc/hosts 里加上「192.168.137.211 master」这一行。
为什么:Hadoop 配置文件里到处都要写主机名(例如 core-site.xml 的
fs.defaultFS)。Java 在做 RPC 通信时会拿主机名去反查 IP,
如果 /etc/hosts 里没有对应关系,解析就会失败或者绕到 DNS 上,
启动时会卡住或报 UnknownHostException。
命令:
hostnamectl set-hostname master
hostname 确认已经变成 master
vim /etc/hosts 在文件末尾加一行:192.168.137.211 master
验证:
hostname 显示 master
ping master 3 个包自动停,0% packet loss
cat /etc/hosts 能看到 192.168.137.211 master
小提示:改主机名也可以直接用 hostname master(两种写法都算完成)。
================================================================
任务 4 配置 SSH 免密登录
================================================================
做什么:生成密钥对,并把公钥装到本机(伪分布式就是自己发给自己)。
为什么:Hadoop 的启动脚本(start-dfs.sh / start-all.sh)内部是用 ssh
去拉起 NameNode、DataNode 这些守护进程的,而且是 BatchMode
方式调用 —— 不会给你输密码的机会。免密没配好,脚本就会报
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)。
注意:**伪分布式也要配**,因为 workers 文件里写的就是本机,
脚本同样会 ssh 回本机。
命令:
ssh-keygen -t rsa 一路回车
ssh-copy-id 192.168.137.211 也可以写 ssh-copy-id master
验证:
ls -l /root/.ssh 能看到 id_rsa 和 id_rsa.pub,私钥权限 600
ssh master hostname 不用输密码,直接回显 master
exit 返回本机终端
================================================================
任务 5 修改集群配置文件
================================================================
配置文件都在 /opt/hadoop/etc/hadoop 目录下,可以 cd 过去再 vim。
5.1 core-site.xml —— 把主机名从 localhost 改成 master
这个文件管的是 Hadoop 的核心参数,其中 fs.defaultFS 告诉所有客户端
「NameNode 在哪台机器、哪个端口」。出厂写的是 hdfs://localhost:9000,
本实训要求改成主机名写法,顺便验证任务 3 配的解析是否正常。
命令:vim /opt/hadoop/etc/hadoop/core-site.xml
把 fs.defaultFS 对应的 value 改成:
hdfs://master:9000
(端口 9000 不用动;hadoop.tmp.dir 保持 /hadoop/namenode/tmp)
验证:cat /opt/hadoop/etc/hadoop/core-site.xml 能看到 hdfs://master:9000
5.2 hdfs-site.xml —— 把副本数量从 1 改成 3
这个文件管的是 HDFS 自身的参数,最常用的就是 dfs.replication
(副本数量):它决定每个数据块在集群里存几份。出厂时伪分布式把
副本数设成了 1(只有一台 DataNode,存 3 份会一直提示副本不足),
本实训要求按教材改成 3,用来理解副本数的含义。
命令:vim /opt/hadoop/etc/hadoop/hdfs-site.xml
把 dfs.replication 对应的 value 从 1 改成:
3
验证:cat /opt/hadoop/etc/hadoop/hdfs-site.xml 能看到 3
================================================================
最后 格式化、启动与验证
================================================================
第 1 步 格式化 NameNode(**只做一次!**)
hadoop namenode -format
看到 successfully formatted 才算成功。
注意:格式化会把集群数据清掉,重复做会丢数据;
真要重来,先删掉 /hadoop 目录再格式化。
第 2 步 启动集群
/opt/hadoop/sbin/start-all.sh
(也可以分别执行 start-dfs.sh 和 start-yarn.sh)
这一步会真正考验前面 4 个准备步骤 —— 防火墙、SELinux、主机名解析、
免密登录,哪一项没做好都会在这里报错。
停止集群:stop-all.sh
第 3 步 验证(把结果写在横线上)
jps 应该看到下面 5 个进程:
NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager
我这里看到的是:______________________________________________
hdfs dfsadmin -report Live datanodes 个数 = ________
yarn node -list Total Nodes = ________
第 4 步 在 HDFS 上建目录、传文件,确认真的能用
hdfs dfs -mkdir -p /test
echo "hello hadoop" > /root/hello.txt
hdfs dfs -put /root/hello.txt /test
hdfs dfs -ls /test
结果:______________________________________________
第 5 步 打开浏览器(模拟器右侧能看到端口与进程状态)
NameNode Web UI : http://master:50070
YARN Web UI : http://master:8088
(真机上如果打不开,先确认防火墙已关闭、主机名能解析)
================================================================
【思考题】
1. 伪分布式只有一台机器,为什么还必须配 SSH 免密登录?不配会报什么错?
2. /etc/hosts 里不写「192.168.137.211 master」这一行,core-site.xml 里却写
hdfs://master:9000,会发生什么?为什么?
3. 只有一台 DataNode,dfs.replication 却设成 3,会有什么现象?
(可以启动后去 NameNode 的 Web UI 看 Under-replicated blocks)
4. setenforce 0 和修改 /etc/selinux/config 有什么区别?为什么两个都要做?
5. 为什么 NameNode 只能格式化一次?重复格式化会有什么后果?
6. hadoop namenode -format 和 start-all.sh 的顺序反了会报什么错?
【提交】
页面右上角【提交检查】→ 看分数和逐项报告 → 【导出报告】保存 txt 交给老师。
自评:我完成了 ______ / 10 项,得分 ______ 分。