【Linux】—Hadoop运行环境搭建(完全分布式)

文章目录


前言

本文主要讲Hadoop运行环境(完全分布式)搭建。三种完全分布式客户机如下:

Hadoop运行模式有三种:本地、伪分布、完全分布模式。

运行模式 说明
本地模式 数据存储在linux本地
伪分布模式 数据存储在HDFS
完全分布模式 数据存储在HDFS 多台服务器工作

一、模板虚拟机环境准备

1、安装模板虚拟机,请参考链接:https://blog.csdn.net/sodaloveer/article/details/139795882
模板虚拟机信息:

  • IP地址:192.168.10.100
  • 主机名称:QF
  • 内存:2G
  • 硬盘:80G
    2、安装XShell远程访问机,请参考链接:https://blog.csdn.net/sodaloveer/article/details/140122338
    3、QF虚拟机配置要求如下(本文Linux系统版本以Linux version 3.10.0-957.el7.x86_64为例)
  • 使用 yum 安装前,先执行"ping www.baidu.com"命令测试下虚拟机联网情况。
如果Linux安装的是最小系统版本,还需要安装"net-tool"工具、"vim"编辑器;如果安装的是Linux桌面标准版,可以跳过,直接执行命令安装epel-release。
  • 安装 net-tool 工具,执行"yum install -y net-tools "命令。
    net-tool:工具包集合,包含ifconfig等命令。
  • 安装 vim 编辑器,执行"yum install -y vim"命令。
  • 安装 epel-release ,执行"yum install -y epel-release"命令。

4、关闭防火墙,关闭防火墙开机自启

  • 执行"systemctl stop firewalld"命令。
  • 执行"systemctl disable firewalld.service"命令。

5、创建atwqf用户,并修改atwaf用户的密码

  • 执行"useradd atwqf"命令。

  • 执行"passwd w574520."命令。
    6、配置atwqf用户具有root权限,方便后期加sudo执行root权限命令。

  • 执行"vim /etc/sudoers"命令,打开文件。
    修改/etc/sudoers文件,在%wheel这行下面添加一行:
    atwqf ALL=(ALL) NOPASSWD:ALL

注意:atwqf 这一行不要直接放到root下面,因为所有用户都属于wheel组,你先配置了atwqf具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码,所以atwqf要入放到%wheel行下面。

7、在/opt目录下面创建文件夹,并修改所属主和所属组。
7.1. 在/opt目录下创建module、software文件夹。

  • 执行"mkdir /opt/module"命令。

  • 执行"mkdir /opt/software"命令。
    7.2. 修改module、software文件夹的所有者和所属组均为atwqf用户。

  • 执行"mkdir atwqf:atwqf /opt/module"命令。

  • 执行"mkdir atwqf:atwqf /opt/software"命令。
    7.3. 查看module、software文件夹的所有者和所属组。

  • 执行"cd /opt/"命令。

  • 执行"ll"命令。

8、卸载虚拟机自带的JDK,如果你的虚拟机是最小化安装可以直接跳过这一步,不需要执行。

  • 执行"rmp -qa | grep -i java | xargs -nl rpm -e --nodes"命令。
    9、重启虚拟机

  • 执行"reboot"命令。

二、克隆虚拟机(以hadoop102为例)

利用模板机QF,克隆三台虚拟机:hadoop102、hadoop103、hadoop104,下面以克隆hadoop102为例。
1、右键"管理"->"克隆"。

2、选择"创建完整克隆"。

3、填写克隆虚拟机的名称和存放位置。

4、重复上面克隆hadoop102的步骤,完成hadoop103、hadoop104的克隆。

5、如果想要彻底删除克隆机,右键"管理"->"从磁盘中删除"。

右键"移除"只是页面上移除。右键"打开",选择到对应的文件夹就可以恢复了。(参考链接:如何把vmware中已经移除的虚拟机恢复)

三、修改克隆机的IP

1、修改克隆虚拟机的静态IP。

  • 执行"vim /etc/sysconfig/network-scripts/ifcfg-ens32"命令。
    主要是将IPADDR从"192.168.40.100"改成"192.168.40.102"(以hadoop102为例),同理,在hadoop103克隆机上要改成"192.168.40.103",在hadoop104克隆机要改成"192.168.40.104"。

2、修改克隆机主机名。

  • 执行"vim /etc/hostname"命令。
    将"QF"改成"hadoop102"(以hadoop102为例),同理,在hadoop103克隆机上要改成"hadoop103",在hadoop104克隆机上要改成"hadoop104"。

3、配置Linux克隆机主机名称映射host文件,执行"vim /etc/hosts"命令打开/etc/hosts。添加下面内容:

  • 192.168.40.100 qf
  • 192.168.40.101 hadoop101
  • 192.168.40.102 hadoop102
  • 192.168.40.103 hadoop103
  • 192.168.40.104 hadoop104

4、查看Linux虚拟机的"虚拟网络编辑器"

  • 点击"编辑"->"虚拟网络编辑器"->"VMnet8"。
  • 点击"更改设置"进入编辑。
  • 点击"VMnet8",设置"子网IP",点击 "NAT 设置" 进入设置 "网关IP"。

5、查看Windows系统适配器 VMware Network Adapter VMnet8的IP地址。

  • "设置"->"网络和Internet"->"更改适配器选项"
  • 右键"VMware Network Adapter VMnet8"->"属性"
  • "Internet 协议版本4(TPC/IPv4)"的属性
  • 设置"默认网关"和"DNS服务器地址"。

保证Linux系统ifcfg-ens32文件中IP地址,虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。
6、重启克隆机hadoop102,执行"reboot"命令。

7、修改Windows的主机映射文件(hosts文件),进入"C:\Windows\System32\drivers"路径hosts,添加如下内容:(提示:操作系统是Windows10,先拷贝出来,修改保存以后,再覆盖即可。)
192.168.40.100 qf

192.168.40.101 hadoop101

192.168.40.102 hadoop102

192.168.40.103 hadoop103

192.168.40.104 hadoop104

四、安装JDK

以hadoop102为例。先安装到hadoop102上,再拷贝到hadoop103、hadoop104上。

0、jdk下载地址:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html,下滑找适合项目的jdk版本,尽量下载.tar.gz后缀的方便安装。
1、卸载现有jdk,在进行安装jdk前,一定要确保提前删除了虚拟机自带的jdk。

  • 执行"rpm -qa|grep java"命令,查看旧JDK,如果有执行"sudo yum -y remove 要删除jdk的名字"。

2、用XShell传输工具Xftp将JDK导入到/opt/software/文件夹下面。

3、在Linux系统下的opt目录中查看软件包是否导入成功。

  • 执行"ll"命令。

4、解压JDK到/opt/module目录下。

  • 执行"tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/"命令。

5、查看是否解压成功。

6、配置JDK环境变量。

  • 执行"vim /etc/profile.d/my_env.sh"命令新建文件,添加下面内容:
    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_212
    export PATH=PATH:JAVA_HOME/bin
  • 执行"source /etc/profile"文件,让新的环境变量PATH生效。

7、测试JDK是否安装成功。

  • 执行"java -version"命令。

五、安装Hadoop(完全分布式)

以hadoop102为例,再拷贝到hadoop103、hadoop104上。

0、hadoop-3.1.3下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
1、用XShell传输工具Xftp将hadoop-3.1.3.tar.gz导入到/opt/software/文件夹下面。

2、在Linux系统下的opt目录中查看软件包是否导入成功。

  • 执行"ll"命令。

3、解压hadoop-3.1.3.tar.gz到/opt/module目录下。

  • 执行"tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/"命令。

4、查看是否解压成功。

5、配置Hadoop添加到环境变量。

  • 获取Hadoop安装路径"/opt/module/hadoop-3.1.3"。
  • 执行"vim /etc/profile.d/my_env.sh"命令新建文件,添加下面内容:
    #HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-3.1.3
    export PATH=PATH:HADOOP_HOME/bin
    export PATH=PATH:HADOOP_HOME/sbin
  • 执行"source /etc/profile"命令,让新的环境变量PATH生效。

6、测试是否安装成功。

  • 执行"hadoop version"命令。

7、查看Hadoop目录结构。

  • 执行"ll"命令。

重要目录说明:

  • bin目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本
  • etc目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
  • lib目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
  • sbin目录:存放启动或停止 Hadoop 相关服务的脚本
  • share目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例

六、集群常用命令

1、根据上面的安装步骤,现在只有hadoop102这台客户机上安装好jdk和hadoop,因此通过scp命令将hadoop102安装成功的jdk和hadoop拷贝到hadoop103、hadoop104服务器上。如下图:

命令:scp
功能:安全拷贝,可以实现服务器与服务器之间的数据拷贝。
语法:
scp -r     $pdir/$fname        $user@$host:$pdir/$fname
scp -r   要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称

在 hadoop102、hadoop103、hadoop104 都已经创建好的/opt/module、 /opt/software 两个目录,并且已经把这两个目录修改为 atwqf:atwqf。

在hadoop102上,

执行"scp -r /opt/module/jdk1.8.0_212 atwqf@hadoop103:/opt/module"命令,将hadoop102中/opt/module/jdk1.8.0_212 目录拷贝到hadoop103 上,

执行"scp -r /opt/module/jdk1.8.0_212 atwqf@hadoop104:/opt/module"命令,将hadoop102中/opt/module/jdk1.8.0_212 目录拷贝到hadoop104 上。

在hadoop102上,

执行"scp -r /opt/module/hadoop-3.1.3 atwqf@hadoop103:/opt/module"命令,将hadoop102中/opt/module/hadoop-3.1.3 目录拷贝到hadoop103 上,

执行"scp -r /opt/module/jdk1.8.0_212 atwqf@hadoop104:/opt/module"命令,将hadoop102中/opt/module/jdk1.8.0_212 目录拷贝到hadoop104 上。

另一种方式,也可以在hadoop103上,

执行"scp -r atwqf@hadoop102:/opt/module/hadoop-3.1.3 atwqf@hadoop104:/opt/module"命令、

执行"scp -r atwqf@hadoop102:/opt/module/jdk1.8.0_212 atwqf@hadoop104:/opt/module"命令,

可以将hadoop102的jdk和hadoop拷贝到hadoop104上。

命令:rsync
功能:远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
语法:
rsync -av     $pdir/$fname        $user@$host:$pdir/$fname
rsync -av   要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名

rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

2、集群分发脚本:先在hadoop102客户机上部署好xsync脚本,命令可以任何路径下都可以使用。执行这个命令同时分发到hadoop103、hadoop104。

命令:xsync
功能:循环复制文件到所有节点的相同目录下。
语法:xsync 要同步的文件名称
  • 2.1. xsync脚本。
    执行"vim /home/atwqf/bin/xsync"命令,在/home/atwqf/bin目录下创建xsync文件。
bash 复制代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
 echo Not Enough Arguement!
 exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
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
  • 2.2. 修改脚本xsync具有执行权限。
    执行"chmod +x xsync"命令。
    执行"ll"命令,可以看到颜色变了。


  • 2.3. 将bin目录下的内容分发到hadoop103、hadoop104上。
    执行"xsync /home/atwqf/bin/"命令。
    • 在hadoop103上可以想看到xsync命令已经传送过去。
    • 在hadoop104上可以想看到xsync命令已经传送过去。
  • 2.4. 分发环境变量配置到hadoop103、hadoop104上。
    执行"xsync /etc/profile.d/my_env.sh"命令(root所有者)。
    • 在atwqf用户下,执行"xsync /etc/profile.d/my_env.sh"命令会报错failed: Permission denied
    • 在atwqf用户,下执行"sudo xsync /etc/profile.d/my_env.sh"命令会报错sudo: xsync: command not found
      原因:使用sudo相当于现在在root用户下,现在 xsync 命令是在/home/atwqf/bin路径下,root用户找不到这个路径,因此会报错,所以在atwqf用户下执行"sudo /home/atwqf/bin/xsync /etc/profile.d/my_env.sh"命令才可以(写清楚xsync命令存放的路径。)
  • 2.5. 在hadoop103、hadoop104上,执行"cat /etc/profile.d/my_env.sh"命令查看是否分发成功。
  • 2.6. 在hadoop103、hadoop104服务器上,执行"source /etc/profile"命令,让其的环境变量生效。

