获取Ubuntu系统镜像文件
访问阿里云开源镜像站点,找到Ubuntu版本的ISO文件进行下载。
https://mirrors.aliyun.com/oldubuntu-releases/releases/16.04.0/?spm=a2c6h.25603864.0.0.6be57ff3u2zMGR
点击对应的下载链接开始获取系统镜像。由于文件体积较大,下载过程可能需要一定时间,请保持网络稳定并耐心等待完成。
ubuntu-16.04-desktop-amd64.iso
搭建虚拟机环境
启动虚拟机创建向导,进入新建虚拟机流程。
创建新的虚拟机

按照提示继续操作,选择合适的配置选项。
典型
确认后点击“下一步”继续。

在接下来的步骤中,选择适当的硬件设置。
安装程序光盘映像文件
点击浏览按钮,定位到之前已下载的Ubuntu光盘镜像(ISO文件)。
浏览

参考下图所示进行参数设定。


设置虚拟磁盘的最大容量为100GB(实际占用空间将根据使用情况动态增长,并不会立即消耗全部存储)。
100GB
同时勾选相关选项以优化性能。
将虚拟磁盘存储为单个文件

点击确认完成配置。
完成

随后系统将自动开始安装流程,等待安装进度结束。
安装完成后界面如下所示:

选择登录项,并输入预设用户名信息。
xmudblab
123456
按下回车键即可成功登录系统。
通过快捷键组合调出命令行终端:
CTRL
+
ALT
+
T
若需关闭终端窗口,可点击左上角的关闭按钮。
圆X

文件管理操作
点击左侧任务栏中的文件管理图标,可以打开系统资源管理器,功能类似于Windows中的“此电脑”。
Floppy Disk
打开后,右键点击该图标,再选择弹出菜单中的关闭选项。
Quit
即可退出当前窗口。

至此,虚拟机的基础安装工作已完成。
配置开发运行环境
首先创建一个专用用户用于后续Hadoop相关操作。
sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop # 给Hadoop用户设置密码
sudo adduser hadoop sudo # 给Hadoop用户提权,避免不必要的权限问题
网络设置调整
进入VMware菜单栏,点击“编辑”,选择“虚拟网络编辑器”。
在右下角点击更改设置按钮以获得权限修改能力。
更改设置
选中名为 NAT 模式的网络类型,并对其进行配置调整。

找到标识为
VMnet8
的NAT网络,取消勾选“使用本地DHCP服务”的选项。
然后手动设置子网IP地址和子网掩码,具体配置如下图所示。
设置完毕后先点击“应用”,再点击“确定”保存更改。

切换至Ubuntu虚拟机内部,点击音频图标旁的网络连接按钮,进入网络设置界面。

选择“因特网”标签页,选中第一个网络连接条目,点击“编辑”。

进入IPv4设置页面,点击Method下拉框,选择“Manual”(手动)模式。
接着点击下方添加按钮
Add
输入IPv4地址、子网地址
172.25.254.10
子网掩码
255.255.255.0
以及网关地址
172.25.254.2
注意:此处的IP配置需与VMware虚拟网络编辑器中的设定保持一致。
随后配置DNS服务器地址为:114.114.114.114
所有设置完成后,点击“Save”保存,退出设置界面后重启Ubuntu虚拟机使配置生效。

更新软件包源
打开右侧的系统设置面板,进入“软件与更新”模块。

点击更新源地址旁边的下拉箭头
Download ...
在弹出列表中向上滑动,查找并选择中国区镜像节点
China
例如选择阿里云或其他国内加速源
...aliyun...
确认选择后点击应用更改
Choose Server

点击“重新加载”按钮,触发apt源同步。
Reload
若加载失败,可尝试更换其他国内服务器地址后再次尝试。

# 加载完成后,打开终端,并输入命令,进行更新
sudo apt-get update # 成功更新,如下图所示
sudo apt-get install vim -y # 安装新的编辑器

安装SSH并配置免密登录
所有Hadoop操作均应在hadoop用户环境下执行命令,否则可能导致操作失败。
sudo apt-get install openssh-server # Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server
ssh localhost # 尝试远程连接本机
exit # 退出刚才的 ssh localhost
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
# 这样,本机就可以被远程连接(使用xshell来代替VM)
# 另一方面,实现了Hadoop集群、单节点模式 SSH 的免密登陆
# 从此处开始,以后操作均在xshell中进行
安装Java运行环境
确保系统中已正确安装JDK,以便支持Hadoop运行。
# 安装 Java 环境(Java 21.0.04)
sudo apt-get install wget -y # 安装下载工具
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
# 若虚拟机下载失败,请使用Windows前往官网进行下载,下载完成后,上传至虚拟机
sudo mkdir /usr/lib/jvm -p # 创建放置Java的目录
sudo tar -zxvf ./jdk-21_linux-x64_bin.tar.gz -C /usr/lib/jvm # 解压Java压缩包
# 查看JAVA的版本
ls /usr/lib/jvm
jdk-21.0.4
vim ~/.bashrc # 编辑环境变量
... # 在最下一行输入,根据自己的版本改变路径
export JAVA_HOME=/usr/lib/jvm/jdk-21.0.4
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source ~/.bashrc # 刷新环境变量
java -version # 安装成功,命令显示如下

