基于OpenEuler摆设Hadoop完全分布式集群

打印 上一主题 下一主题

主题 1004|帖子 1004|积分 3012

基于OpenEuler摆设Hadoop完全分布式集群


  
前期准备

分析


  • 准备3台主机(关闭防火墙、静态IP、主机名称) 【openEuler 24.03】
  • 安装JDK 【jdk11】
  • 安装Hadoop 【hadoop 3.3.4】
  • 配置环境变量
  • 配置ssh
  • 配置集群
  • 单点启动
  • 群起并测试集群
假造机平台
假造机平台版本备注VMware Workstation Pro17.6.0 软件信息
软件版本备注Hadoop3.3.4JDK11.0.25 服务器主机规划
主机名IP体系node110.90.100.101openEuler-24.03-LTS-SP1node210.90.100.102openEuler-24.03-LTS-SP1node310.90.100.103openEuler-24.03-LTS-SP1 Hadoop集群规划
node1
node2
node3
IP10.90.100.10110.90.100.10210.90.100.103HDFSNameNode、DataNodeDataNodeDataNode、SecondaryNameNodeYARNNodeManagerResourcemanager、NodeManagerNodeManager   解释
  这里NameNode和SecondaryNameNode不要安装在同一台服务器上,ResourceManager也很耗内存,不要和NameNode、SecondaryNameNode配置在同一台服务器上
  一、基础环境搭建

1.1 Linux操纵体系安装


  • 启动假造机,选择安装OpenEuler体系


  • 选择语言,这里以选择中文为例。


  • 体系安装配置
主要配置的地方是安装目的地、软件选择,用户设置等,以现实需求为准。

① 体系安装目的地,即磁盘分区。这里以主动分区为例。

   注意
  在生产环境中通常要求自定义分区,分区规划以现实需求为准,在此不在赘述,请通过查资料进行参考。
  ② 体系软件安装。这里为例节流空间,以服务器和安装根本的开发工具为例。

   注意
  在生产环境中以现实摆设服务器类型为准,并选择相应的软件安装。
  ③.设置用户名。为例方便操纵,这里设置root用户为例。

④ 配置完成后,选择开始安装

安装完成后重启体系即可。

重启体系看到登录提示即表示已经安装完成。

1.2 Linux环境准备

   定义主机名、配置静态IP、关闭防火墙、添加普通用户、克隆主机
  1.2.1 Linux基础配置


  • 修改默认主机名
①查询主机名
  1. [root@localhost ~]# hostname
  2. localhost.localdomain
复制代码
②修改主机名,这里以主机名为node1为例
  1. [root@localhost ~]# hostnamectl set-hostname node1
  2. #查看主机名
  3. [root@localhost ~]# hostname
  4. node1
复制代码
③重启见效
  1. [root@localhost ~]# reboot
复制代码
④重启之后就显示设置的主机名
  1. [root@node1 ~]#
复制代码

  • 配置静态IP
   这里以配置node1的静态IP为10.90.100.101为例
  配置主机的网卡,设置IP
  1. [root@node1 ~]#
  2. vim /etc/sysconfig/network-scripts/ifcfg-ens33
复制代码
文件修改焦点内容如下
  1. BOOTPROTO=static
  2. ONBOOT=yes
  3. IPADDR=10.90.100.101
  4. GATEWAY=10.90.100.2
  5. NETMASK=255.255.255.0
  6. DNS1=10.90.100.2
  7. DNS2=114.114.114.114
复制代码


  • BOOTPROTO设置为static,表示IP为静态的。
  • ONBOOT设置为yes,表示开机启动网卡。
  • GATEWAY设置为现实网关地点。
  • IPADDR设置为网关地点的网段的主机地点。
   提示
  VMware检察网络的方式为:编辑 → 假造网络编辑器 ,选择相应的假造网卡就可以看到子网地点的网段及网关,如下图所示。
  

  重启网卡
  1. [root@node1 ~]#
  2. systemctl restart NetworkManager#测试网络,如果有复兴包阐明通了[root@node1 ~]#
  3. ping www.baidu.comPING www.baidu.com (183.240.99.169) 56(84) 字节的数据。64 字节,来自 183.240.99.169 (183.240.99.169): icmp_seq=1 ttl=128 时间=113 毫秒64 字节,来自 183.240.99.169 (183.240.99.169): icmp_seq=2 ttl=128 时间=48.1 毫秒^C--- www.baidu.com ping 统计 ---已发送 2 个包, 已接收 2 个包, 0% packet loss, time 1002msrtt min/avg/max/mdev = 48.066/80.627/113.189/32.561 ms[root@node1 ~]#
复制代码
通过ifconfig命令检察如果显示的IP不是配置的静态IP地点,重启主机即可。
  1. [root@node1 ~]#
  2. ifconfig             ens33: flags=4163  mtu 1500                 inet 10.90.100.128  netmask 255.255.255.0  broadcast 10.90.100.255          inet6 fe80::20c:29ff:fe7d:3b1a  prefixlen 64  scopeid 0x20   #通过观察显示的IP还是默认分配的IP ,其实体系的真实的IP已经为设置的静态IP,只是显示还默认的,重启主机即可看到配置IP[root@node1 ~]#
  3. reboot   [root@node1 ~]#
  4. ifconfigens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 10.90.100.101  netmask 255.255.255.0  broadcast 10.90.100.255#重启后显示的IP就变为配置的静态IP
复制代码

  • 关闭防火墙
关闭防火墙并设置防火墙开机不启动
  1. [root@node1 ~]#
  2. systemctl stop firewalld[root@node1 ~]#
  3. systemctl disable firewalld
复制代码
查抄防火墙状态,确认是否已经关闭
  1. [root@node1 ~]#
  2. systemctl status firewalld○ firewalld.service - firewalld - dynamic firewall daemon     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enabled)     Active: inactive (dead)       Docs: man:firewalld(1)#显示的内容阐明已经关闭      
复制代码

  • 新建普通用户
因为root用户权限太高,误操纵可能会造成不可挽回的丧失,所以我们须要新建一个普通用户来安装操纵。
添加一个普通用户并设置密码,用户名例如:hadoop,方法如下:
  1. [root@node1 ~]#
  2. adduser hadoop[root@node1 ~]#
  3. passwd hadoop       更改用户 hadoop 的密码 。            新的密码:                            无效的密码: 密码少于 8 个字符       重新输入新的密码:                   passwd:所有的身份验证令牌已经成功更新。[root@node1 ~]#
  4.   
复制代码
给普通用户添加sudo实行权限,且实行sudo不须要输入密码
  1. [root@node1 ~]#
  2. vim /etc/sudoers
复制代码
在sudoers文件的%wheel ALL=(ALL) ALL这一行的下面添加如下语句:
  1. hadoop    ALL=(ALL)       NOPASSWD: ALL
复制代码
  注意
  修改sudoers文件完成后,实行保存退出命令要加! 才能保存成功即 wq!
  1.2.2 创建集群主机

   根据规划集群有3台主机,此时node1基础环境已经配置好,可以用node1克隆出node2和node3,并配置好相干配置即可,并不须要重新再安装node2和node3。
  

  • 克隆主机
选中node1用来克隆出node2和node3主机。点击 假造机→管理→克隆→下一步
克隆当前状态:

创建完备克隆

设置假造机名称信息

用同样的方法克隆出node3。

  • 修改主机名
进入node2体系使用普通用户hadoop登录,此时主机名还是原理克隆的node1,须要改成node2。
① 修改主机名
  1. [hadoop@node1 ~]$ sudo hostnamectl set-hostname node2
复制代码
② 检察主机名
  1. [hadoop@node1 ~]$ hostname
  2. node2
复制代码
③ 重启呆板,
  1. [hadoop@node1 ~]$ sudo reboot  
复制代码
重启后,主机就变为设置的node2了
  1. [hadoop@node2 ~]$
复制代码
使用同样的方法修改node3的主机名为node3

  • 设置静态IP
此时的IP还是node1的IP,须要把IP改为node2规划的IP 10.90.100.102。
  1. [hadoop@node2 ~]$
  2. sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
