在CentOS7部署Hadoop

打印 上一主题 下一主题

主题 873|帖子 873|积分 2619

 在此说明本次部署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
  1. vi /etc/sysconfig/network-scripts/ifcfg-ens33
复制代码
将ONBOOT=no改为ONBOOT=yes
重启网络
  1. 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

  1. 修改IP
  2. 先切换到root用户
  3. [hadoop@localhost ~]$ su root
  4. 修改ifcfg-ens33文件
  5. [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文件
  1. [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文件:
将文件中内容替换如下:
  1. [base]
  2. name=CentOS-$releasever - Base
  3. baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
  4. gpgcheck=1
  5. gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
  6. [updates]
  7. name=CentOS-$releasever - Updates
  8. baseurl=https://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
  9. gpgcheck=1
  10. gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
  11. [extras]
  12. name=CentOS-$releasever - Extras
  13. baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
  14. gpgcheck=1
  15. gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
  16. [centosplus]
  17. name=CentOS-$releasever - Plus
  18. baseurl=https://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
  19. gpgcheck=1
  20. enabled=0
  21. gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
复制代码
清理缓存
  1. yum makecache
复制代码
重新生成yum缓存
  1. yum makecache
复制代码

出现这个则说明更换成功

1.6 相关工具的安装

由于是最小化安装,所以有很多工具都没有,需要自行下载
利用下面命令安装sudo
  1. yum install sudo
复制代码
安装vim
  1. yum install 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文件
  1. sudo vi /etc/hosts
复制代码
在文件中添加
192.168.153.101 node1
192.168.153.102 node2
192.168.153.103 node3

在node1机器上做免密登录
[root@node1 hadoop]# ssh-keygen -t rsa
点击三次回车
拷贝公钥
  1. ssh-copy-id node1
  2. ssh-copy-id node2
  3. 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是把所有文件都复制过去。
安装命令:
  1. sudo yum install rsync -y
复制代码
在主目次创建bin目次,用于存放各种脚本
[hadoop@node1 ~]$ mkdir bin
进入bin下编写xsync脚本
[hadoop@node1 bin]$ vim xsync
脚本代码如下:
  1. #!/bin/bash
  2. #1. 判断参数个数
  3. if [ $# -lt 1 ]
  4. then
  5.     echo Not Enough Arguement!
  6.     exit;
  7. fi
  8. #2. 遍历集群所有机器
  9. for host in node1 node2 node3
  10. do
  11.     echo ====================  $host  ====================   
  12.     #3. 遍历所有目录,挨个发送
  13.     for file in $@
  14.     do
  15.         #4. 判断文件是否存在
  16.         if [ -e $file ]
  17.             then
  18.                 #5. 获取父目录
  19.                 pdir=$(cd -P $(dirname $file); pwd)
  20.                 #6. 获取当前文件的名称
  21.                 fname=$(basename $file)
  22.                 ssh $host "mkdir -p $pdir"
  23.                 rsync -av $pdir/$fname $host:$pdir
  24.             else
  25.                 echo $file does not exists!
  26.         fi
  27.     done
  28. 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
添加环境变量
  1. sudo vim /etc/profile.d/my_env.sh
复制代码
在my_env.sh中添加
  1. #JAVA_HOME
  2. export JAVA_HOME=/home/hadoop/soft/jdk1.8.0_212
  3. export PATH=$PATH:$JAVA_HOME/bin
复制代码
让环境变量见效
  1. source /etc/profile
复制代码
验证是否安装成功
利用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
编写脚本如下
  1. #! /bin/bash
  2. for i in node1 node2 node3
  3. do
  4.     echo --------- $i ----------
  5.     ssh $i "$*"
  6. 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
添加环境变量
  1. sudo vim /etc/profile.d/my_env.sh
复制代码
在my_env.sh文件中添加
  1. #HADOOP_HOME
  2. export HADOOP_HOME=/home/hadoop/soft/hadoop-3.3.4
  3. export PATH=$PATH:$HADOOP_HOME/bin
  4. export PATH=$PATH:$HADOOP_HOME/sbin
复制代码
分发环境变量文件
sudo /home/hadoop/bin/xsync /etc/profile.d/my_env.sh
并且在node1、node2和node3上让环境变量见效
  1. source /etc/profile
复制代码
验证
[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>之间添加内容如下
  1. <!-- 指定NameNode的地址 -->
  2.     <property>
  3.         <name>fs.defaultFS</name>
  4.         <value>hdfs://node1:8020</value>
  5. </property>
  6. <!-- 指定hadoop数据的存储目录 -->
  7.     <property>
  8.         <name>hadoop.tmp.dir</name>
  9.         <value>/home/hadoop/soft/hadoop-3.3.4/data</value>
  10. </property>
  11. <!-- 配置HDFS网页登录使用的静态用户为hadoop -->
  12.     <property>
  13.         <name>hadoop.http.staticuser.user</name>
  14.         <value>hadoop</value>
  15. </property>
  16. <!-- 配置该hadoop(superUser)允许通过代理访问的主机节点 -->
  17.     <property>
  18.         <name>hadoop.proxyuser.hadoop.hosts</name>
  19.         <value>*</value>
  20. </property>
  21. <!-- 配置该hadoop(superUser)允许通过代理用户所属组 -->
  22.     <property>
  23.         <name>hadoop.proxyuser.hadoop.groups</name>
  24.         <value>*</value>
  25. </property>
  26. <!-- 配置该hadoop(superUser)允许通过代理的用户-->
  27.     <property>
  28.         <name>hadoop.proxyuser.hadoop.users</name>
  29.         <value>*</value>
  30. </property>
复制代码
利用wq保存退出
配置hdfs-site.xml
[hadoop@node1 hadoop]$ vim hdfs-site.xml
在<configuration></configuration>之间添加内容如下
  1. <!-- nn web端访问地址-->
  2.         <property>
  3.         <name>dfs.namenode.http-address</name>
  4.         <value>node1:9870</value>
  5.     </property>
  6.    
  7.         <!-- 2nn web端访问地址-->
  8.     <property>
  9.         <name>dfs.namenode.secondary.http-address</name>
  10.         <value>node3:9868</value>
  11.     </property>
  12.    
  13.     <!-- 测试环境指定HDFS副本的数量1 -->
  14.     <property>
  15.         <name>dfs.replication</name>
  16.         <value>1</value>
  17.     </property>
复制代码
利用wq保存退出
配置yarn-site.xml
在<configuration></configuration>之间添加内容如下
  1. <!-- 指定MR走shuffle -->
  2.     <property>
  3.         <name>yarn.nodemanager.aux-services</name>
  4.         <value>mapreduce_shuffle</value>
  5.     </property>
  6.    
  7.     <!-- 指定ResourceManager的地址-->
  8.     <property>
  9.         <name>yarn.resourcemanager.hostname</name>
  10.         <value>node2</value>
  11.     </property>
  12.    
  13.     <!-- 环境变量的继承 -->
  14.     <property>
  15.         <name>yarn.nodemanager.env-whitelist</name>
  16.         <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  17.     </property>
  18.    
  19.     <!--yarn单个容器允许分配的最大最小内存 -->
  20.     <property>
  21.         <name>yarn.scheduler.minimum-allocation-mb</name>
  22.         <value>512</value>
  23.     </property>
  24.     <property>
  25.         <name>yarn.scheduler.maximum-allocation-mb</name>
  26.         <value>4096</value>
  27.     </property>
  28.    
  29.     <!-- yarn容器允许管理的物理内存大小 -->
  30.     <property>
  31.         <name>yarn.nodemanager.resource.memory-mb</name>
  32.         <value>4096</value>
  33.     </property>
  34.    
  35.     <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
  36.     <property>
  37.         <name>yarn.nodemanager.pmem-check-enabled</name>
  38.         <value>true</value>
  39.     </property>
  40.     <property>
  41.         <name>yarn.nodemanager.vmem-check-enabled</name>
  42.         <value>false</value>
  43.     </property>
复制代码
利用wq保存退出
配置mapred-site.xml
[hadoop@node1 hadoop]$ vim mapred-site.xml
在<configuration></configuration>之间添加内容如下
  1. <!-- 指定MapReduce程序运行在Yarn上 -->
  2.     <property>
  3.         <name>mapreduce.framework.name</name>
  4.         <value>yarn</value>
  5.     </property>
复制代码
配置workers
[hadoop@node1 hadoop]$ vim workers
在文件中添加
node1
node2
node3
注意:该文件中添加的内容末了不允许有空格,文件中不允许有空行
3.1.2 配置汗青服务器

为了查看程序的汗青运行环境,需要配置一下汗青服务器。
配置mapred-site.xml
[hadoop@node1 hadoop]$ vim mapred-site.xml
添加内容如下:
  1. <!-- 历史服务器端地址 -->
  2. <property>
  3.     <name>mapreduce.jobhistory.address</name>
  4.     <value>node1:10020</value>
  5. </property>
  6. <!-- 历史服务器web端地址 -->
  7. <property>
  8.     <name>mapreduce.jobhistory.webapp.address</name>
  9.     <value>node1:19888</value>
  10. </property>
复制代码
3.1.3  配置日记的聚集

日记聚集概念:应用运行完成以后,将程序运行日记信息上传到HDFS体系上。
日记聚集功能利益:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日记聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
配置yarn-site.xml
[hadoop@node1 hadoop]$ vim yarn-site.xml
添加内容如下:
  1. <!-- 开启日志聚集功能 -->
  2. <property>
  3.     <name>yarn.log-aggregation-enable</name>
  4.     <value>true</value>
  5. </property>
  6. <!-- 设置日志聚集服务器地址 -->
  7. <property>  
  8.     <name>yarn.log.server.url</name>  
  9.     <value>http://node1:19888/jobhistory/logs</value>
  10. </property>
  11. <!-- 设置日志保留时间为7天 -->
  12. <property>
  13.     <name>yarn.log-aggregation.retain-seconds</name>
  14.     <value>604800</value>
  15. </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
写入以下内容
  1. #!/bin/bash
  2. if [ $# -lt 1 ]
  3. then
  4.     echo "No Args Input..."
  5.     exit ;
  6. fi
  7. case $1 in
  8. "start")
  9.         echo " =================== 启动 hadoop集群 ==================="
  10.         echo " --------------- 启动 hdfs ---------------"
  11.         ssh node1 "/home/hadoop/soft/hadoop-3.3.4/sbin/start-dfs.sh"
  12.         echo " --------------- 启动 yarn ---------------"
  13.         ssh node2 "/home/hadoop/soft/hadoop-3.3.4/sbin/start-yarn.sh"
  14.         echo " --------------- 启动 historyserver ---------------"
  15.         ssh node1 "/home/hadoop/soft/hadoop-3.3.4/bin/mapred --daemon start historyserver"
  16. ;;
  17. "stop")
  18.         echo " =================== 关闭 hadoop集群 ==================="
  19.         echo " --------------- 关闭 historyserver ---------------"
  20.         ssh node1 "/home/hadoop/soft/hadoop-3.3.4/bin/mapred --daemon stop historyserver"
  21.         echo " --------------- 关闭 yarn ---------------"
  22.         ssh node2 "/home/hadoop/soft/hadoop-3.3.4/sbin/stop-yarn.sh"
  23.         echo " --------------- 关闭 hdfs ---------------"
  24.         ssh node1 "/home/hadoop/soft/hadoop-3.3.4/sbin/stop-dfs.sh"
  25. ;;
  26. *)
  27.     echo "Input Args Error..."
  28. ;;
  29. 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企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表