安装 Hadoop 3.3.5 版本
下载并解压Hadoop安装包,配置环境变量。
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.5/hadoop-3.3.5.tar.gz # 同理,下载Hadoop
sudo tar -zxvf ./hadoop-3.3.5.tar.gz -C /usr/local
cd /usr/local/
sudo mv ./hadoop-3.3.5/ ./hadoop
sudo chown -R hadoop:hadoop hadoop/ # 修改权限

/usr/local/hadoop/bin/hadoop version # 安装成功,显示如下

单机模式运行测试(非分布式)
Hadoop默认运行模式为本地非分布式,无需额外配置即可直接运行任务。
该模式下所有进程运行在一个Java进程中,适合调试和学习使用。
示例任务说明:以input目录下的所有文件作为输入源,提取符合正则表达式 dfs[a-z.]+ 的单词,统计其出现频次,并将结果输出至output目录。
cd /usr/local/hadoop
sudo mkdir ./input
sudo cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep ./input ./output 'dfs[a-z.]+'
sudo cat ./output/* # 查看运行结果

注意:Hadoop默认不允许覆盖已有输出目录,因此每次重复运行前必须删除原有的output文件夹。
./output
执行删除操作后方可重新运行任务。
rm -r ./output
部署伪分布式集群环境
Hadoop可在单机上以伪分布式方式运行,此时各组件作为独立的Java进程启动,主机同时承担NameNode与DataNode角色,数据读写基于HDFS进行。
主要配置文件位于以下路径:
/usr/local/hadoop/etc/hadoop/
这些配置文件采用XML格式,每个配置项通过<name>和<value>标签对定义。
# 以下是伪分布式需要修改的配置文件
vim ./etc/hadoop/core-site.xml
...
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
Hadoop的实际运行模式由配置文件内容决定,程序启动时会自动读取这些设置。
如需从伪分布式切换回本地模式,只需移除core-site.xml中的特定配置项即可。

vim ./etc/hadoop/hdfs-site.xml
...
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>

vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
# 在第54行基础上,去掉注释,并添加JAVA的具体路径
export JAVA_HOME=/usr/lib/jvm/jdk-21.0.4

完成配置后,需对NameNode进行格式化处理。
cd /usr/local/hadoop
./bin/hdfs namenode -format # 启动完成,如下图所示

随后启动NameNode和DataNode守护进程。
cd /usr/local/hadoop
./sbin/start-dfs.sh # start-dfs.sh是个完整的可执行文件,中间没有空格
# 启动完成,如下图所示

# 可通过 jps 命令来判断是否启动成功
hadoop@ubuntu:/usr/local/hadoop$ jps
6355 SecondaryNameNode
6566 Jps
6007 NameNode
6138 DataNode
# SecondaryNameNode NameNode DataNode 均出现,表示启动成功
启动成功后,可通过浏览器访问Web管理界面。
http://localhost:9870
在此界面上可查看NameNode与DataNode状态信息,并在线浏览HDFS中的文件内容。此功能要求Windows主机能够正确解析虚拟机IP地址。
运行Hadoop伪分布式任务
执行实际的数据处理任务,验证伪分布式环境是否正常工作。
./bin/hdfs dfs -mkdir -p /user/hadoop # 在 HDFS 中创建用户目录
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
./bin/hdfs dfs -ls input # 查看文件列表

在伪分布式环境下运行 MapReduce 作业,其操作方式与单机模式基本一致,主要区别在于文件读取来源的不同。伪分布式模式下,系统读取的是 HDFS 中的文件,而非 Ubuntu 虚拟机本地的文件系统。
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep input output 'dfs[a-z.]+'
./bin/hdfs dfs -cat output/* # 查看的是位于 HDFS 中的输出结果
执行 Hadoop 程序时需注意:输出目录不能预先存在,否则程序将报错。因此,若需重复执行作业,应先删除已有的 output 目录。可通过执行相应命令完成该操作。
./bin/hdfs dfs -rm -r output # 删除 output 文件夹
当需要停止 Hadoop 服务时,可运行指定命令进行关闭。
./sbin/stop-dfs.sh
再次启动 Hadoop 时,无需重新对 NameNode 进行格式化或初始化,只需执行启动脚本即可恢复正常运行状态。
./sbin/start-dfs.sh