在此说明本次部署hadoop版本号为3.3.4版本,jdk为1.8。将部署三台虚拟机上,规划如下图
集群部署规划 node1node2node3HDFS NameNode
DataNode
DataNode SecindaryNameNode
DataNode
YARNNodeManager ResourceManager
NodeManager
NodeManager
且node1的IP设为192.168.53.101、node2的IP设为192.168.53.102、node3的IP设为192.168.53.103
1、虚拟机配置
1.1 检查是否通网
利用ping命令检查是否通网
ping www.baidu.com
ping通会出现
如果ping不通则需要修改配置文件ifcfg-ens33
- vi /etc/sysconfig/network-scripts/ifcfg-ens33
复制代码 将ONBOOT=no改为ONBOOT=yes
重启网络
- systemctl restart network
复制代码 大概重启虚拟机命令reboot
1.2 修改主机名
切换到root用户
查询主机名
[hadoop@localhost ~]$ hostname
localhost.localdomain
修改虚拟机名称为node1
[root@localhost hadoop]# hostnamectl set-hostname node1
再次查询虚拟机
[root@localhost hadoop]# hostname
node1
重新启动虚拟机reboot
1.3 设置静态IP
- 修改IP
- 先切换到root用户
- [hadoop@localhost ~]$ su root
- 修改ifcfg-ens33文件
- [hadoop@localhost ~]$ vi /etc/sysconfig/network-scripts/ifcfg-ens33
复制代码 配置文件中将BOOTPROTO="dhcp"修改成BOOTPROTO="static"
为了固定IP则需要添加
IPADDR=192.168.153.101
GATEWAY=192.168.153.2
DNS1=192.168.153.2
随后重新起动虚拟机
[hadoop@localhost ~]$ reboot
1.4 添加sudo执行权限
给普通用户添加sudo执行权限,且执行sudo不需要输入暗码
需要修改etc目次下的sudoers文件
先给予写权限
[root@node1 etc]# chmod -v u+w /etc/sudoers
mode of ‘/etc/sudoers’ changed from 0440 (r--r-----) to 0640 (rw-r-----)
修改sudoers文件
- [root@node1 etc]# sudo vi /etc/sudoers
复制代码 在## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL 之下
添加:
hadoop ALL=(ALL) NOPASSWD:ALL
打消写的权限
[root@node1 etc]# chmod -v u-w /etc/sudoers
mode of ‘/etc/sudoers’ changed from 0640 (rw-r-----) to 0440 (r--r-----)
如果sudo命令用不了说明最小化安装中没有sudo,则需要下载sudo命令
1.5 更换镜像源
由于centos停止维护则需要更换镜像源,不然无法利用yum命令进行安装
解决方法
进入/etc/yum.repos.d文件下
[hadoop@node1 ~]$ cd /etc/yum.repos.d
[hadoop@node1 yum.repos.d]$ ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo CentOS-x86_64-kernel.repo
编辑CentOS-Base.repo文件:
将文件中内容替换如下:
- [base]
- name=CentOS-$releasever - Base
- baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
- gpgcheck=1
- gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
- [updates]
- name=CentOS-$releasever - Updates
- baseurl=https://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
- gpgcheck=1
- gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
- [extras]
- name=CentOS-$releasever - Extras
- baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
- gpgcheck=1
- gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
- [centosplus]
- name=CentOS-$releasever - Plus
- baseurl=https://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
- gpgcheck=1
- enabled=0
- gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
复制代码 清理缓存
重新生成yum缓存
出现这个则说明更换成功
1.6 相关工具的安装
由于是最小化安装,所以有很多工具都没有,需要自行下载
利用下面命令安装sudo
安装vim
1.7 克隆虚拟机
关闭配置好的node1
克隆node1机器,点击 虚拟机-->管理-->克隆
选择下一步
选择虚拟机中的当前状态
选择创建完整的克隆
填写相应的虚拟机名称及存放路径
点击完成 ,成功克隆出node2虚拟机,用如上方法克隆出node3
克隆完成利用1.2中的方法进行主机名的修改分别修改成node2、node3
于此同时修改ifcfg-ens33文件中IP
node2修改为192.168.153.102
node2修改为192.168.153.103
修改完成后重启虚拟机,虚拟机准备工作完成
1.8 免密登录
在node1、node2和node3之间添加主机映射
相称于修改hosts文件
在文件中添加
192.168.153.101 node1
192.168.153.102 node2
192.168.153.103 node3
在node1机器上做免密登录
[root@node1 hadoop]# ssh-keygen -t rsa
点击三次回车
拷贝公钥
- ssh-copy-id node1
- ssh-copy-id node2
- ssh-copy-id node3
复制代码 执行ssh-copy-id命令后,根据提示输入yes,再输入机器登录暗码
在node2、node3上用同样的方法设置免密
利用ssh命令测试是否免密成功
从node1发起ssh毗连到node2,此过程不需要输入暗码则免密成功。利用exit退出
[hadoop@node1 ~]$ ssh node2
Last login: Tue Jul 23 21:47:28 2024 from 192.168.153.1
[hadoop@node2 ~]$ exit
logout
Connection to node2 closed.
1.9 安装rsync分发脚本
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
安装命令:
- sudo yum install rsync -y
复制代码 在主目次创建bin目次,用于存放各种脚本
[hadoop@node1 ~]$ mkdir bin
进入bin下编写xsync脚本
[hadoop@node1 bin]$ vim xsync
脚本代码如下:
- #!/bin/bash
- #1. 判断参数个数
- if [ $# -lt 1 ]
- then
- echo Not Enough Arguement!
- exit;
- fi
- #2. 遍历集群所有机器
- for host in node1 node2 node3
- 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
复制代码 给予执行权限
[hadoop@node1 bin]$ chmod +x ~/bin/xsync
分别在node2、node3机器安装xsync命令
从node1把xsync命令发送到node2、node3
[hadoop@node1 bin]$ xsync /home/hadoop/bin
将脚本复制到/bin目次,方便root用户调用(三台机器都执行)
在node1机器执行:
[hadoop@node1 ~]$ sudo cp ~/bin/xsync /bin/
在node2机器执行:
[hadoop@node2 ~]$ sudo cp ~/bin/xsync /bin/
在node3机器执行:
[hadoop@node3 soft]$ sudo cp ~/bin/xsync /bin/
2 安装JDK
2.1 安装
在home/hadoop目次下创建soft和installfiles目次,在此说明soft主要存放安装文件,installfiles主要存放安装包,相关命令如下
[hadoop@node1 ~]$ mkdir soft
[hadoop@node1 ~]$ mkdir installfiles
官方下载 JDK 以jdk-8u212-linux-x64.tar.gz为例
将从官网下的安装包上传到installfiles目次下
利用命令切换到 ~/installfiles目次下
[hadoop@node1 ~]$ cd ~/installfiles/
解压jdk-8u212-linux-x64.tar.gz到~/soft
[hadoop@node1 installfiles]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C ~/soft
添加环境变量
- sudo vim /etc/profile.d/my_env.sh
复制代码 在my_env.sh中添加
- #JAVA_HOME
- export JAVA_HOME=/home/hadoop/soft/jdk1.8.0_212
- export PATH=$PATH:$JAVA_HOME/bin
复制代码 让环境变量见效
验证是否安装成功
利用java --version命令,出现下面内容则说明安装成功
[hadoop@node1 installfiles]$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
用同样的方法在node2、node3中安装jdk
2.2 集群命令批量执行脚本
在/home/hadoop/bin目次下创建脚本xcall
[hadoop@node1 bin]$ cd /home/hadoop/bin
[hadoop@node1 bin]$ vim xcall
编写脚本如下
- #! /bin/bash
-
- for i in node1 node2 node3
- do
- echo --------- $i ----------
- ssh $i "$*"
- done
复制代码 添加权限
[hadoop@node1 bin]$ chmod 777 xcall
启动脚本
[hadoop@node1 bin]$ xcall jps
--------- node1 ----------
14138 Jps
--------- node2 ----------
13316 Jps
--------- node3 ----------
12754 Jps
3 安装Hadoop
在Hadoop官网下载本身所需的版本Apache Hadoop
以下安装是以Hadoop3.3.4为例
将下载好的安装包上传到~/installfiles中
解压Hadoop到~/soft当中去
[hadoop@node1 installfiles]$ tar -zxvf hadoop-3.3.4.tar.gz -C ~/soft
添加环境变量
- sudo vim /etc/profile.d/my_env.sh
复制代码 在my_env.sh文件中添加
- #HADOOP_HOME
- export HADOOP_HOME=/home/hadoop/soft/hadoop-3.3.4
- export PATH=$PATH:$HADOOP_HOME/bin
- export PATH=$PATH:$HADOOP_HOME/sbin
复制代码 分发环境变量文件
sudo /home/hadoop/bin/xsync /etc/profile.d/my_env.sh
并且在node1、node2和node3上让环境变量见效
验证
[hadoop@node1 soft]$ hadoop version
Hadoop 3.3.4
Source code repository https://github.com/apache/hadoop.git -r a585a73c3e02ac62350c136643a5e7f6095a3dbb
Compiled by stevel on 2022-07-29T12:32Z
Compiled with protoc 3.7.1
From source with checksum fb9dd8918a7b8a5b430d61af858f6ec
This command was run using /home/hadoop/soft/hadoop-3.3.4/share/hadoop/common/hadoop-common-3.3.4.jar
出现这些说明安装成功
3.1 配置Hadoop
进入Hadoop的配置文件中
[hadoop@node1 soft]$ cd $HADOOP_HOME/etc/hadoop
3.1.1 配置核心文件
配置core-site.xml文件
[hadoop@node1 hadoop]$ vim core-site.xml
在<configuration></configuration>之间添加内容如下
- <!-- 指定NameNode的地址 -->
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://node1:8020</value>
- </property>
- <!-- 指定hadoop数据的存储目录 -->
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/home/hadoop/soft/hadoop-3.3.4/data</value>
- </property>
- <!-- 配置HDFS网页登录使用的静态用户为hadoop -->
- <property>
- <name>hadoop.http.staticuser.user</name>
- <value>hadoop</value>
- </property>
- <!-- 配置该hadoop(superUser)允许通过代理访问的主机节点 -->
- <property>
- <name>hadoop.proxyuser.hadoop.hosts</name>
- <value>*</value>
- </property>
- <!-- 配置该hadoop(superUser)允许通过代理用户所属组 -->
- <property>
- <name>hadoop.proxyuser.hadoop.groups</name>
- <value>*</value>
- </property>
- <!-- 配置该hadoop(superUser)允许通过代理的用户-->
- <property>
- <name>hadoop.proxyuser.hadoop.users</name>
- <value>*</value>
- </property>
复制代码 利用wq保存退出
配置hdfs-site.xml
[hadoop@node1 hadoop]$ vim hdfs-site.xml
在<configuration></configuration>之间添加内容如下
- <!-- nn web端访问地址-->
- <property>
- <name>dfs.namenode.http-address</name>
- <value>node1:9870</value>
- </property>
-
- <!-- 2nn web端访问地址-->
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>node3:9868</value>
- </property>
-
- <!-- 测试环境指定HDFS副本的数量1 -->
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
复制代码 利用wq保存退出
配置yarn-site.xml
在<configuration></configuration>之间添加内容如下
- <!-- 指定MR走shuffle -->
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
-
- <!-- 指定ResourceManager的地址-->
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>node2</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>
-
- <!--yarn单个容器允许分配的最大最小内存 -->
- <property>
- <name>yarn.scheduler.minimum-allocation-mb</name>
- <value>512</value>
- </property>
- <property>
- <name>yarn.scheduler.maximum-allocation-mb</name>
- <value>4096</value>
- </property>
-
- <!-- yarn容器允许管理的物理内存大小 -->
- <property>
- <name>yarn.nodemanager.resource.memory-mb</name>
- <value>4096</value>
- </property>
-
- <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
- <property>
- <name>yarn.nodemanager.pmem-check-enabled</name>
- <value>true</value>
- </property>
- <property>
- <name>yarn.nodemanager.vmem-check-enabled</name>
- <value>false</value>
- </property>
复制代码 利用wq保存退出
配置mapred-site.xml
[hadoop@node1 hadoop]$ vim mapred-site.xml
在<configuration></configuration>之间添加内容如下
- <!-- 指定MapReduce程序运行在Yarn上 -->
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
复制代码 配置workers
[hadoop@node1 hadoop]$ vim workers
在文件中添加
node1
node2
node3
注意:该文件中添加的内容末了不允许有空格,文件中不允许有空行
3.1.2 配置汗青服务器
为了查看程序的汗青运行环境,需要配置一下汗青服务器。
配置mapred-site.xml
[hadoop@node1 hadoop]$ vim mapred-site.xml
添加内容如下:
- <!-- 历史服务器端地址 -->
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>node1:10020</value>
- </property>
- <!-- 历史服务器web端地址 -->
- <property>
- <name>mapreduce.jobhistory.webapp.address</name>
- <value>node1:19888</value>
- </property>
复制代码 3.1.3 配置日记的聚集
日记聚集概念:应用运行完成以后,将程序运行日记信息上传到HDFS体系上。
日记聚集功能利益:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日记聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
配置yarn-site.xml
[hadoop@node1 hadoop]$ vim yarn-site.xml
添加内容如下:
- <!-- 开启日志聚集功能 -->
- <property>
- <name>yarn.log-aggregation-enable</name>
- <value>true</value>
- </property>
- <!-- 设置日志聚集服务器地址 -->
- <property>
- <name>yarn.log.server.url</name>
- <value>http://node1:19888/jobhistory/logs</value>
- </property>
- <!-- 设置日志保留时间为7天 -->
- <property>
- <name>yarn.log-aggregation.retain-seconds</name>
- <value>604800</value>
- </property>
复制代码 3.1.4 分发Hadoop
xsync /home/hadoop/soft/hadoop-3.3.4
3.1.5 启动Hadoop
第一次启动Hadoop,需要在node1节点上格式化
[hadoop@node1 hadoop]$ cd $HADOOP_HOME/
[hadoop@node1 hadoop-3.3.4]$ bin/hdfs namenode -format
格式化成功会出现successfully formatted
在node1上启动HDFS
[hadoop@node1 hadoop-3.3.4]$ sbin/start-dfs.sh
在配置了ResourceManager的节点(node2)启动YARN
[hadoop@node2 hadoop-3.3.4]$ sbin/start-yarn.sh
3.1.6 web端查看HDFS
在Windows下有IP映射则可以利用http://node1:9870/,无映射则利用IP地址
如果打不打web页面则有大概防火墙没有关闭
关防火墙的命令如下
systemctl stop firewalld
web页面如下
3.1.7 Hadoop群起脚本
在~/bin目次下添加脚本
[hadoop@node1 hadoop-3.3.4]$ cd ~/bin/
[hadoop@node1 bin]$ vim hdp.sh
写入以下内容
- #!/bin/bash
- if [ $# -lt 1 ]
- then
- echo "No Args Input..."
- exit ;
- fi
- case $1 in
- "start")
- echo " =================== 启动 hadoop集群 ==================="
- echo " --------------- 启动 hdfs ---------------"
- ssh node1 "/home/hadoop/soft/hadoop-3.3.4/sbin/start-dfs.sh"
- echo " --------------- 启动 yarn ---------------"
- ssh node2 "/home/hadoop/soft/hadoop-3.3.4/sbin/start-yarn.sh"
- echo " --------------- 启动 historyserver ---------------"
- ssh node1 "/home/hadoop/soft/hadoop-3.3.4/bin/mapred --daemon start historyserver"
- ;;
- "stop")
- echo " =================== 关闭 hadoop集群 ==================="
- echo " --------------- 关闭 historyserver ---------------"
- ssh node1 "/home/hadoop/soft/hadoop-3.3.4/bin/mapred --daemon stop historyserver"
- echo " --------------- 关闭 yarn ---------------"
- ssh node2 "/home/hadoop/soft/hadoop-3.3.4/sbin/stop-yarn.sh"
- echo " --------------- 关闭 hdfs ---------------"
- ssh node1 "/home/hadoop/soft/hadoop-3.3.4/sbin/stop-dfs.sh"
- ;;
- *)
- echo "Input Args Error..."
- ;;
- esac
复制代码 添加权限
[hadoop@node1 bin]$ chmod 777 hdp.sh
启动集群
[hadoop@node1 bin]$ hdp.sh start
出现以下历程则说明安装成功
利用xcall查看所有节点上的历程
[hadoop@node1 bin]$ xcall jps
--------- node1 ----------
14449 DataNode
14770 NodeManager
14327 NameNode
14986 Jps
14956 JobHistoryServer
--------- node2 ----------
13573 ResourceManager
13687 NodeManager
13879 Jps
13388 DataNode
--------- node3 ----------
12928 SecondaryNameNode
13026 NodeManager
13174 Jps
12826 DataNode
出现以上历程说明部署成功
利用脚本停止集群
[hadoop@node1 bin]$ hdp.sh stop
Hadoop安装完成
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |