前哨站/零基础起步
零基础起步

零基础起步

假设你什么都没装过。跟着 5 个关卡走,每一步都写清敲什么、看到什么、报错怎么办。

这是给谁的

第一次接触 Hadoop、连 Linux 命令都不熟的同学。走完这 5 关,你就具备了做第 2 章之后所有实验的基础。

  • 能在虚拟机上装好 Linux 并配置静态 IP
  • 能装 JDK、配环境变量
  • 能配 SSH 免密、装好 Hadoop 并启动集群
  • 能用 HDFS 命令存取文件
  • 能跑通第一个 MapReduce 作业

第 0 关 · 准备虚拟机与网络(15 分钟)

目标把一台能上网的 Linux 虚拟机跑起来。
前提:装有 VMware 的 Windows 主机

1创建虚拟机

🎯 安装路径避免中文和空格;网络选 NAT;磁盘 40GB 以上。

SHELL
# 创建后先确认网络
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 找不到节点。

SHELL
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 关通过

1解压并配置环境变量

🎯 用 JDK 8(Hadoop 3.x 也支持 11)。

SHELL
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 已装好

1克隆两台并改 IP

🎯 完整克隆 hadoop1 得到 hadoop2、hadoop3,逐台改主机名与 IP。

SHELL
hostnamectl set-hostname hadoop2
vi /etc/hosts     # 三行映射写全
ping hadoop1
👀 你应该看到
64 bytes from hadoop1 (192.168.249.161)

三台互 ping 都要通。

⚠️ 如果报错
  • 克隆后 IP 冲突
    → 两台机器同时在线会抢地址,先在 VMware 里改 MAC 再配 IP。

2配置免密登录

🎯 三台互发公钥。

SHELL
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 关通过

1解压并配置环境变量

🎯 把 hadoop 解压到 /export/servers,配 HADOOP_HOME。

SHELL
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,且只能一次。

SHELL
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 关通过

1准备数据并提交作业

🎯 官方示例 jar 在 $HADOOP_HOME/share/hadoop/mapreduce/ 下。

SHELL
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 failedHDFS 没启动start-dfs.sh 后用 jps 确认 NameNode
There are 0 datanode(s) runningDataNode 未启动或 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.DriverHive 缺少 MySQL 驱动把 mysql-connector-java-*.jar 放到 $HIVE_HOME/lib
Error: Could not open client transport with JDBC UriHiveServer2 没启动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 作业
  • ☐ 遇到问题知道先看哪个日志文件