3、配置ssh,无密登录。

命令:ssh 
功能:无密登录别的服务器。
语法:ssh 另一台电脑的IP地址

服务器间使用ssh免密登录的过程:

  • 3.1. 要实现hadoop102服务器上可以免密登录hadoop103、hadoop104。
    在hadoop102上,执行"ssh-keygen -t rsa"命令,生成公钥和私钥。
  • 3.2. 将公钥拷贝到要免密登录的hadoop103、hadoop104服务器上。
    在hadoop102上,执行"ssh-copy-id hadoop102"将公钥拷贝到要免密登录的自己身上。
    在hadoop102上,执行"ssh-copy-id hadoop103"将公钥拷贝到要免密登录的hadoop103上。
    在hadoop102上,执行"ssh-copy-id hadoop104"将公钥拷贝到要免密登录的hadoop104上。
    同理,如果想在hadoop103对hadoop102/hadoop104服务器进行免密登录的话,在hadoop103服务器上执行上述语句。
  • 3.3. 执行完成3.2.后,在hadoop102上,可以无密登录hadoop103。
    执行"ssh hadoop103"命令。
  • 3.4. 退出。
    执行"exit"命令。
  • 3.5. 在/home/atwqf路径下,查看该路径下所有的文件,包括隐藏文件。
    执行"ls -al"命令。
  • .ssh文件夹下(~/.ssh)的文件功能解释
目录名 说明
known_hosts 记录 ssh 访问过计算机的公钥(public key)
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密码登录服务器公钥
  • 3.6. 查看曾经访问过的hadoop102的服务器。
    执行"cat known_hosts"命令。
  • 3.7. 查看允许哪些服务器来免密登录我自己。
    执行"cat authorized_keys"命令。

配置ssh免密登录后,xsync分发脚本可以不用输密码了。
注意: ssh配置是在atwqf用户下进行配置的,所以在root用户下是无效的,要重新根据上面流程配置。

七、配置集群

1、集群部署规划

  • NameNode 、ResourceManager、SecondaryNameNode 不要安装在同一台服务器。
hadoop102 hadoop103 hadoop104
HDFS NameNode DataNode DataNode SecondaryNameNode DataNode
YARN NodeManager ResourceManager NodeManager NodeManager

2、配置文件

  • 配置文件说明:Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

    • 默认配置文件:
要获取的默认文件 文件存放在Hadoop的jar包中的位置
[core-default.xml] hadoop-common-3.1.3.jar/core-default.xml
[hdfs-default.xml] hadoop-hdfs-3.1.3.jar/hdfs-default.xml
[yarn-default.xml] hadoop-yarn-common-3.1.3.jar/yarn-default.xml
[mapred-default.xml] hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml
    • 自定义配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在
      $HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。

核心配置文件:core-site.xml

  • 1、执行"cd $HADOOP_HOME/etc/hadoop"命令,来到存放核心配置文件的。
  • 2、执行"vim core-site.xml"命令,写入以下内容:
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
 <!-- 指定 NameNode 的地址 -->
 <property>
 <name>fs.defaultFS</name>
 <value>hdfs://hadoop102:8020</value>
 </property>
 <!-- 指定 hadoop 数据的存储目录 -->
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/opt/module/hadoop-3.1.3/data</value>
 </property>
 <!-- 配置 HDFS 网页登录使用的静态用户为 atwqf -->
 <property>
 <name>hadoop.http.staticuser.user</name>
 <value>atwqf</value>
 </property>
 <property>
 <name>hadoop.proxyuser.atwqf.hosts</name>
 <value>*</value>
 </property>
 <property>   
 <name>hadoop.proxyuser.atwqf.groups</name>
 <value>*</value>
 </property>
</configuration>

HDFS 配置文件:hdfs-site.xml

  • 1、执行"cd $HADOOP_HOME/etc/hadoop"命令来到存放HDFS 配置文件的。
  • 2、执行"vim hdfs-site.xml"命令,写入以下内容:
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<!-- nn web 端访问地址-->
 <property>
 <name>dfs.namenode.http-address</name>
 <value>hadoop102:9870</value>
 </property>
