下载Ubutu镜像
前往阿里镜像站https://mirrors.aliyun.com/oldubuntu-releases/releases/16.04.0/?spm=a2c6h.25603864.0.0.6be57ff3u2zMGR
选择下载ubuntu-16.04-desktop-amd64.iso
下载时间较久,请耐心等待
创建实验用虚拟机
选择创建新的虚拟机
选择典型
并下一步
选择安装程序光盘映像文件
点击浏览
,选中此前下载的光盘镜像文件
如下图设置
设置最大虚拟机占用内存100GB
(并不会立即使用100GB),并选中将虚拟磁盘存储为单个文件
点击完成
等待虚拟机安装完成
安装完成后,如下图所示
选择xmudblab
并输入123456
,回车即登录完成
按下CTRL
+ALT
+T
键,即可打开终端命令行
点击窗口左上角的圆X
按钮,即可关闭终端
选择左边栏中的 Floppy Disk
即可进行系统文件管理(类似打开Windows我的电脑)
打开后,选中Floppy Disk
右键,再点击Quit
,即可关闭
至此,完成虚拟机的安装
配置虚拟机环境
创建hadoop用户
sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop # 给Hadoop用户设置密码
sudo adduser hadoop sudo # 给Hadoop用户提权,避免不必要的权限问题
配置网络
点击VM上边的编辑,选择虚拟网络编辑器,点击右下角的更改设置
,对NAT模式进行修改
选择名称为VMnet8
的NAT模式,取消使用本地DHCP服务器,并如下设置子网IP及子网掩码
先点击应用,再点击确定,保存设置
在Ubutu虚拟机中,点击喇叭左边的按钮,选择编辑网络连接
点击因特网,选中第一个网络连接,并点击编辑
点击IPV4,并点击下方的Method,选中Manual选项
然后点击Add
添加IPV4地址,子网地址为172.25.254.10
子网掩码为255.255.255.0
网关为172.25.254.2
IPV4地址的设置与VM的虚拟网络编辑器息息相关
然后设置DNS:114.114.114.114
最后点击Save,进行保存退出,再点击Close,然后重启Ubutu虚拟机
更新apt
点击右边的设置界面,选择软件包&更新
点击Download ...
右边的倒三角,在弹出的窗口中,往上滑,找到China
并点击,选择...aliyun...
,并点击Choose Server
点击Reload
重新加载,等待加载完成,若加载失败,选择其他中国服务器,再进行加载
# 加载完成后,打开终端,并输入命令,进行更新
sudo apt-get update # 成功更新,如下图所示
sudo apt-get install vim -y # 安装新的编辑器
安装SSH、配置SSH无密码登陆
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环境
# 安装 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压缩包
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 # 安装成功,命令显示如下
安装 Hadoop3.3.5
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单机配置(非分布式)
Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行
非分布式即单 Java 进程,方便进行调试
运行例子:将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中
cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/* # 查看运行结果
Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output
删除
rm -r ./output
部署Hadoop伪分布式
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/
中
Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 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 的运行方式是由配置文件决定的(运行 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.44
配置完成后,执行 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主机有虚拟机的主机解析?
运行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中的文件(不是Ubutu虚拟机中的文件)
./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
就可以