复制代码
进入网卡文件后修改IPADDR的值
  1. IPADDR=10.90.100.102
复制代码
如果重启网卡不见效就重启主机
  1. [hadoop@node2 ~]$
  2. sudo systemctl restart NetworkManager#重启[hadoop@node2 ~]$
  3. sudo reboot
复制代码
使用同样的方法配置node3的IP为10.90.100.103

  • 修改hosts文件,配置IP和主机名的映射
  1. [hadoop@node1 ~]$ sudo vim /etc/hosts
复制代码
添加如下内容
  1. 10.90.100.101 node1
  2. 10.90.100.102 node2
  3. 10.90.100.103 node3
复制代码
添加后的结果如下:
  1. [hadoop@node1 ~]$ cat /etc/hosts#略10.90.100.101 node1
  2. 10.90.100.102 node2
  3. 10.90.100.103 node3
复制代码
在node2、node3主机实行雷同的操纵,在hosts文件添加映射的配置。
1.2.3 配置主机之间的免密登录


  • 生产秘钥
使用以下命令在node1主机秘钥:
  1. ssh-keygen -t rsa
复制代码
实行命令后,如果没有特殊的配置需求,连续敲击三次回车键即可。
  1. [hadoop@node1 ~]$ ssh-keygen -t rsa
  2.       Generating public/private rsa key pair. Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):  Created directory '/home/hadoop/.ssh'.           Enter passphrase (empty for no passphrase):      Enter same passphrase again:                    Your identification has been saved in /home/hadoop/.ssh/id_rsa   Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub    The key fingerprint is:                                           SHA256:slyEQ1rFv6KPsItZAJOvqhenUlKdh8H0ekMEqdvSK1o hadoop@node1   The key's randomart image is:                          +---[RSA 3072]----+                              |   ooo+o.        |                  | .  +* ..        |                 |+  o.+= ..       |                 | +o +o.o  .      |                 | .o+..+ S  .     |                 |..=.+o =. .      |                 |.oE=o.o. .       |                |o.++.o..         |                 |=+o.o....        |                 +----[SHA256]-----+                 [hadoop@node1 ~]$   
复制代码

  • 拷贝公钥到集群主机
在node1主机实行拷贝公钥的命令,详细命令如下:
  1. ssh-copy-id node1
  2. ssh-copy-id node2
  3. ssh-copy-id node3
复制代码
实行ssh-copy-id命令后,根据提示输入yes,再输入登录主机的登录密码:

   验证从node1发起ssh登录到node2,即实行ssh node2,过程中不须要输入登录密码即为配置成功。使用exit退出当前免密登录。
  在node2、node3主机上实行雷同的操纵,配置主机之间的免密登录操纵。
1.2.4 配置分发脚本

为了后续的在集群中分发文件操纵方便,须要配置分发脚本。

  • 分别在主机node1、node2和node3上安装rsync命令
  1. sudo yum install rsync -y   
复制代码
如:
  1. [hadoop@node1 ~]$ sudo yum install rsync -y   
复制代码
  提示
  rsync和scp的区别:用rsync做文件的复制要比scp的速率快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
  

  • 在node1主机上的用户主目次下创建bin目次
  1. [hadoop@node1 ~]$ cd  ~
  2. [hadoop@node1 ~]$ mkdir bin
  3. [hadoop@node1 ~]$ ls
  4. bin
复制代码
进入新建的bin目次,并在该目次下创建分发脚本文件xsync
  1. [hadoop@node1 ~]$ cd  bin
  2. [hadoop@node1 bin]$ vim xsync
复制代码
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
复制代码
修改权限,改文件增长实行权限:
  1. [hadoop@node1 bin]$ chmod +x xsync  
  2. [hadoop@node1 bin]$ ls
  3. xsync
  4. #xsync文件所在的路径
  5. [hadoop@node1 bin]$ pwd
  6. /home/hadoop/bin
复制代码
配置环境变量
  1. [hadoop@node1 bin]$ cd ~
  2. [hadoop@node1 ~]$ vim .bashrc
