如何在VMware中安装Hadoop
本教程是在 VMware 的环境下搭建 Hadoop 集群,如果不使用 VMware ,可以跳过 VMware 部分。
本教程更新时间为:2023 年 3 月 20 日,在此之后官方版本更新,请酌情参考。
版本
- VMware: 17.0.1
- JDK: Adoptium 8
- Hadoop: 3.3.4
VMware
优点
- vmware 是行业领先的多云服务提供商,提供面向各式应用的多云服务,助力企业级控制力的同时实现数字创新。
- vmware 支持许多 Linux 发行版直接安装虚拟机添加件,稳定,随意升级。
- vmware 可以选择单个文件存储虚拟机,方便管理和迁移。
缺点
- 硬件资源利用率较低,性能损失较大。
- 对软件支持较差,可能出现兼容性问题。
- 硬盘读写速度较慢。
下载安装包
可从官网下载一个VMware安装包,或者从共享资料中下载安装包。
双击安装包进行安装
点击【更改】,将安装位置修改到C盘之外的位置,以及关闭【将VMware Workstation控制台工具添加到系统PATH】这一选项,我们之后的操作并不需要此功能。
这是修改后的界面,然后点击【下一步】,继续进行安装。
选择在桌面和开始菜单添加快捷方式,之后进行操作,然后点击【下一步】,【安装】。
安装完毕后,点击【许可证】进行激活即可。
最后呈现这样的画面即可安装完成。
配置网络
在真正安装Ubuntu虚拟机之前,以便之后更方便的搭建集群,我们需要先配置好一个虚拟网络,方便之后数据交互。
首先我们双击单开VMware的快捷方式,运行软件。
选择左上角的【编辑】-【虚拟网络编辑器】,添加自定义网络。
选择右下角的【更改设置】,进行管理员授权后才能进行修改。
点击【添加网路】按钮,添加一个新的网络。
随意选择一个网络名字,我这里选择VMnet0
,然后点击【确定】。
选择新添加的VMnet0
网络,将模式调整为NAT模式,我这里不选择【将主机虚拟适配器连接至此网络】,因为这次搭建的分布式Hadoop,不用将PC主机作为一个节点。
选择上【使用本地DHCP服务将IP地址分配至虚拟机】。
子网IP输入:192.168.20.0
,输入其他地址也可以,但需保证最后一位为0
。
点击【DHCP设置】按钮。
将起始IP地址设置为:192.168.20.101
,结束IP地址设置为:192.168.20.200
,让后续创建的虚拟机能够在此范围内自动分配一个IP,然后点击【确定】。
然后点击确定,应用此虚拟网络。
Ubuntu
接下来我们就需要使用VMware搭建 Hadoop 集群,首先我们需要准备一个Ubuntu镜像,配置好Ubuntu,通过克隆的方式创建多个虚拟机,再在此基础上搭建Hadoop集群。
下载镜像
首先我们需要准备一个 ubuntu,作为 master 节点,首先我们访问Ubuntu官网下载桌面镜像:下载Ubuntu桌面系统 | Ubuntu
选择LTS版本的Ubuntu系统进行下载。
下载完毕后,是个iso
后缀的镜像文件。
创建虚拟机
我们首先来创建集群中的第一个节点,主节点(master)。
在VMware中,点击【创建新的虚拟机】,选择【典型】模式,点击【下一步】。
为了模拟真实的安装环境以便之后真实上机操作,我们选择【稍后安装操作系统】,点击【下一步】。
选择客户机操作系统为【Linux】,版本为【Ubuntu 64位】,点击下一步。
输入虚拟机名称,我这里为了方便记忆选择输入【主节点01】,选择保存位置,尽量不要保存至C盘,避免以后空间不足,点击【下一步】。
接下来输入虚拟机占用空间,20G时完全足够了,如果空间不足可以适当减少,点击【下一步】。
点击【自定义硬件】,修改网络和插入光盘。
首先选择【新CD/DVD】,通过浏览的方式,将刚才下载的Ubuntu镜像使用。
然后选择【网络适配器】,将【网络连接】选择为自定义中我们刚才创建的【VMnet0】网络,点击【关闭】,点击【完成】。
启动虚拟机
点击绿色播放键可启动按钮,也可以通过菜单栏的下拉按钮,启动/关闭/挂起/重启虚拟机。
安装Ubuntu
启动虚拟机后,会自动读取虚拟DVD中的Ubuntu镜像安装虚拟机。
点击屏幕中央,让虚拟机捕获鼠标指针,使用【回车】,选择【Try or Install Ubuntu】。
通过左侧列表,选择【中文(简体)】选择语言方便操作,然后点击【安装Ubuntu】。
键盘布局选择【English(US)】-【English(US)】,点击【继续】。
点击【最小安装】,取消选择【安装Ubuntu时下载更新】,点击继续【继续】。
因为我们实在一个空白的虚拟机上安装,所以我们选择【秦楚整个磁盘并安装Ubuntu】,点击【现在安装】。
为了方便之后的免密登录,我们统一使用hadoop
账户名,使用其他名字,或者使用root
(不推荐)也可以,点击【继续】。
因为我们没有选择下载时更新,所以我们不会下载特别多的文件,稍等片刻即可。
安装完毕后,呈现这个画面,点击【我已完成安装】,【现在重启】。
出现这个页面,是因为没有移除镜像,将虚拟机进行关机。
点击【编辑虚拟机设置】,选择【新CD/DVD】,选择【使用物理驱动器】或者将虚拟机光驱移除都可以,点击【确定】关闭窗口,点击【开启此虚拟机】开始配置Ubuntu。
配置Ubuntu
修改分辨率
通过【设置】-【显示器】,可调整桌面显示大小,更方便查看内容。
换源
可通过【菜单】-【软件更新器】,进行软件更新。
点击软件更新器的【设置】-【Ubuntu软件】-【下载自】,进行换源。
可点击【其他】,通过【选择最佳服务器】测速测速延迟最低的服务器,确认经过【重新载入】后,以后就可以从国内下载软件包了。
命令行换源(可选)
使用sudo gedit /etc/apt/sources.list
,使用编辑器进行换源,具体内容可参考:ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror,纯命令行模式可使用vim
或nano
进行命令行编辑,此情况仅用于服务器的情况下,个人使用可使用可视化的编辑器编辑文件 或 使用可视化的软件更新器,使用UI来选择源。
更新系统
换源后,使用软件更新器,或者使用命令sudo apt dist-upgrade
可用于更新系统软件
管理员密码
使用Ctrl+Alt+T
打开终端,可以先使用sudo passwd root
,给root账户设置一个权限密码。
管理语言
如果安装系统时没有自动配置中文,可使用【设置】-【区域与语言】-【管理已安装的语言】,将汉语作为系统语言应用。
VMware Tools
使用下面的命令安装VMware Tools工具,支持主机之间复制粘贴,以及小文件拖拽。
1 | sudo apt-get autoremove open-vm-tools |
克隆子节点
将主节点虚拟机关闭。
主节点右键,选择【管理】-【克隆】。
使用【创建完美克隆】的方式,再创建2个子节点。
Hostname
hostname是主机名,用于在系统中标识一台机器。
在网络通信中,可以用来识别某个设备。可以通过hostname
命令来查看或设置Linux系统的hostname,也可以通过:~$
前的字符查看hostname。
因为我们是克隆出来的2个子节点,并不是手动创建的,3个节点的主机名都一致,我们需要手动修改。
使用以下命令更新子节点1的主机名:
1 | sudo gedit /etc/hostname |
然后Ctrl+S
保存退出,使用reboot
命令重启虚拟机。
即可看到主机名修改成功,子节点2通过同样的方式修改为slave2
。
Hosts
Hosts 是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的 IP 地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从 Hosts 文件中寻找对应的 IP 地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交 DNS 域名解析服务器进行 IP 地址的解析。
为了机器能够快速识别自己以及其他机器,我们可以做一下域名和 IP 的 hosts 映射,这样在之后的操作中,我们就可以直接用域名来代替 IP 地址。
通过【设置】-【网路】-【详情】的方式查看每一台机器为:
主机名 | IP地址 |
---|---|
master | 192.168.20.101 |
slave1 | 192.168.20.102 |
slave2 | 192.168.20.103 |
或者使用命令ifconfig
查看每一台机器的 IP,并依次记录下来。
使用命令sudo gedit /etc/hosts
,将以下信息编辑进去,方便互相通信
1 | 192.168.20.101 master |
为了防止之后重启,超过DHCP网络租用时间,导致IP变动,可将当前IP设置为手动,可让虚拟机一直使用对应的IP。
然后再每一个节点上都进行以上的操作。
SSH
简介
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
安装SSH
本次安装虚拟机是最小安装Ubuntu,没有安装SSH。
可使用下面的命令安装SSH的客户端和服务器端,当出现如图所示的情况,则表示安装成功。
1 | sudo apt install openssh-client openssh-server |
安装异常
如果ssh已安装,但无法正常使用,可使用以下的命令,卸载ssh及配置文件,并重新进行安装
1 | sudo apt purge openssh-client openssh-server |
生成密钥对
使用下面的命令,生成密钥对,一直回车,当出现如图,表示生成成功。
1 | ssh-keygen -t rsa |
该命令将在/home/hadoop/.ssh 目录下面产生一个密钥 id_rsa 和一个公钥 id_rsa.pub
将你的计算机(B)中的公钥传给别的计算机(A),A 计算机才能免密码登录计算机 B
免密登录本机
1 | cp /home/hadoop/.ssh/id_rsa.pub /home/hadoop/.ssh/authorized_keys |
使用以上命令将ssh生成的公钥复制为授权的密钥,即可完成自己免密登录本机。
检查SSH文件
1 | cd /home/hadoop/.ssh/ |
使用上面的命令,切换到用户的.ssh
查看ssh配置文件及权限
如上图所示的文件名和权限,则操作正确。
1 | ssh localhost |
然后使用上面的命令,免密连接本机,测试是否成功。
第一次登录需要进行一次验证,输入 yes 即可,当出现上图的提示,表示免登录成功。
然后可通过 exit,退出登录,退出ssh登录本机的状态。
修复权限
如果权限不正确,请使用下面的命令修改权限
1 | chmod 644 authorized_keys |
集群免密登录
接下来在每一台节点上,重复运行命令ssh-keygen -t rsa
,生成密钥对
使用命令cat /home/hadoop/.ssh/id_rsa.pub
,查看公钥
将内容复制到主机 master 节点上的/home/hadoop/.ssh/authorized_keys
文件中,复制成功后,可通过命令cat /home/hadoop/.ssh/authorized_keys
,查看所有节点的公钥,应如下图所示
然后使用下面的命令,将 authorized_keys 文件传给,其他节点的相同位置,这次传输,因为还没有免密成功,所以还是需要输入密码
1 | scp /home/hadoop/.ssh/authorized_keys slave1:/home/hadoop/.ssh/ |
这样子,我们就让每一台机器都持有了集群中所有节点的公钥,任意机器都可以通过 ssh 登录到任意节点
可以使用 ssh 尝试登录别的节点,正常情况下,不会出现提示,直接登录
JDK
https://cwiki.apache.org/confluence/display/HADOOP/Hadoop+Java+Versions
Apache Hadoop 3.3 and upper supports Java 8 and Java 11 (runtime only)
Please compile Hadoop with Java 8. Compiling Hadoop with Java 11 is not supported: HADOOP-16795 - Java 11 compile support OPEN
Apache Hadoop from 3.0 to 3.2 now supports only Java 8
Apache Hadoop from 2.7.x to 2.x support Java 7 and 8
所以我们选择 JDK 8
下载
首先打开 JDK 的下载页面:Latest Releases | Adoptium
选择 Linux 版本8版本的 JDK 下载即可
解压
将JDK的压缩包上传至用户主路径下(/home/haddop),使用系统自带的归档管理器,打开压缩包,将jdk文件夹提取出来。
解压路径和目录结构如图所示。
环境变量
为了方便使用JDK,需要配置环境变量,使用命令gedit /home/hadoop/.bashrc
编辑用户环境变量文件,将下面的文本添加进环境变量
1 | # JAVA |
运行命令source /home/hadoop/.bashrc
,更新用户变量。
然后运行命令java -version
,查看 JDK 是否安装成功。
同步到其他节点
使用以下命令同步到其他节点
1 | scp -r /home/hadoop/jdk8u362-b09 slave1:/home/hadoop/ |
使用命令source /home/hadoop/.bashrc
更新各个节点的环境变量,或者直接重启节点即可。
Hadoop
下载
首先点击这里,进入 Hadoop 官网下载页面。
选择 3.3.4(stable)稳定版本进行下载,然后点击 binary 地址进行下载
选中官方推荐的地址即可下载,其他地址也可用(建议采用迅雷等下载工具下载,速度比较会快很多,上传至 UBUNTU 系统)
解压
将Hadoop的压缩包上传至用户主路径下(/home/haddop),使用系统自带的归档管理器,打开压缩包,将hadoop-3.3.4文件夹提取出来。
解压路径和目录结构如图所示。
环境变量
使用命令gedit /home/hadoop/.bashrc
编辑用户环境变量文件,将下面的文本添加进环境变量
1 | # HADOOP |
运行命令source /home/hadoop/.bashrc
,更新用户变量。
配置
hadoop 的部署分为 3 种模式,分别为单机模式 伪分布模式(单节点) 全分布模式三种
无论部署哪种模式,我们都需要先配置环境变量,我们选择配置系统变量,无论是否是当前路径都可以使用
首先打开/home/hadoop/hadoop-3.3.4/etc/hadoop
这个目录,分别编辑下面几个文件,根据个人需求更改参数:
core-site.xml
1 | <configuration> |
master 在 hosts 文件中做了映射,可以替换成本机 IP
hdfs-site.xml
1 | <configuration> |
如果你只有 3 个 datanode,但是你却指定副本数为 4,是不会生效的,因为每个 datanode 上只能存放一个副本。
hadoop 有时候并不能自己创建 namenode 和 datanode 文件夹,可以运行下面的命令手动创建这 3 个文件夹
1 | mkdir -p /home/hadoop/hadoop-3.3.4/data/namenode |
yarn-site.xml
1 | <configuration> |
mapred-site.xml
1 | <configuration> |
hadoop-env.sh
在任意地方添加 JAVA_HOME
1 | export JAVA_HOME=/home/hadoop/jdk8u362-b09 |
workers
1 | master |
配置的是所有的从节点,用 IP 也可以,所有配置文件修改完毕后,进入 hadoop 初始化步骤
同步到其他节点
到此一个节点上的配置就已经全部配置完毕了
接下来,我们可以使用下面的命令,将 JDK 和 Hadoop 传输到其他节点
1 | scp -r /home/hadoop/hadoop-3.3.4 slave1:/home/hadoop/ |
Hadoop 初始化
HDFS 初始化
集群模式下,需要对每一台机器进行初始化
接下来到各个节点运行下面的命令
1 | hdfs namenode -format |
格式化完毕后,如图所示,则表示初始化成功
如果初始化失败,需要用下面的命令手动清空 namenode 和 datanode 文件夹,调整配置后,重新初始化
1 | rm -rf /home/hadoop/hadoop-3.3.4/data/namenode/* |
启动 Hadoop
Namenode
1 | hdfs --daemon start namenode |
Datanode
1 | hdfs --daemon start datanode |
你可以使用上面的命令挨个启动 namenode 和 datanode,如果已配置好 workers 和 ssh 免密登录,你可以使用下面的命令调用脚本直接启动所有 hdfs 进程
1 | start-dfs.sh |
ResourceManager
1 | yarn --daemon start resourcemanager |
NodeManager
1 | yarn --daemon start nodemanager |
你可以使用上面的命令挨个启动 resourcemanager 和 nodemanager,如果已配置好 workers 和 ssh 免密登录,你可以使用下面的命令调用脚本直接启动所有 yarn 进程
1 | start-yarn.sh |
启动成功
启动完毕后可以使用jps
命令查看启动的 hadoop 进程
master 节点
1 | 28656 NodeManager |
slave 节点
1 | 7666 DataNode |
可以访问 http://master:9870 ,查看 HDFS 运行情况
可以访问 http://master:8088 查看所有 Yarn 任务的运行情况
至此整个 hadoop 就搭建好了
案例测试
PI 值计算
我们可以使用一个简单的例子来测试一下 hadoop 是否能够正常运行
我们从 hadoop 安装文件夹,启动一个终端,使用下面的命令,计算 pi 值
1 | hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 10 10 |
如图所示,我们计算量比较少导致不够精确,但是已经可以成功运算出 pi 值了
词频统计
1 | hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount hdfs://master:9000/input hdfs://master:9000/output |
附件
相关链接