<!-- 2nn web 端访问地址-->
 <property>
 <name>dfs.namenode.secondary.http-address</name>
 <value>hadoop104:9868</value>
 </property>
</configuration>

YARN 配置文件:yarn-site.xml

  • 1、执行"cd $HADOOP_HOME/etc/hadoop"命令来到存放YARN 配置文件的。
  • 2、执行"vim yarn-site.xml"命令,写入以下内容:
xml 复制代码
<?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>hadoop103</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_MAP
RED_HOME</value>
 </property>
</configuration>

MapReduce 配置文件: mapred-site.xml

  • 1、执行"cd $HADOOP_HOME/etc/hadoop"命令来到存放MapReduce 配置文件的。
  • 2、执行"vim mapred-site.xml"命令,写入以下内容:
xml 复制代码
<?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>
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
</configuration>

3、在hadoop102上,分发配置好的Hadoop配置文件到hadoop103、hadoop104上。

  • 执行"xsync /opt/module/hadoop-3.1.3/etc/hadoop"命令。
  • 在hadoop103和hadoop104上查看文件分发情况。


4、配置workers

  • 4.1. 执行"vim /opt/module/hadoop-3.1.3/etc/hadoop/workers"命令,增加下面内容:
    hadoop102
    hadoop103
    hadoop104
    注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
  • 4.2. 在hadoop102上,分发配置好的workers配置文件到hadoop103、hadoop104上。
    执行"xsync /opt/module/hadoop-3.1.3/etc"命令。
  • 4.3. 在hadoop103和hadoop104上查看workers配置文件分发情况。


八、群起并测试集群

  • 群起集群

0、如果集群是第一次启动,需要在hadoop102节点初始化NameNode。

  • 执行"hdfs namenode -format"命令。
    初始化完成后,"/opt/module/hadoop-3.1.3"路径下多了logs和data。


1、在hadoop102上启动hdfs,"/opt/module/hadoop-3.1.3"路径下,执行"sbin/start-dfs.sh"命令。

hadoop102

hadoop103

hadoop104

Web端查看HDFS的NameNode。

2、在hadoop103上启动YARN,"/opt/module/hadoop-3.1.3"路径下执行"sbin/start-yarn.sh"命令。

hadoop103

hadoop102

hadoop104

Web端查看YARN的ResourceManager。

  • 1、浏览器中输入:http://hadoop103:8088
  • 2、查看YARN上存储的Job信息(有任务运行的时候才有显示)
  • 集群测试

1、上传文件

  • 创建文件夹
    执行"hadoop fs -mkdir /wcinput"命令,在HDFS的NameNode下新建文件夹wcinput。


  • 上传小文件
    执行"hadoop fs -put wcinput/word.txt /wcinput"命令,将/opt/module/hadoop-3.1.3/wcinput/word.txt文件上传到HDFS的NameNode下新建文件夹wcinput下。


  • 上传大文件
    执行"hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /"命令。

2、上传文件后查看文件存放在什么位置

  • 查看 HDFS 文件存储路径
    执行"/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-171723331-192.168.40.102-1627085800814/current/finalized/subdir0/subdir18"命令。
  • 查看 HDFS 在磁盘存储文件内
    执行"cat blk_1073754824"命令 。

3、拼接

  • 执行"cat blk_1073754825 >> tmp.tar.gz"命令。
  • 执行"cat blk_1073754826 >> tmp.tar.gz"命令。
  • 执行"tar -zxvf tmp.tar.gz"命令解压到当前路径,就是一个jdk1.8.0_212。



4、hadoop具有高可用性,任何一个服务器挂了之后,还有2份副本帮忙存储。

在"http://hadoop102:9870"网页上可以看到"jdk-8u212-linux-x64.tar.gz"文件有3份副本。

hadoop102

hadoop103

hadoop104

5、执行wordcount 程序。

  • 执行"hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /output"命令。注意:输入、输出路径也要是集群的路径。

程序执行完成后,可以来到HDFS查看结果。



执行任务时可以在yarn上看到程序运行的进程。

点击history,出现下面的页面,希望看到运行的历史状态,需要配置历史服务器

