零基础起步
假设你什么都没装过。跟着 5 个关卡走,每一步都写清敲什么、看到什么、报错怎么办。
这是给谁的
第一次接触 Hadoop、连 Linux 命令都不熟的同学。走完这 5 关,你就具备了做第 2 章之后所有实验的基础。
- 能在虚拟机上装好 Linux 并配置静态 IP
- 能装 JDK、配环境变量
- 能配 SSH 免密、装好 Hadoop 并启动集群
- 能用 HDFS 命令存取文件
- 能跑通第一个 MapReduce 作业
关卡目录
第 0 关 · 准备虚拟机与网络(15 分钟)
目标把一台能上网的 Linux 虚拟机跑起来。
前提:装有 VMware 的 Windows 主机
前提:装有 VMware 的 Windows 主机
1创建虚拟机
🎯 安装路径避免中文和空格;网络选 NAT;磁盘 40GB 以上。
# 创建后先确认网络
ping www.baidu.com👀 你应该看到
64 bytes from ... time=12.3 ms
能 ping 通就说明 NAT 网络正常。
⚠️ 如果报错
ping: unknown host
→ NAT/DNS 没配好,检查虚拟网络编辑器与 /etc/resolv.conf。
2设置静态 IP 与主机名
🎯 集群里每台机器 IP 必须固定,否则重启后 Hadoop 找不到节点。
hostnamectl set-hostname hadoop1
vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 改 BOOTPROTO=static 并填 IPADDR/GATEWAY/DNS1
systemctl restart network
ip addr👀 你应该看到
inet 192.168.249.161/24 brd 192.168.249.255 scope global ens33
能看到自己设置的 IP 就成功了。
⚠️ 如果报错
重启网络失败
→ CentOS 8 用 NetworkManager:systemctl restart NetworkManager或 nmcli 配置。
✅ 过关标准能 ping 通外网、ip addr 显示固定 IP。
第 1 关 · 装 JDK(10 分钟)
目标Hadoop 是 Java 写的,没有 JDK 一切免谈。
前提:第 0 关通过
前提:第 0 关通过
1解压并配置环境变量
🎯 用 JDK 8(Hadoop 3.x 也支持 11)。
tar -zxvf jdk-8u-linux-x64.tar.gz -C /export/servers/
vi ~/.bashrc
export JAVA_HOME=/export/servers/jdk1.8.0_141
export PATH=$JAVA_HOME/bin:$PATH
source ~/.bashrc
java -version👀 你应该看到
java version "1.8.0_141"
出现版本号即成功。
⚠️ 如果报错
java: command not found
→ PATH 没生效:source ~/.bashrc或检查路径拼写。
✅ 过关标准java -version 能打印版本。
第 2 关 · 克隆节点 + SSH 免密(10 分钟)
目标三台机器互相免密登录,这是 Hadoop 启动脚本的前提。
前提:JDK 已装好
前提:JDK 已装好
1克隆两台并改 IP
🎯 完整克隆 hadoop1 得到 hadoop2、hadoop3,逐台改主机名与 IP。
hostnamectl set-hostname hadoop2
vi /etc/hosts # 三行映射写全
ping hadoop1👀 你应该看到
64 bytes from hadoop1 (192.168.249.161)
三台互 ping 都要通。
⚠️ 如果报错
克隆后 IP 冲突
→ 两台机器同时在线会抢地址,先在 VMware 里改 MAC 再配 IP。
2配置免密登录
🎯 三台互发公钥。
ssh-keygen -t rsa # 三次回车
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
ssh hadoop2 # 不再要密码即成功👀 你应该看到
Last login: ...
不再提示输入密码就对了。
⚠️ 如果报错
仍然要密码
→ 检查 ~/.ssh 权限:chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys。
✅ 过关标准ssh hadoop2 免密登录成功。
第 3 关 · 装 Hadoop 并启动(15 分钟)
目标配好 5 个配置文件,启动 HDFS 与 YARN。
前提:第 2 关通过
前提:第 2 关通过
1解压并配置环境变量
🎯 把 hadoop 解压到 /export/servers,配 HADOOP_HOME。
tar -zxvf hadoop-3.3.1.tar.gz -C /export/servers/
vi ~/.bashrc
export HADOOP_HOME=/export/servers/hadoop-3.3.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
source ~/.bashrc
hadoop version👀 你应该看到
Hadoop 3.3.1
能打印版本即成功。
⚠️ 如果报错
hadoop: command not found
→ PATH 少了 sbin 目录。
2格式化并启动
🎯 首次启动前必须格式化 NameNode,且只能一次。
hdfs namenode -format
start-dfs.sh
start-yarn.sh
jps👀 你应该看到
NameNode DataNode SecondaryNameNode ResourceManager NodeManager Jps
五个进程齐了就算成功。
⚠️ 如果报错
只有 Jps
→ 看日志$HADOOP_HOME/logs/;常见是 Java home 未配置或 SSH 免密失效。重复格式化导致起不来
→ 删掉所有节点的 data 目录后重新 format 一次即可。
✅ 过关标准jps 能看到 5 个进程,Web 界面 9870 能打开。
第 4 关 · 跑通第一个 MapReduce(10 分钟)
目标用官方 WordCount 验证集群真的能算。
前提:第 3 关通过
前提:第 3 关通过
1准备数据并提交作业
🎯 官方示例 jar 在 $HADOOP_HOME/share/hadoop/mapreduce/ 下。
hdfs dfs -mkdir -p /input
hdfs dfs -put w.txt /input/
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output
hdfs dfs -cat /output/part-r-00000👀 你应该看到
hadoop 1 hello 2 world 1
能看到词频统计结果就说明整条链路(HDFS + YARN + MapReduce)都通了。
⚠️ 如果报错
/output already exists
→ 输出目录必须不存在:hdfs dfs -rm -r /output。作业卡在 ACCEPTED
→ YARN 资源不足或 NodeManager 没起来,检查 8088 界面。
✅ 过关标准能查到 part-r-00000 的统计结果。
常见报错速查
| 报错关键字 | 原因 | 怎么解决 |
|---|---|---|
| java.net.ConnectException: Call From … to hadoop1:9000 failed | HDFS 没启动 | start-dfs.sh 后用 jps 确认 NameNode |
| There are 0 datanode(s) running | DataNode 未启动或 clusterID 不一致 | 检查 jps;重复 format 过就清空 data 目录重新 format |
| Permission denied: user=hadoop, access=WRITE, inode="/user/hadoop" | HDFS 目录权限不足 | hdfs dfs -mkdir -p /user/hadoop && hdfs dfs -chown hadoop:hadoop /user/hadoop |
| Container is running beyond physical memory limits | 容器内存超限 | 调大 mapreduce.map.memory.mb,或减小数据量 |
| java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver | Hive 缺少 MySQL 驱动 | 把 mysql-connector-java-*.jar 放到 $HIVE_HOME/lib |
| Error: Could not open client transport with JDBC Uri | HiveServer2 没启动 | hiveserver2 & 后 netstat -nltp | grep 10000 |
| HMaster 启动后立刻退出 | ZooKeeper 未就绪或 hbase.rootdir 配置错误 | 先确保 zkServer.sh status 正常,再核对 hbase-site.xml |
| ssh: connect to host hadoop2 port 22: Connection refused | 目标机 SSH 服务未启动 | systemctl start sshd |
完成自检
- ☐ 能独立装好 3 台三节点虚拟机集群
- ☐ jps 每次启动都能看到完整进程
- ☐ 能熟练用 hdfs dfs 存取文件
- ☐ 能提交并查看 MapReduce 作业
- ☐ 遇到问题知道先看哪个日志文件