1. 前期准备
1.1 安装Ubuntu
在VM导入Ubuntu的镜像源
1.2 导入必要的包
因为新安装的Ubuntu缺少很多组件,在这里先安装必要的包
1、更新软件源
2、安装Vim
1 sudo apt-get install vim
3、安装ssh
1 2 3 sudo apt-get install openssh-clientsudo apt-get install openssh-serversudo /etc/init.d/ssh restart
4、安装git
1 sudo apt-get install git
5、安装zlib
1 2 3 sudo apt-get install zlib1g-devsudo apt-get install libx32z1-devsudo apt-get install lib32z1
6、安装网络工具
1 sudo apt install net-tools
1.3 配置网络
首先输入,查看目前的Gateway
输入(Ubuntu22版本)
1 sudo vim /etc/netplan/01-network-manager-all.yaml
修改内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 network: version: 2 renderer: NetworkManager ethernets: ens33: addresses: [192.168 .10 .101 /24 ] dhcp4: false dhcp6: false routes: - to: default via: 192.168 .10 .2 nameservers: addresses: [8.8 .8 .8 , 114.114 .114 .114 ]
保存后,输入指令,修改执行权限
1 sudo chmod 0600 /etc/netplan/01-network-manager-all.yaml
然后输入指令,应用配置
最后输入指令,查看是否生效
并ping ip,查看是否联网
1.4 修改节点名称
打开主机名字文件,修改本台主机的主机名称
1.5 JDK的安装
输入指令查看是否存在jdk,如果存在,则卸载(高于1.8版本的java不适配NameNode)
然后输入
1 sudo apt install openjdk-8-jdk-headless
等待安装完成后,输入指令查看java地址
1 update-alternatives --config java
输入以下指令,打开文件
根据显示的java地址,在文件末尾加上
1 2 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export PATH=$JAVA_HOME /bin:$PATH
保存配置文件后,需要重新加载配置文件以使更改生效。
然后输入指令,查看环境变量是否生效.
2. Hadoop的安装
2.1 创建地址目录
输入指令,创建存放Hadoop的文件
然后进入该目录
2.2 下载Hadoop
输入指令,从镜像源那边下载Hadoop,这里从清华镜像源下载(注意文件有将近1个G,流量党谨慎),原地址为清华镜像源
1 wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.4.0/hadoop-3.4.0.tar.gz
输入指令,解压Hadoop文件
1 tar -zxvf hadoop-3.4.0.tar.gz
2.3 配置Hadoop环境变量
输入以下指令,打开文件
在文件末尾加上
1 2 export HADOOP_HOME=~/software/hadoop-3.4.0export PATH=$PATH :$HADOOP_HOME /bin:$HADOOP_HOME /sbin
重新加载配置文件以使更改生效
然后查看是否配置生效
查看Hadoop版本是否一致
3. 三台主机的配置
3.1 hosts文件配置
在Node1主机中输入
然后在文件中加入3台主机的IP和主机名称
1 2 3 192.168.10.101 Node01 192.168.10.102 Node02 192.168.10.103 Node03
3.2 其余两台虚拟机克隆
关闭Node01主机,然后进行克隆,分别在Node01的基础上,创建Node02和Node03,然后分别更改各自主机名称以及IP地址,更改完成后,3台主机之间互ping,看看是否能连通
1 2 3 ping Node01 ping Node02 ping Node03
3.3 SSH免密登录
在3台主机之间相互ssh(每台主机之间都要互相ssh)
1 2 3 ssh Node01 ssh Node02 ssh Node03
这时候就会发现,在该主机用户的目录下,生成了’.ssh’文件,然后一次在每台主机输入指令
并且一直回车键,直到完成后,输入以下指令
1 2 3 ssh-copy-id Node01 ssh-copy-id Node02 ssh-copy-id Node03
每台主机都要执行上述指令,直至可以相互免密ssh访问为止
3.4 文件分发脚本编写
创建bin文件夹下的xsync脚本
在脚本中输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #!/bin/bash #1. 判断参数个数 ## 判断参数是否小于1 if [ $## -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 ## 对Node01,Node02,Node03都进行分发 for host in Node01 Node02 Node03 do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ do #4. 判断文件是否存在 if [ -e $file ] then #5. 获取父目录 pdir=$(cd -P $(dirname $file); pwd) #6. 获取当前文件的名称 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir ## 如果不存在 else echo $file does not exists! fi done done
4. 集群配置
4.1 NameNode配置
在HOME_HADOOP/etc/hadoop/core-site.xml中,指定Node01为NameNode节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <configuration > <property > <name > fs.defaultFS</name > <value > hdfs://Node01:8020</value > </property > <property > <name > hadoop.tmp.dir</name > <value > /home/ldy/software/hadoop-3.4.0/data</value > </property > <property > <name > hadoop.http.staticuser.user</name > <value > ldy</value > </property > <property > <name > hadoop.proxyuser.ldy.hosts</name > <value > *</value > </property > <property > <name > hadoop.proxyuser.ldy.groups</name > <value > *</value > </property > <property > <name > hadoop.proxyuser.ldy.users</name > <value > *</value > </property > </configuration >
4.2 HDFS配置
在HADOOP_HOME/etc/hadoop/hdfs-site.xml中配置
1 2 3 4 5 6 7 8 9 10 11 12 13 <configuration > <property > <name > dfs.namenode.http-address</name > <value > Node01:9870</value > </property > <property > <name > dfs.namenode.secondary.http-address</name > <value > Node03:9868</value > </property > </configuration >
4.3 Yarn配置
在yarn-site.xml中配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 <configuration > <property > <name > yarn.nodemanager.aux-services</name > <value > mapreduce_shuffle</value > </property > <property > <name > yarn.resourcemanager.hostname</name > <value > Node02</value > </property > <property > <name > yarn.nodemanager.env-whitelist</name > <value > JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value > </property > <property > <name > yarn.scheduler.minimum-allocation-mb</name > <value > 512</value > </property > <property > <name > yarn.scheduler.maximum-allocation-mb</name > <value > 4096</value > </property > <property > <name > yarn.nodemanager.resource.memory-mb</name > <value > 4096</value > </property > <property > <name > yarn.nodemanager.pmem-check-enabled</name > <value > true</value > </property > <property > <name > yarn.nodemanager.vmem-check-enabled</name > <value > false</value > </property > </configuration >
4.4 环境变量配置
输入指令
1 vim etc/hadoop/hadoop-env.sh
在开头加入
1 2 3 4 5 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH export HADOOP_HOME=~/software/hadoop-3.4.0 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
4.5 MapReduce配置
在mapred-site.xml中配置
1 2 3 4 5 6 7 <configuration > <property > <name > mapreduce.framework.name</name > <value > yarn</value > </property > </configuration >
4.6 workers配置
打开workers文件,输入以下内容
4.7 历史服务器配置
在mapred-site.xml中配置以下内容
1 2 3 4 5 6 7 8 9 10 11 <property > <name > mapreduce.jobhistory.address</name > <value > Node01:10020</value > </property > <property > <name > mapreduce.jobhistory.webapp.address</name > <value > Node01:19888</value > </property >
4.8 日志聚集的配置
在yarn-site.xml中配置以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <property > <name > yarn.log-aggregation-enable</name > <value > true</value > </property > <property > <name > yarn.log.server.url</name > <value > http://Node01:19888/jobhistory/logs</value > </property > <property > <name > yarn.log-aggregation.retain-seconds</name > <value > 604800</value > </property >
4.9 分发更改内容
1 xsync /home/ldy/software/hadoop-3.4.0/etc/hadoop/
5. 群起集群
5.1 格式化节点
如果是第一次启动集群,要在Node01格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
1 bin/hdfs namenode -format
5.2 启动HDFS
输入指令
然后在Node02输入
到网页上进入网址http://Node01:9870/
如果页面正常显示,则说明启动成功
5.3 启动Yarn
输入
进入Web端http://Node03:9868/status.html
如果页面正常显示,则说明启动成功
5.4 集群启动脚本
进入home下的bin目录
输入指令,创建脚本
输入以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #!/bin/bash if [ $## -lt 1 ] then echo "No Args Input..." exit ; fi case $1 in "start") echo " =================== 启动 hadoop集群 ===================" echo " --------------- 启动 hdfs ---------------" ssh Node01 "$HADOOP_HOME/sbin/start-dfs.sh" echo " --------------- 启动 yarn ---------------" ssh Node02 "$HADOOP_HOME/sbin/start-yarn.sh" echo " --------------- 启动 historyserver ---------------" ssh Node01 "$HADOOP_HOME/bin/mapred --daemon start historyserver" ;; "stop") echo " =================== 关闭 hadoop集群 ===================" echo " --------------- 关闭 historyserver ---------------" ssh Node01 "$HADOOP_HOME/bin/mapred --daemon stop historyserver" echo " --------------- 关闭 yarn ---------------" ssh Node02 "$HADOOP_HOME/sbin/stop-yarn.sh" echo " --------------- 关闭 hdfs ---------------" ssh Node01 "$HADOOP_HOME/sbin/stop-dfs.sh" ;; *) echo "Input Args Error..." ;; esac
保存退出后设置权限
然后启动集群
输入jps
观察到
2468 JobHistoryServer
2294 NodeManager
1879 NameNode
2535 Jps
2014 DataNode
说明集群启动成功
5.5 进程查看脚本
同理,在home/bin目录下创建指令文件
在文件中输入代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/bin/bash ## 定义节点列表 nodes=("Node01" "Node02" "Node03") ## 遍历每个节点,执行 jps 命令 for node in "${nodes[@]}"; do echo "---- jps on $node ----" ## 使用 SSH 执行 jps 命令并获取结果 ssh "$node" "jps" echo "" done
保存后更改权限
然后执行该指令
如果显示以下内容,则说明集群和脚本都成功执行
---- jps on Node01 ----
2468 JobHistoryServer
2294 NodeManager
1879 NameNode
2668 Jps
2014 DataNode
---- jps on Node02 ----
9266 Jps
8660 ResourceManager
8488 DataNode
8794 NodeManager
---- jps on Node03 ----
87143 Jps
86648 DataNode
86874 NodeManager
86765 SecondaryNameNode