复制代码
在用户级的环境变量文件.bashrc中添加xsync脚本文件的配置,方便后续实行脚本实现分发操纵。
  1. [hadoop@node1 ~]$ vim .bashrc
复制代码
在.bashrc文件最后一行添加环境变量的配置
  1. export PATH=/home/hadoop/bin:$PATH
复制代码
添加之后的结果如下
  1. [hadoop@node1 ~]$ cat .bashrc
  2. # Source default setting
  3. [ -f /etc/bashrc ] && . /etc/bashrc
  4. # User environment PATH
  5. export PATH
  6. export PATH=/home/hadoop/bin:$PATH
复制代码
实行source命令让环境变量配置见效。
  1. [hadoop@node1 ~]$ source .bashrc
复制代码

  • 测试
在node1主机实行xsync命令发送xsync脚本到node2、node3
  1. [hadoop@node1 ~]$ xsync /home/hadoop/bin
复制代码
登到node2或node3主机就可以看到/home/hadoop/bin目次下有xsync脚本文件且内容与node1的xsync文件一样。如要在node2和node3也能使用该命令实现分发,须要配置相应的环境变量,与node1配置方法一样,在此将不再赘述。
二、安装JDK


  • 下载jdk安装包并上传该JDK 软件包到已经node1主机。
    上传方式有很多,任选一种方式即可,在此不再赘述。
  • 上传成功后,通过 ls 命令检察是否上传成功。
这里以上传到用户主目次为例。
  1. [hadoop@node1 ~]$ ls
  2. jdk-11.0.25_linux-x64_bin.tar.gz
复制代码

  • 解压jdk压缩包到安装软件目次下。这里以软件安装路径是/opt/software目次为例,可以根据现实需求设定。
  1. [hadoop@node1 ~]$ tar zxvf jdk-11.0.25_linux-x64_bin.tar.gz  -C /opt/software/
复制代码
  注意:
  ① 本文设定软件安装路径为/opt的software目次下,如果不存在/opt/software目次需先创建。
  1. [hadoop@node1 ~]$ ls /opt/              
  2. patch_workspace
  3. #没有software目录,需要创建
  4. [hadoop@node1 ~]$ sudo mkdir  /opt/software      
  5. [hadoop@node1 ~]$ ls /opt/               
  6. patch_workspace  software                 
  7. [hadoop@node1 ~]$   
复制代码
② 因为是使用hadoop普通用户,而/opt目次普通是没有写的权限,须要把/opt/software目次的所属用户改为hadoop,否则会报没有权限的错误提示。修改所属用户的命令如下:
  1. [hadoop@node1 ~]$ sudo chown hadoop:hadoop -R /opt/software
  2. #验证所属用户是否修改成功
  3. [hadoop@node1 ~]$  cd /opt
  4. [hadoop@node1 opt]$ ll
  5. 总计 8
  6. drwxr-xr-x. 4 root   root   4096 2025年 3月 7日 patch_workspace
  7. drwxr-xr-x. 2 hadoop hadoop 4096  3月 6日 23:33 software
  8. #所属用户已经是hadoop
复制代码

  • 创建JDK 软链接,以方便后续使用,操纵命令如下。
  1. [hadoop@node1 ~]$ cd /opt/software/
  2. [hadoop@node1 software]$ ls
  3. jdk-11.0.25
  4. [hadoop@node1 software]$ ln -s /opt/software/jdk-11.0.25 jdk
  5. [hadoop@node1 software]$ ls
  6. jdk  jdk-11.0.25
  7. [hadoop@node1 software]$
复制代码

  • 配置 JDK 环境变量
  1. [hadoop@node1 software]$ sudo vim /etc/profile
复制代码
在profile文件内容的末了添加如下配置(注意:等号两侧不要有空格)
  1. export JAVA_HOME=/opt/software/jdk
  2. export JRE_HOME=${JAVA_HOME}/jre
  3. export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:.
  4. export PATH=${JAVA_HOME}/bin:$PATH
复制代码

  • 使环境变量的配置见效
  1. [hadoop@node1 software]$ source /etc/profile  