九、配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器,具体配置步骤如下:
1、配置mapred-site.xml,执行"vim mapred-site.xml"命令,打开文件添加如下配置:

xml 复制代码
<!-- 历史服务器端地址 -->
<property>
 <name>mapreduce.jobhistory.address</name>
 <value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
 <name>mapreduce.jobhistory.webapp.address</name>
 <value>hadoop102:19888</value>
</property>

2、分发配置到hadoop103、hadoop104上。

  • 执行"xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml"命令。

3、先执行"jps"命令,查看yarn启动了没有,

如果没有启动的话,就先在hadoop103上,执行"sbin/start-yarn.sh"命令启动,

在hadoop102上,执行"mapred --daemon start historyserver"命令,启动历史服务器。



4、查看历史服务器是否启动。

  • 执行"jps"命令。

5、配置完后,测试。

  • 执行"hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput"命令。

点击history,出现下面的页面:

点击logs,出现下面的页面,希望查看具体的日志信息,方便出现bug时候可以定位到具体错误,因此需要配置日志的聚集显示。

十、配置日志的聚集

为了查看程序的运行日志,需要配置一下日志聚集,具体配置步骤如下:
1、配置yarn-site.xml,执行"vim yarn-site.xml"命令打开文件加入如下配置:

xml 复制代码
<!-- 开启日志聚集功能 -->
<property>
 <name>yarn.log-aggregation-enable</name>
 <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property> 
 <name>yarn.log.server.url</name> 
 <value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
 <name>yarn.log-aggregation.retain-seconds</name>
 <value>604800</value>
</property>

2、分发配置到hadoop103、hadoop104。

  • 执行"xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml"命令。

3、因为更改了yarn配置,所以需要关闭重启。

  • 在hadoop102上,执行"mapred --daemon stop historyserver"命令关闭HistoryServer。
  • 在hadoop103上,执行"sbin/stop-yarn.sh"命令,关闭 NodeManager、ResourceManager。
  • 在hadoop103上,执行"sbin/start-yarn.sh"命令,启动 NodeManager、ResourceManager。
  • 在hadoop102上,执行"mapred --daemon start historyserver"命令开启HistoryServer。

4、配置完后,测试。

  • 在$HADOOP_HOME路径下,执行"hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput1"。


十一、集群启动/停止方式总结

  • 方法一:各个模块分开启动/停止(前提是配置ssh)

1、在hadoop102的$HADOOP_HOME路径下,执行 "sbin/start-dfs.sh" / "sbin/stop-dfs.sh" 命令,整体启动/停止HDFS。

2、在hadoop103的$HADOOP_HOME路径下,执行 "sbin/start-yarn.sh" / "sbin/stop-yarn.sh" 命令,整体启动/停止YARN。



  • 方法二:各个服务组件逐一启动/停止

1、在hadoop102的$HADOOP_HOME路径下,执行"bin/hdfs --daemon start/stop namenode/datanode/secondarynamenode"命令,分别启动/停止HDFS组件。

2、在hadoop103的$HADOOP_HOME路径下,执行"bin/yarn --daemon start/stop resourcemanager/nodemanager"命令,启动/停止YARN。

注意: 根据每个集群部署规划在对应的服务器执行启动或者停止命令。

  • 方法三:Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh

1、执行"cd /home/atwqf/bin"命令。

2、执行"vim myhadoop.sh"命令,写入如下内容:

bash 复制代码
#!/bin/bash
if [ $# -lt 1 ]
then
 echo "No Args Input..."
 exit ;
fi
case $1 in
"start")
 echo " =================== 启动 hadoop 集群 ==================="
 echo " --------------- 启动 hdfs ---------------"
 ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
 echo " --------------- 启动 yarn ---------------"
 ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
 echo " --------------- 启动 historyserver ---------------"
 ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start 
historyserver"
;;
"stop")
 echo " =================== 关闭 hadoop 集群 ==================="
 echo " --------------- 关闭 historyserver ---------------"
 ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop 
historyserver"
 echo " --------------- 关闭 yarn ---------------"
 ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
 echo " --------------- 关闭 hdfs ---------------"
 ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
 echo "Input Args Error..."
;;
esac

3、保存后退出,然后执行"chmod +x myhadoop.sh"命令,赋予脚本执行权限。

