一、Hadoop简介
1、Hadoop项目基础结构
注:本篇文章主要涉及到:HDFS(分布式文件系统)、YARN(资源管理和调度框架)、以及MapReduce(离线计算)。以下就是本篇文章所采用的的架构。
2、Hadoop组成架构
(1)HDFS架构简述
注:上述的master、slave1、slave2均是主机名(结点名),可以和本篇文章不一致,但下面所有涉及到的地方均需和你这里的主机名一致,如何修改文章后面部分会进行介绍。
① NameNode :NameNode是HDFS部分的核心;NameNode又称为Master,储存着HDFS的元数据(即分布式文件系统中所有文件的目录树,并且跟踪追查整个Hadoop集群中的文件);NameNode本身不储存实际的数据或者是数据集,数据本身是储存在DataNode中;注意当NameNode这个节点关闭之后整个Hadoop集群将无法访问。
② DataNode:DataNode负责将实际的数据储存在HDFS中,DataNode也称作Slave,并且NameNode和DataNode会保持通信不断;如果某个DataNode关闭了之后并不会影响数据和整个集群的可用性,NameNode会将后续的任务交给其他启动着的DataNode;DataNode 会定期(dfs.heartbeat.interval 配置项配置,默认是 3 秒)向 NameNode 发送心跳,如果 NameNode 长时间没有接受到 DataNode 发送的心跳, NameNode 就会认为该 DataNode 失效;block 汇报时间间隔取参数 dfs.blockreport.intervalMsec,参数未配置的话默认为 6 小时。
③ Secondary NameNode:Secondary NameNode主要是用于定期合并并且命名空间镜像的编辑日志;Secondary NameNode中保存了一份和NameNode一致的镜像文件(fsimage)和编辑日志(edits);如果NameNode发生故障是则可以从Secondary NameNode恢复数据。
(2)YARN架构简述
① ResourceManager:ResourceManager主要是负责与客户端交互,处理来自客户端的请求;启动和管理ApplicationMaster,并且在其运行失败的时候再重新启动它;管理NodeManager,接收来自NodeManager的资源汇报信息,并向NodeManager下达管理指令;资源管理与调度,接收来自ApplicationMaster的资源申请请求,并为之分配资源。
② NodeManager:NodeManager主要负责启动后向ResourceManager注册,然后与之保持通信,通过心跳汇报自己的状态以及接受来自RM的指令;监控节点的健康状态,并与ResourceManager同步;管理节点上所有的Container的生命周期,监控Container的资源使用情况,以及Container运行产生的日志,NodeManager会向ResourceManager汇报Container的状态信息;管理分布式缓存,以及不同应用程序的其他附属要求。
(3)MapReduce架构简述
① Client客户端:用户可以通过Client客户端将自己编写的一些MapReduce程序给提交到JobTracker;也可以通过其提供的一些API查看一些作业的运行状态。
② JobTracker:JobTracker主要是负责作业调度和资源的监控;JobTracker如果发现有一些作业失败的情况,就会将对应任务给转移到其他的结点;JobTracker同时也会追踪任务的执行进度和资源的使用情况,并将这些情况转发给Task Scheduler(任务调度器),Task Scheduler调度器在资源出现空闲的时候会将这些资源分配给合适的作业。
③ TaskTracker:TaskTracker会周期性的通过心跳(Heartbeat)将自己结点的资源使用情况以及作业的运行进度发送给JobTracker,同时也会接收JobTracker发送回来的指令并执行;TaskTracker使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(CPU、内存等),一个Task获取到一个slot后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用;slot分为Map slot和Reduce slot两种,分别供Map Task和Reduce Task使用。TaskTracker通过slot数目(可配置参数)限定Task的并发度。
④ Map Task:Map Task会将对应的数据解析成一个键值对(key/value),最后调用用户的map()函数处理,将临时的结果储存在本地的磁盘上,其中一个临时的结果会被划分成若干块,每一块会被一个Reduce Task处理。
⑤ Reduce Task:将排序好了的键值对一次读取,再调用用户的reduce()函数进行处理,最后将处理结果储存在HDFS上面。
二、VMware下载安装及Linux虚拟机配置(Ubuntu22.04.1)
1、VMware_16.2.4下载安装
VMware_16.2.4下载(官网):https://www.vmware.com/cn/products.html
点击下载试用版,后面会给出许可证密钥。
这里许可证的密钥可以去网上找一个填起,网上很多这种一搜就出来了。
2、在VMware_16.2.4上安装Linux虚拟机(Ubuntu22.04.1)
(1)下载Ubuntu22.04.1
Ubuntu22.04.1官网下载地址:https://ubuntu.com/download/desktop
① 点击Download下载最新的Ubuntu版本。
如果想下载过去的其他版本,就点击“see our alternative downloads”,然后进入新页面,向下滑动,找到如下区域,然后点击Past relases。
点击Past releases后进入新的页面后下滑,就可以看到如下列表,然后根据个人需要选择下载。
(2)创建并配置Linux虚拟机
① 打开VMware_16.2.4,点击创建新的虚拟机。
② 先选择自定义,然后点击下一步。
③ 默认选择,直接点击下一步。
④ 在这里我们先选择稍后安装操作系统(后面会直接指定上面下载好了的Ubuntu22.04.1源文件),然后选择下一步。
⑤ 选择Linux系统,然后再根据自己电脑实际配置选择Ubuntu操作系统版本,最后点击下一步。
⑥ 选择虚拟机的名字(和主机名不一样,可以自由选择),这里我们取名为Hadoop_m,选择安装目录(自由选择),最后点击下一步。
⑦ 选择处理器数量和内核数,我的电脑是8核16线程的,所以我选个2、4,如果你的电脑的配置更高一些可以考虑酌情增加一些。
⑧ 选择虚拟机的内存,根据自己需要选择不得低于最低推荐内存,建议直接按照它的推荐内存设置就好,然后点击下一步。
⑨ 选择使用网络地址转换(NAT),然后点击下一步。
⑩ 选择LSI Logic的I/O控制器类型。
⑪ 选择SCSI的磁盘类型,然后点击下一步。
⑫ 选择创建虚拟磁盘,然后点击下一步。
⑬ 选择磁盘的大小,根据自己的电脑实际配置来选择,最好不要低于它的推荐大小,然后选择将虚拟磁盘拆分为多个文件,最后点击下一步。
⑭ 选择磁盘的存放位置,然后点击下一步。
⑮ 点击自定义硬件,配置映像文件的位置。
⑯ 点击完成,即完成了一个Linux虚拟机的新建。
(3)安装配置Ubuntu22.04.1
① 打开刚新建好的Linux虚拟机。
② 直接回车。
③ 选择语言,然后点击安装Ubuntu。
④ 选择中文键盘布局,然后点击继续。
⑤ 点击选择正常安装,然后尽量勾选上安装时下载更新,最后点击继续。
⑥ 先选中清除整个磁盘并安装Ubuntu,然后点击现在安装。
⑦ 点击继续。
⑧ 选择自己所在的地区,然后点击继续。
⑨ 这里需要注意一下主机名的设置,主机名可以和我的不一样但是后面一定要和你自己的主机名统一,其他的选项自己随便填就好。
⑩ 安装完成后,点击现在重启。
最后启动成功输入密码进入下面的桌面
(4)网络配置 (IP设置)
netplan中网络配置文件修改,打开Linux虚拟机Hadoop_m(master),Ctrl+Alt+t打开命令行输入如下命令。
cd /etc/netplan #转移目录到netplan文件夹中
ls #ls是查看当前目录下的文件的命令
sudo chmod 777 01-network-manager-all.yaml #给文件添加可读、写、运行的权限
vi 01-network-manager-all.yaml #vi是查看(修改)文件内容的命令
注:虚拟机的IP地址前三位必须得和前面配置VMnet8里的网关IP的前三位一样,最后一位自己自由选择但是不能和前面VMnet8里的IP或者自己电脑本机的IP一样,而且也不能和后面其他两个slave结点的主机IP一样;例:前面的网关IP是:192.168.234.2,那么本结点的主机IP就可设置为:192.168.234.130。
network:
version: 2
renderer: networkd
ethernets:
ens33: # ← 这里是网卡名,根据你系统修改
dhcp4: no # ← 禁用 DHCP
addresses:
- 192.168.254.100/24 # ← 静态 IP
gateway4: 192.168.254.2 # ← 默认网关(比如你宿主机桥接或NAT的地址)
nameservers:
addresses:
- 114.114.114.114
- 8.8.8.8
routes:
- to: 0.0.0.0/0
via: 192.168.254.2
配置完netplan文件夹中的网络配置文件后,保存退出文本编辑,退出命令行编辑文本退出方式就按本文章上面提到的来就好;退出文本编辑回到命令行后再输出如下命令,将刚才修改的网络配置文件进行应用。
sudo netplan apply #应用刚修改的网络配置文件
应用完后输入以下命令查看是否配置成功。
ip a #查看本机的ip地址可以用这段命令
安装open-vm-tools
连上网后,我们先换一下软件安装更新的源
然后,我们打开命令行,输入下面的命令:
sudo apt-get update #更新一下系统源
#输入了上面的代码可能会弹出一个让你更新的窗口,如果有就直接点击现在安装就可以了
sudo apt-get upgrade
等待安装更新完后再输入下面的命令:
sudo apt-get install open-vm-tools
#安装open-vm-tools,中间遇到的停顿除了空间请求需要yes一下其他的都直接默认回车
sudo apt-get install open-vm-tools-desktop
#安装open-vm-tools-desktop,用于支持文件双向拖放
安装完成后重启虚拟机,然后虚拟机界面就可以自适应了,在自己电脑下复制的东西,也可以直接粘贴到Linux虚拟机上了,也可以直接双向拖拽文件了,十分方便。
最后在安装一个Vim编辑器,感觉比较方便:
sudo apt-get install vim #安装时如果需要确认直接输入Y就好
伪分布式安装(单机版)
一、安装须知
本次安装的Hadoop版本为hadoop3.3.5。
在这之前完成了VMware虚拟软件的安装,并安装了Ubuntu22.04,在这基础上进行相关配置。
二、安装jdk
在Ubuntu中使用命令安装jdk,执行“sudo apt-get install openjdk-8-jdk”命令。
sudo apt-get install openjdk-8-jdk
等待安装完成后,使用‘java -version’检验是否安装成功。
因为是使用sudo命令安装的jdk,所以安装的jdk路径默认为“/lib/jvm/java-8-openjdk-amd64”,检查安装路径以及文件名称。
使用‘sudo getdit ~/.bashrc’命令打开环境文件,在文件顶部加入语句,使环境生效。
sudo getdit ~/.bashrc
# 配置内容
export JAVA_HOME=/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使用‘source /.bashrc’使环境生效,用‘echo $JAVA_HOME’检验环境是否配置成功。
source ~/.bashrc
echo $JAVA_HOME
三、安装shh
安装shh免密码登录,在终端输入‘sudo apt-get install ssh openssh-server’。
sudo apt-get install ssh openssh-server
安装完毕之后,在终端切换位置到ssh文件下,使用‘ssh-keygen -t rsa’命令生成SSH密钥对,用于进行身份验证。按照提示输入保存密钥的位置和文件名。生成密钥对后,将在当前目录下生成两个文件:私钥(id_rsa)和公钥(id_rsa.pub)。
ssh-keygen -t rsa
将本地计算机上的公钥复制到服务器上,检验是否配置成功。
cat id_rsa.pub>>authorized_keys
ssh localhost
四、安装配置hadoop
从清华镜像上下载haddop3.3.5的压缩包‘hadoop-3.3.5.tar.gz’,对文件夹进行解压缩。
清华镜像:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/core/hadoop-3.3.5/
配置相关文件,打开etc文件夹下的core-site.xml、hdfs-site.xml、hadoop-env.sh文件,加入语句后保存。
请注意,etc文件下还有一个hadoop,点进去之后如下图所示,后续配置添加的语句value当中要写hadoop的安装地址,建议在下图的文件目录下输入指令‘pwd’获取绝对路径,根据具体文件位置修改后续的配置语句。
配置core-site.xml文件,添加如下内容,注意value当中的tmp地址要与本机安装的hadoop地址一致。‘hdfs://localhost:9000’这一行当中的localhost默认指向本机地址,也可以在终端输入‘hostname’获取本机的名称,将这一行的‘localhost’换成本机名称,例如我的本机名称为‘lumos-virtual-machine’。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/lumos/local/hadoop-3.3.5/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
配置hdfs-site.xml文件,其内容如下,注意value当中的文件地址是否正确。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/lumos/local/hadoop-3.3.5/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/lumos/local/hadoop-3.3.5/tmp/dfs/data</value>
</property>
</configuration>
配置hadoop-env.sh文件,在终端相关位置输入“echo $JAVA_HOME/lib/jvm/java-8-openjdk-amd64”,配置后该文件
echo $JAVA_HOME/lib/jvm/java-8-openjdk-amd64
五、运行hadoop
开始运行hadoop,首先初始化hdfs系统,在之前解压后的hadoop3.3.5目录下使用‘bin/hdfd namenode -format’命令进行初始化。
bin/hdfd namenode -format
使用‘sbin/start-dfs.sh’指令开启NameNode和DataNode守护进程。如果此处报错,请检查之前配置的三个文件。
sbin/start-dfs.sh
开启成功的jps:
关闭hadoop使用命令‘sbin/stop-dfs.sh’。
在浏览器输入‘http://localhost:9870’,成功打开网页如下图,可以查看NameNode和Datanode信息,还可以在线查看HDFS中的文件。
创建hadoop用户组,使用‘sudo useradd -m hadoop -s /bin/bash’命令以/bin/bash作为shell,使用‘sudo passwd hadoop’指令设置密码,使用‘sudo adduser hadoop sudo’添加hadoop至管理员权限。
sudo useradd -m hadoop -s /bin/bash
配置yarn,修改/etc下yarn-site.xml、mapred-site.xml文件。
首先修改yarn-site.xml文件,其中value的‘lumos-virtual-machine’是我虚拟机的本机名称,请根据自己的本机名称进行修改。
使用‘hostname’指令可以查看本机名称。
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>lumos-virtual-machine</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
修改mapred-site.xml文件,其中value的‘lumos-virtual-machine’是我虚拟机的本机名称,请根据自己的本机名称进行修改。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>lumos-virtual-machine:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>lumos-virtual-machine:19888</value>
</property>
</configuration>
输入命令‘sbin/start-yarn.sh’启动yarn,查看jps,可以看到多了NodeManager 和 ResourceManager两个后台进程。
sbin/start-yarn.sh
在浏览器中输入“主机名称:8088”,打开成功
启动YARN后可以通过网页查看任务的运行情况,至此hadoop的单机运行已经完成。
📮评论