复制代码

  • 校验jdk是否安装完成。
  1. [hadoop@node1 software]$ java -version
  2. java version "11.0.25" 2024-10-15 LTS
  3. Java(TM) SE Runtime Environment 18.9 (build 11.0.25+9-LTS-256)
  4. Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.25+9-LTS-256, mixed mode)
  5. [hadoop@node1 software]$
复制代码
至此,node1的JDK已经安装完成。
在node2、node3主机实行雷同的操纵,完成JDK的安装和配置。
三、Hadoop集群安装摆设

3.1 安装Hadoop


  • 下载hadoop安装包并上传该hadoop软件包到node1主机。
    上传方式有很多,任选一种方式即可,在此不再赘述。
  • 上传成功后,通过 ls 命令检察是否上传成功。
  1. [hadoop@node1 ~]$ ls
  2. bin  hadoop-3.3.4.tar.gz
复制代码

  • 解压hadoop-3.3.4.tar.gz到/opt/software/目次下
  1. [hadoop@node1 ~]$ tar -xzvf hadoop-3.3.4.tar.gz -C  /opt/software/
复制代码

  • 创建 hadoop软链接,以方便后续使用,操纵如下
  1. [hadoop@node1 ~]$ cd /opt/software/
  2. [hadoop@node1 software]$ ls
  3. hadoop-3.3.4  jdk  jdk-11.0.25
  4. [hadoop@node1 software]$ ln -s /opt/software/hadoop-3.3.4  hadoop
  5. [hadoop@node1 software]$ ls
  6. hadoop  hadoop-3.3.4  jdk  jdk-11.0.25
  7. [hadoop@node1 software]$
复制代码

  • 配置 hadoop 环境变量
  1. [hadoop@node1 software]$ sudo vim /etc/profile
  2.      
复制代码
在profile文件内容的末了添加如下代码(注意:等号两侧不要有空格)。
  1. export HADOOP_HOME=/opt/software/hadoop
  2. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
复制代码

  • 使配置见效 :
  1. [hadoop@node1 software]$ source /etc/profile  
复制代码

  • 验证
  1. [hadoop@node1 software]$ hadoop version
  2. Hadoop 3.3.4
  3. Source code repository https://github.com/apache/hadoop.git -r a585a73c3e02ac62350c136643a5e7f6095a3dbb
  4. Compiled by stevel on 2022-07-29T12:32Z
  5. Compiled with protoc 3.7.1
  6. From source with checksum fb9dd8918a7b8a5b430d61af858f6ec
  7. This command was run using /opt/software/hadoop-3.3.4/share/hadoop/common/hadoop-common-3.3.4.jar
  8. [hadoop@node1 software]$
复制代码
看到hadoop版本号输出,阐明环境变量配置成功。
   提示:3.2节的1-9步都是在node1主机实行。
  3.2 配置Hadoop 集群


  • 焦点配置文件
配置core-site.xml
  1. [hadoop@node1 software]$ cd $HADOOP_HOME/etc/hadoop
  2. [hadoop@node1 hadoop]$ vim  core-site.xml
复制代码
配置后完备内容如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3. <configuration>
  4. <!-- 指定NameNode的地址 -->
  5.     <property>
  6.         <name>fs.defaultFS</name>
  7.         <value>hdfs://node1:9820</value>
  8.     </property>
  9.     <!-- 指定hadoop数据的存储目录 -->
  10.     <property>
  11.         <name>hadoop.tmp.dir</name>
  12.         <value>/opt/software/hadoop-3.3.4/data</value>
  13.     </property>
  14.     <!-- 配置HDFS网页登录使用的静态用户为hadoop -->
  15.     <property>
  16.         <name>hadoop.http.staticuser.user</name>
  17.         <value>hadoop</value>
  18.     </property>
  19.     <!-- 配置该hadoop(superUser)允许通过代理访问的主机节点 -->
  20.     <property>
  21.         <name>hadoop.proxyuser.hadoop.hosts</name>
  22.         <value>*</value>
  23.     </property>
  24.     <!-- 配置该hadoop(superUser)允许通过代理用户所属组 -->
  25.     <property>
  26.         <name>hadoop.proxyuser.hadoop.groups</name>
  27.         <value>*</value>
  28.     </property>
  29.     <!-- 配置该hadoop(superUser)允许通过代理的用户-->
  30.     <property>
  31.         <name>hadoop.proxyuser.hadoop.users</name>
  32.         <value>*</value>
  33.     </property>
  34. </configuration>  