4、分发脚本到hadoop103、hadoop104服务器上,保证自定义脚本在三台服务器上都可以使用。

  • 执行"xsync /home/atwqf/bin/myhadoop.sh"命令。

hadoop103

hadoop104

5、配置完后,测试。



十二、其他常用脚本

  • 查看三台服务器Java进程脚本

1、执行"cd /home/atwqf/bin"命令。

2、执行"vim jpsall"命令,写入如下内容:

bash 复制代码
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
 echo =============== $host ===============
 ssh $host jps 
done

3、 保存后退出,然后执行"chmod +x jpsall"命令,赋予脚本执行权限。

4、分发脚本到hadoop103、hadoop104服务器上,保证自定义脚本在三台服务器上都可以使用。

  • 执行"xsync /home/atwqf/bin"命令。

hadoop103

hadoop104

5、配置完后,测试。

  • 执行"jpsall"命令,可以查看到所有服务器的jps进程。

十三、集群时间同步

集群时间同步:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步。以hadoop102为时间服务器,hadoop103、hadoop104跟它对齐。

  • 集群时间同步配置

1、在hadoop102上,查看所有节点ntpd服务状态和开机自启动状态。

  • 执行"sudo systemctl status ntpd"命令。
  • 执行"sudo systemctl start ntpd"命令。
  • 执行"sudo systemctl is-enabled ntpd"命令。

2、在hadoop102上,执行" sudo vim /etc/ntp.conf " 命令打开hadoop102的ntp.conf的配置文件,根据下面三点进行修改。

4、在hadoop102 的/etc/sysconfig/ntpd 文件添加"SYNC_HWCLOCK=yes",让硬件时间与系统时间一起同步。

  • 执行"sudo vim /etc/sysconfig/ntpd""命令,添加"SYNC_HWCLOCK=yes"。

5、重新启动 ntpd 服务

  • 执行"sudo systemctl start ntpd"命令。

6、设置 ntpd 服务开机启动

  • 执行"sudo systemctl enable ntpd"命令。

7、其他机器配置(hadoop103、hadoop104)

  • 关闭所有节点上 ntp 服务和自启动
    执行"sudo systemctl stop ntpd"命令。
    执行"sudo systemctl disable ntpd"命令。
    hadoop103

hadoop104

  • 在其他机器(hadoop103、hadoop104)配置 1 分钟与时间服务器同步一次。
    执行"sudo crontab -e"命令。
    编写定时任务如下:
    */1 * * * * /usr/sbin/ntpdate hadoop102
    hadoop103、hadoop104上
  • 修改任意机器时间
    执行" sudo date -s "2024-07-01 11:11:11" "命令。
  • 1 分钟后查看机器是否与时间服务器同步
    执行" sudo date "命令。
    生产环境:如果服务器能连接外网,不需要时间同步,浪费集群性能;如果服务器连接不了外网,需要时间同步。
相关推荐
niu_sama22 分钟前
仿RabbitMQ实现消息队列三种主题的调试及源码
分布式·rabbitmq
鸡c28 分钟前
rabbitMq------客户端模块
分布式·rabbitmq·ruby
CHICX122929 分钟前
【Hadoop】改一下core-site.xml和hdfs-site.xml配置就可以访问Web UI
xml·大数据·hadoop
玉树临风江流儿1 小时前
Linux驱动开发(速记版)--设备模型
linux·驱动开发
Dylanioucn1 小时前
【分布式微服务云原生】探索Redis:数据结构的艺术与科学
数据结构·redis·分布式·缓存·中间件
杰哥在此2 小时前
Python知识点:如何使用Multiprocessing进行并行任务管理
linux·开发语言·python·面试·编程
路上^_^2 小时前
00_概览_kafka
分布式·kafka
枫叶丹44 小时前
【在Linux世界中追寻伟大的One Piece】进程信号
linux·运维·服务器
刻词梨木4 小时前
ubuntu中挂载点内存不足,分配不合理后使用软链接的注意事项
linux·运维·ubuntu
灯火不休ᝰ5 小时前
[win7] win7系统的下载及在虚拟机中详细安装过程(附有下载文件)
linux·运维·服务器