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 项,得分 ______ 分。