复制代码

  • 配置hdfs-site.xml
  1. [hadoop@node1 hadoop]$ vim hdfs-site.xml      
复制代码
配置后完备内容如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>   
  3. <configuration>
  4. <!-- nn web端访问地址-->
  5.     <property>
  6.         <name>dfs.namenode.http-address</name>
  7.                <value>node1:9870</value>
  8.     </property>
  9.     <!-- 2nn web端访问地址-->
  10.     <property>
  11.         <name>dfs.namenode.secondary.http-address</name>
  12.         <value>node3:9868</value>
  13.     </property>
  14. </configuration>   
复制代码

  • 配置yarn-site.xml
  1. [hadoop@node1 hadoop]$ vim yarn-site.xml
复制代码
配置后完备内容如下:
  1. <?xml version="1.0"?>
  2. <configuration>
  3.     <!-- 指定MR走shuffle -->
  4.     <property>
  5.         <name>yarn.nodemanager.aux-services</name>
  6.         <value>mapreduce_shuffle</value>
  7.         </property>
  8.    
  9.     <!-- 指定ResourceManager的地址-->
  10.     <property>
  11.         <name>yarn.resourcemanager.hostname</name>
  12.         <value>node2</value>
  13.     </property>
  14.    
  15.     <!-- 环境变量的继承 -->
  16.     <property>
  17.         <name>yarn.nodemanager.env-whitelist</name>
  18.     <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  19.     </property>
  20.    
  21.     <!-- yarn容器允许分配的最大最小内存 -->
  22.     <property>
  23.         <name>yarn.scheduler.minimum-allocation-mb</name>
  24.         <value>512</value>
  25.     </property>
  26.     <property>
  27.         <name>yarn.scheduler.maximum-allocation-mb</name>
  28.         <value>2048</value>
  29.     </property>
  30.    
  31.     <!-- yarn容器允许管理的物理内存大小 -->
  32.     <property>
  33.         <name>yarn.nodemanager.resource.memory-mb</name>
  34.         <value>2048</value>
  35.     </property>
  36.    
  37.     <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
  38.     <property>
  39.         <name>yarn.nodemanager.pmem-check-enabled</name>
  40.         <value>false</value>
  41.     </property>
  42.     <property>
  43.         <name>yarn.nodemanager.vmem-check-enabled</name>
  44.         <value>false</value>
  45.     </property>
  46.   
  47. </configuration>
复制代码

  • 配置mapred-site.xml
  1. [hadoop@node1 hadoop]$ vim mapred-site.xml  
复制代码
配置后完备内容如下:
  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4.     <!-- 指定MapReduce程序运行在Yarn上 -->
  5.     <property>
  6.         <name>mapreduce.framework.name</name>
  7.         <value>yarn</value>
  8.     </property>
  9.    
  10. </configuration>
复制代码

  • 配置workers
  1. [hadoop@node1 hadoop]$ vim workers
复制代码
把原有的内容替换成如下内容:
  1. node1
  2. node2
  3. node3
复制代码
注意:该文件中添加的内容末了不允许有空格,文件中不允许有空行。

  • 配置汗青服务器 (选做,如有需求就配置)
修改mapred-site.xml
  1. [hadoop@node1 hadoop]$ vim mapred-site.xml  
复制代码
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>
复制代码
文件终极内容:
  1. <?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration>    <!-- 指定MapReduce程序运行在Yarn上 -->    <property>        <name>mapreduce.framework.name</name>        <value>yarn</value>    </property>            <!-- 历史服务器端地址 -->
  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>
  11. </configuration>
复制代码

  • 配置日志聚集(选做,如有需求就配置)
修改yarn-site.xml
  1. [hadoop@node1 hadoop]$ vim yarn-site.xml
复制代码
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>
复制代码
文件终极内容:
  1. <?xml version="1.0"?><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>2048</value>    </property>        <!-- yarn容器允许管理的物理内存巨细 -->    <property>        <name>yarn.nodemanager.resource.memory-mb</name>        <value>2048</value>    </property>        <!-- 关闭yarn对物理内存和假造内存的限制查抄 -->    <property>        <name>yarn.nodemanager.pmem-check-enabled</name>        <value>false</value>    </property>    <property>        <name>yarn.nodemanager.vmem-check-enabled</name>        <value>false</value>    </property>        <!-- 开启日志聚集功能 -->
  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>
  16. </configuration>
复制代码

  • 配置hadoop-env.sh
  1. [hadoop@node1 hadoop]$ vim hadoop-env.sh  
复制代码
hadoop-env.sh 配置JDK的环境变量,添加如下内容:
  1. export JAVA_HOME=/opt/software/jdk
复制代码

  • 将hadoop软件及配置分发到node2主机和node3主机
  1. [hadoop@node1 hadoop]$  xsync /opt/software/ node2 node3
复制代码
  提示:3.2节的1-9步都是在node1主机实行。实行以上操纵后,检察node2和node3主机 /opt/software/目次下是否有hadoop相干文件。
  

  • 修改环境变量
修改node2、node3主机的环境变量,分别在node2、node3主机上实行以下操纵:
  1. sudo vim /etc/profile
复制代码
在profile文件末了添加如下内容
  1. #Hadoopexport HADOOP_HOME=/opt/software/hadoop
  2. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
复制代码
让环境变量见效
  1. source /etc/profile  
复制代码
验证是否已经安装好。
3.3 格式化文件体系

在NameNode历程地点的主机node1实行格式化hdfs操纵。
  1. [hadoop@node1 ~]$ hdfs namenode -format
复制代码

看到successfully formatted为格式化成功。
   注意:
格式化成功后,以后就不能再次格式化了。
  3.4启动集群


  • 启动hdfs
在NameNode地点的主机node1上实行启动hdfs命令,如下:
  1. [hadoop@node1 ~]$ start-dfs.sh
复制代码

  • 启动yarn
在Resourcemanage历程地点的node2呆板上实行启动yarn命令,如下:
  1. [hadoop@node2 ~]$
  2. start-yarn.sh  
复制代码
至此,如果过程中没有报错就已经摆设完成,接下来可以进行验证。
3.5 验证

3.5.1 历程验证

分别在集群的主机node1、node2、node3实行jps命令:
node1:
  1. [hadoop@node1 hadoop]$ jps
  2. 7431 NameNode
  3. 8088 NodeManager
  4. 7724 DataNode
  5. 8303 Jps
复制代码
node2:
  1. [hadoop@node2 ~]$
  2. jps7138 ResourceManager7300 NodeManager7764 Jps6925 DataNode
复制代码
node3:
  1. [hadoop@node3 hadoop]$ jps
  2. 6657 DataNode
  3. 7059 NodeManager
  4. 6869 SecondaryNameNode
  5. 7277 Jps
复制代码
通过结果观察符合集群规划:
node1
node2
node3
IP10.90.100.10110.90.100.10210.90.100.103HDFSNameNode、DataNodeDataNodeDataNode、SecondaryNameNodeYARNNodeManagerResourcemanager、NodeManagerNodeManager 3.5.2 欣赏器验证

欣赏器访问NameNode,输入NameNode地点的主机的IP及配置的端口
http://10.90.100.101:9870

欣赏器访问Yarn,输入Yarn地点的节点IP及配置的端口
http://10.90.100.102:8088

欣赏器访问SecondaryNameNode
http://10.90.100.103:9868

都能正常访问。
3.5.3 测试文件上传

将 hadoop-3.3.4.tar.gz文件上传到hdfs的/目次下
  1. [hadoop@node1 ~]$ hdfs dfs -put hadoop-3.3.4.tar.gz /        
复制代码
检察上传结果:
  1. [hadoop@node1 ~]$ hdfs dfs -ls  /  
  2. Found 1 items                       
  3. -rw-r--r--   3 hadoop supergroup  695457782 2025-03-07 01:34 /hadoop-3.3.4.tar.gz     
  4. [hadoop@node1 ~]$   
复制代码
阐明hdfs是能正常运行
3.5.4 验证任务

创建文件data.txt,添加内容保存后上传至hdfs。
  1. [hadoop@node1 ~]$ vim data.txt
  2. #data.txt文件添加内容如下
  3. [hadoop@node1 ~]$ cat data.txt
  4. hello world
  5. hello hadoop
  6. #上传data.txt执hdfs的/目录下
  7. [hadoop@node1 ~]$ hdfs dfs -put data.txt /
复制代码
实行wordcount程序实现词统计
  1. [hadoop@node1 ~]$ hadoop jar /opt/software/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar  wordcount /data.txt /output/wordcount
复制代码
运行成功后检察统计结果
  1. [hadoop@node1 ~]$ hdfs dfs -ls  /output/wordcount
  2. Found 2 items
  3. -rw-r--r--   3 hadoop supergroup          0 2025-03-07 02:26 /output/wordcount/_SUCCESS
  4. -rw-r--r--   3 hadoop supergroup         25 2025-03-07 02:26 /output/wordcount/part-r-00000
  5. [hadoop@node1 ~]$ hdfs dfs -cat  /output/wordcount/part-r-00000
  6. hadoop  1
  7. hello   2
  8. world   1
  9. [hadoop@node1 ~]$
复制代码
阐明MapReduce是能正常运行。
至此,Hadoop完全分布式集群已经摆设完成。
   附:集群管理脚本

  现在HDFS的NameNode和Yarn的ResourceManager运行在不同的主机上,启动或关闭服务须要分别到两台主机实行相干命令,在此为了更加便捷的启动和停止集群运行,可以写一个脚本实现集群管理。在此以集群管理脚本放在node1主机上,详细操纵如下:
  

  • 在/home/hadoop/bin目次下创建hdp.sh脚本文件
  1. [hadoop@node1 ~]$ vim ~/bin/hdp.sh
复制代码

  • 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 "/opt/software/hadoop/sbin/start-dfs.sh"
  12.        echo " --------------- 启动 yarn ---------------"
  13.        ssh node2 "/opt/software/hadoop/sbin/start-yarn.sh"
  14.        #echo " --------------- 启动 historyserver ---------------"
  15.        #ssh node1 "/opt/software/hadoop/bin/mapred --daemon start historyserver"
  16. ;;
  17. "stop")
  18.        echo " =================== 关闭 hadoop集群 ==================="
  19.        #echo " --------------- 关闭 historyserver ---------------"
  20.        #ssh node1 "/opt/software/hadoop/bin/mapred --daemon stop historyserver"
  21.        echo " --------------- 关闭 yarn ---------------"
  22.        ssh node2 "/opt/software/hadoop/sbin/stop-yarn.sh"
  23.        echo " --------------- 关闭 hdfs ---------------"
  24.        ssh node1 "/opt/software/hadoop/sbin/stop-dfs.sh"
  25. ;;
  26. "jps")
  27. for host in node1 node2 node3
  28.    do
  29.        echo ====================  $host  ====================   
  30.        ssh $host "/opt/software/jdk/bin/jps"
  31.    done
  32. ;;
  33. *)
  34.    echo "Input Args Error..."
  35. ;;
  36. esac
复制代码

  • 给增长实行权限
  1. [hadoop@node1 ~]$ chmod 777 ~/bin/hdp.sh
复制代码
至此,在node1主机上就可以实行hdp.sh命令管理集群,不再须要单独到node2启动yarn。相干操纵命令如下:
  

  • 检察历程操纵
  1. [hadoop@node1  ~]$ hdp.sh jps
复制代码


  • 启动集群
  1. [hadoop@node1  ~]$ hdp.sh start
复制代码


  • 停止集群
  1. [hadoop@node1  ~]$ hdp.sh stop
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

数据人与超自然意识

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表