文章目录

  • 一、前提说明
  • 二、准备工作
  • 三、开始
    • 1 安装虚拟机
    • 2 Hadoop运行环境搭建
      • 2.1 ping
      • 2.2 安装软件
      • 2.3 关闭防火墙
      • 2.4 创建普通用户
      • 2.5修改虚拟机IP为静态
      • 2.6 安装hadoop、JDK
    • 3 本地模式运行
    • 4 完全分布式搭建
      • 4.1 克隆之前准备好的虚拟机“node1”
      • 4.2 修改主机名称
      • 4.3 集群分发脚本
      • 4.4 ssh免密连接
      • 4.5 集群配置
        • 4.5.1 配置规划
        • 4.5.2 配置文件
        • 4.5.3 配置core-site.xml
        • 4.5.4 配置hdfs-site.xml
        • 4.5.5 配置yarn-site.xml
        • 4.5.6 配置mapred-site.xml
        • 4.5.7 同步所有虚拟机的配置
        • 4.5.8 群起集群
        • 4.5.9 web端测试
        • 4.5.10 节点客户端测试
      • 4.6 配置历史服务器
      • 4.7 配置日志聚集
      • 4.8 集群启动/停止方式总结
      • 4.9 Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver)
      • 4.10 查看所有主机进程脚本
      • 4.11 集群时间同步

一、前提说明

因为本人在学习Hadoop的时候,因为web端的yarn的resourcemanager无法连接,在试完网上那些解决方法后发现又把自己web端的HDFS给搞得连接不上了。

  1. 主机可以ping各节点
  2. 虚拟机可以ping外网
  3. 防火墙以关闭
  4. 配置也没错

最最重要的是我特么忘记保存快照了!
所以,特此借此机会再配置一次Hadoop分布式集群再熟悉熟悉,并把这篇文章当作笔记使用。

二、准备工作

先准备好:虚拟机、Linux镜像、Hadoop压缩包、远程访问工具。

我用的虚拟机是VMware 16、Linux镜像是CentOS 7、远程访问根据是Xshell与xftp

三、开始

1 安装虚拟机

  1. 先打开VMware,新建虚拟机,选择自定义安装,然后下一步:
  2. 下一步
  3. 选择安装程序映像文件,然后点击浏览找到准备的Linux镜像,然后下一步:
  4. 然后来到命名虚拟机的界面,第一个框输入这个虚拟机的名称,第二个框是选择虚拟机储存的位置,完成后就下一步:
  5. 然后来到处理器配置页面,按照自己电脑的配置来,电脑垃圾就配低点,电脑牛逼就配高点

打开自己电脑的任务管理器,就可以看到自己的处理器是怎样的了(内存也一样):

因为是要配置集群,这边打算配置三个节点(就是三个虚拟机),所以配给这三个虚拟机的资源总和不能高于自己电脑的! ,最好还余下足够自己电脑运行的配置资源。

不是说给虚拟机配置了多少它就会拿走多少,这里的配置只是设置虚拟机的资源上限,就是怕万一那几台虚拟机都把资源占满了弄崩了系统什么的…这里就不细说了。

  1. 这里选第二个,然后下一步

  2. 磁盘容量也是根据自己的电脑配置来的,然后下一步:

  3. 选择Install CentOS 7然后回车(如果要将输入定向到该虚拟机,请在虚拟机内部单机或按Ctrl+G):

  4. 我英文不行,所以选择中文:

  5. 点击软件选择,来到该页面后选择虚拟化主机,这里看个人喜好(如果不适应命令行,可以选择
    GNOME桌面的选项):选择后点击完成

  6. 然后点击网络和主机名,打开网络连接:

  7. 点击安装位置,我选择的是自动分区,虚拟机配置完成后,就点击开始安装
    然后设置ROOt密码,密码越好记越好,毕竟也没人会来入侵我们这种没有任何价值的电脑。
    等待一段时间后就完成了:

  8. 重启后,这个页面是输入用户名,这里我使用root用户:

    再输入密码,这个输入的密码是看不见的,对着键盘按就行了:

    虚拟机安装完成!

  9. 使用命令ifconfig查看当前虚拟机的IP,然后打开远程连接工具Xshell,新建连接,再根据此虚拟机的IP号填入主机(H)框:

因为有些命令太长,Linux终端里不能复制粘贴命令,所以使用远程连接软件会好很多。


15. 再然后选择左边的类别下的用户身份验证,输入用户和密码,这样下次就可以无密码连接了:

16. 这里来个快照,如果后面搞砸了可以使用快照回到这一步
右键VMware里的 虚拟机 --> 快照 --> 快照拍摄


2 Hadoop运行环境搭建

2.1 ping

在配置前需要确定虚拟机可以上网:

进入Xshell后,连接虚拟机,然后输入指令ping baidu.com,用以测试该虚拟机是否能连上外网:(要停止的话按Ctrl+C,强制中断程序)


上图就是可以连接外网,如果不能ping通外网的话建议看看是否操作了“安装虚拟机的第6步和第11步”,

2.2 安装软件

  1. 安装EPEL-Extra Packages for Enterprise Linux
    yum install -y epel-release
    文档
  2. 如果Linux安装的是最小系统版,还需要安装如下工具;如果安装的是Linux桌面标准版,不需要执行 如下操作:
    ① 安装net-tools工具包
    yum install -y net-tools
    ② 安装vim编辑器
    yum install -y vim

2.3 关闭防火墙

关闭防火墙指令:
systemctl stop firewalld

如果需要关闭防火墙开机自启动,可以使用这个指令:
systemctl disable firewalld.service

2.4 创建普通用户

因为root用户的权限太高,可以对Linux做出很多操作,怕万一操作失误把系统弄崩了,所以最好使用普通用户。

  1. 创建新用户:useradd 用户名

  2. 设置新用户的密码:passwd 用户名

    可以看到在/home目录下有了该用户。

  3. 删除用户:userdel -r 用户名,这个命令只能由root用户来执行,所以需要先切换到root用户,然后删除普通用户。

    可以看到/home目录下的hh没了。

  4. 配置用户具有root权限,方便后面执行root权限的命令(这并不代表该用户就是跟root一样了)
    修改/etc/sudoers文件:vim /etc/sudoers

    在上图的位置添加你的用户名 ALL=(ALL) NOPASSWD:ALL

2.5修改虚拟机IP为静态

刚刚出去吃个饭,回来Xshell就连不上虚拟机了,然后不出所料,虚拟机的IP地址变了:

  1. 使用指令:vim /etc/sysconfig/network-scripts/ifcfg-ens33更改该文件的配置

    将BOOTPROTO的值更改为“static”
    再在末尾添加以下参数:
    IPADDR=192.168.10.102
    GATEWAY=192.168.10.2
    DNS1=192.168.10.2
    DNS2=119.29.29.29

    完成后就是这样的:

    TYPE="Ethernet"
    PROXY_METHOD="none"
    BROWSER_ONLY="no"
    BOOTPROTO="static"       #将此处的默认值更改为“static”
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="ens33"
    UUID="d77fea30-c9d2-4407-bfe6-79b8b51d4ccc"
    DEVICE="ens33"
    ONBOOT="yes"#  添加下面的键值
    IPADDR=192.168.10.111
    GATEWAY=192.168.10.2
    DNS1=192.168.10.2
    DNS2=8.8.8.8
    
  2. 查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8

子网IP:192.168.10.0
子网掩码:255.255.255.0

然后点击NAT设置,将网关IP设置为192.168.10.2
这样就OK了。

3. 查看Windows系统适配器VMware Network Adapter VMnet8的IP地址
保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。


2.6 安装hadoop、JDK

在 /opt目录下创建module、software目录,并修改所属主和所属组:

  • 创建目录指令:mkdir 目录名
    (因为截图太麻烦了,所以就复制粘贴控制台)
[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir module
[root@localhost opt]# mkdir software
[root@localhost opt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 4月  18 19:58 module
drwxr-xr-x. 2 root root 6 10月 31 2018 rh
drwxr-xr-x. 2 root root 6 4月  18 19:58 software
[root@localhost opt]#

module目录

用来储存应用程序

software目录

用来储存应用程序的安装包

  • 修改module、software文件夹的所有者和所属组均为hh
    指令:chown hh:hh 目录地址
[@localhost opt]# chown hh:hh ./module
[root@localhost opt]# chown hh:hh ./software
[root@localhost opt]# ll
总用量 0
drwxr-xr-x. 2 hh   hh   6 4月  18 19:58 module
drwxr-xr-x. 2 root root 6 10月 31 2018 rh
drwxr-xr-x. 2 hh   hh   6 4月  18 19:58 software
  • 切换用户,使用普通用户进行接下来的操作
    指令:su 用户名

  • 安装JDK(注意:安装JDK前,一定确保提前删除了虚拟机自带的JDK。)

    1. 用XShell传输工具将JDK导入到opt目录下面的software文件夹下面

      完成后来到/opt/software/目录下,使用指令ll查看该目录下是否有JDK的压缩包

      [hh@192 software]# cd /opt/software/
      [hh@192 software]# ll
      总用量 219548
      -rw-r--r--. 1 hh hh  29800905 4月  18 21:00 hadoop-3.1.3-src.tar.gz
      -rw-r--r--. 1 hh hh 195013152 4月  18 21:00 jdk-8u212-linux-x64.tar.gz
      [root@192 software]#
      
    2. 解压JDK到/opt/module/目录下
      指令:tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

    3. 配置JDK环境变量,在/etc/profile.d/ 创建文件my_env.sh用来储存自己的配置参数
      指令:vim /etc/profile.d/my_env.sh

      创建完成后在该文件里添加以下内容:

      #JAVA_HOME
      export JAVA_HOME=/opt/module/jdk1.8.0_212
      export PATH=$PATH:$JAVA_HOME/bin
      
    4. 让新的环境变量PATH生效
      指令:source /etc/profile

    5. 测试JDK是否安装成功
      指令:java -version

      [hh@192 ~]# source /etc/profile
      [hh@192 ~]# 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)
      [hh@192 ~]#
      
  • 安装Hadoop

    1. 用XShell文件传输工具将hadoop-3.1.3.tar.gz导入到opt目录下面的software文件夹下面

    2. 完成后来到/opt/software/目录下,使用指令ll查看该目录下是否有Hadoop的压缩包

    3. 解压到 /opt/module/ 目录下:tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

    4. 查看是否解压完成:ls /opt/module/

    5. 将Hadoop添加到环境变量
      打开/etc/profile.d/my_env.sh文件:sudo 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
      测试是否安装成功:hadoop version

      [hh@192 module]$ sudo vim /etc/profile.d/my_env.sh
      [hh@192 module]$ source /etc/profile
      [hh@192 module]$ hadoop version
      Hadoop 3.1.3
      Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579
      Compiled by ztang on 2019-09-12T02:47Z
      Compiled with protoc 2.5.0
      From source with checksum ec785077c385118ac91aadde5ec9799
      This command was run using /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar
      

3 本地模式运行

  1. 来到 /opt/module/hadoop-3.1.3/ 目录下:
    创建一个test文件夹:mkdir test
  2. 在test目录下创建一个文件 word.txt,在里面写入:
    apple apple
    banana dog
    dog apple
    cat
    

    保存后退出,回到/opt/module/hadoop-3.1.3/ 目录下,执行Hadoop命令:

    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount test WCoutput
    

    统计test文件里的每个单词
    这个jar文件是Hadoop里统计每个单词出现的数量的程序,在后面学MapReduce会详细学到。

  3. 在刚刚创建test目录时,hadoop-3.1.3目录下是没有WCoutput目录的:
    [hh@192 module]$ cd /opt/module/hadoop-3.1.3/
    [hh@192 hadoop-3.1.3]$ mkdir test
    [hh@192 hadoop-3.1.3]$ ls
    bin  etc  include  lib  libexec  LICENSE.txt  NOTICE.txt  README.txt  sbin  share  test
    

    在执行完统计单词出现次数的命令后,hadoop-3.1.3目录下就多出个 WCoutput目录了:

    [hh@192 hadoop-3.1.3]$ ls
    bin  etc  include  lib  libexec  LICENSE.txt  NOTICE.txt  README.txt  sbin  share  test  WCoutput
    

    进入到WCoutput目录下,查看输出的统计文件part-r-00000的内容

    [hh@192 hadoop-3.1.3]$ cd WCoutput
    [hh@192 WCoutput]$ ls
    part-r-00000  _SUCCESS
    [hh@192 WCoutput]$ cat part-r-00000
    apple   3
    banana  1
    cat 1
    dog 2
    [hh@192 WCoutput]$
    

    apple出现了3次、banana出现了1次、cat出现了一次、dog出现了2次


4 完全分布式搭建

4.1 克隆之前准备好的虚拟机“node1”

步骤:右击node1 --> 管理 --> 克隆(在克隆前记得将虚拟机关闭)–> 创建完整克隆

而至于为什么要准备多台虚拟机,我认为读一下《Hadoop权威指南 4》的 第一章:初识Hadoop 即可做大致的了解。

4.2 修改主机名称

在各个虚拟机的终端里输入命令hostnameifconfig,来查看本机的主机名和地址,但是可以发现,这三个虚拟机的主机名和IP地址是一样的。

所以要将他们的主机名和IP地址更改为不同以避免后面操作的冲突:

  1. 修改配置文件 /etc/hostname

    使用命令vim /etc/hostname,然后将该主机的旧名字清空,再写入新名字,保存退出即可。
    node1、node2、node3都执行一次

    我是将第一个虚拟机的主机名称设置为了node1,第二个设置为了node2,第三个node3

  2. 修改那两个克隆机的IP地址
    使用命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33
    来到设置静态地址的地方,只要将文件中,IPADDR参数后的值改为需要的IP地址然后保存退出即可。
    我的三个虚拟机分别是:



    然后重启各虚拟机,再查看一下主机名称和地址是否都更改为自己设置的了。

4.3 集群分发脚本

用Xshell连接各虚拟机,默认使用普通用户登陆,如果需要root权限修改配置的话使用su root命令即可。

#!/bin/bash#1. 判断参数个数
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fi#2. 遍历集群所有机器,机器名就是自己配置的各个虚拟机的主机名
for host in 主机名1 主机名2 主机名3
doecho ====================  $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:$pdirelseecho $file does not exists!fidone
done

以上shell脚本的作用是可以将本节点(本地主机)的文件的修改和添加同步到另外两个节点(另外两个虚拟机)。

不过在此之前,需要先配置主机映射 /etc/hosts

  1. 使用命令:vim /etc/hosts
    在文件末尾添加:

    192.168.10.111 node1
    192.168.10.112 node2
    192.168.10.113 node3
    

    前面的是IP地址,后面跟着是对应的主机名(记得保存)。
    完成后是这样的:

  2. 在普通用户的家目录下创建一个 bin目录,用来储存脚本程序
    命令:mkdir /home/hh/bin/

    创建完目录后,进入bin目录,创建脚本文件 xsync
    命令:vim xsync
    然后将上方的代码复制粘贴进编辑页面处即可。(提醒:注意在粘贴前先让vim进入插入模式,有Linux基础的应该都清楚

    添加可执行权限:chmod +x xsync

注意:一定一定要配置好主机映射文件,如果没配置不仅这个脚本没有用,而且后面集群都开启不了。

  1. 使用脚本
    这时,我一直操作的都是node1,另外两个节点是没有这个/home/hh/bin目录和这个脚本文件的。



    将 /home/hh/bin 目录与其它节点同步: xsync /home/hh/bin/
    然后根据出现的提示输入对应的值即可。

    hh@node1’s password: — 就是输入honde1节点中用户hh的密码
    Are you sure you want to continue connecting (yes/no)? — 输入yes或者no,yes继续,no中断。

    完成后看看其它节点上的 /hmoe/hh 目录下是否也有了bin目录,bin目录里是否也有了xsunc脚本。

    如果想的话可以将脚本复制到/bin中,以便全局调用:sudo cp /home/hh/bin/xsync /bin/
    然后同步环境配置:sudo ./bin/xsync /etc/profile.d/my_env.sh
    最后每个节点都执行命令source /etc/profile让环境生效

(八千多字了,还没搞完,歇会)

4.4 ssh免密连接

  1. ssh连接
    命令:ssh 需要连接的主机IP
    例如:

    当然,配置了主机映射是可以直接使用主机名的:ssh 主机名

    [hh@node1 ~]$ ssh node2
    hh@node2's password:
    Last login: Tue Apr 19 14:39:50 2022 from node1
    [hh@node2 ~]$ hostname
    node2
    [hh@node2 ~]$ exit
    登出
    Connection to node2 closed.
    [hh@node1 ~]$
    
  2. 配置免密连接
    来到 /home/hh/.ssh目录下,使用命令ssh-keygen -t rsa生产公钥和私钥

    如图:id_rsa是私钥,id_rsa.pub是公钥

    然后再将公钥拷贝到所有虚拟机上,这样才能免密连接其它主机(私钥不要乱给别人):

    ssh-copy-id node1
    ssh-copy-id node2
    ssh-copy-id node3
    

    然后根据提示输入相应的值就行,然后试试用node1看看能不能免密连接node3:

    [hh@node1 .ssh]$ ssh node3
    Last login: Tue Apr 19 14:36:41 2022 from 192.168.10.15
    [hh@node3 ~]$
    

    完成!

    但这只是普通用户hh可以免密连接其它机器而已,如果想让root也免密则就需要使用root用户也操作一边。

    #第一步:先来到该目录
    cd /root/.ssh第二步:生产密钥和公钥
    ssh-keygen -t rsa#第三步:将公钥拷贝到所有虚拟机上
    ssh-copy-id node1
    ssh-copy-id node2
    ssh-copy-id node3
    

注意:以上的免密操作在node1配置完后,在node2、node3也都要配置一边,以达到三个机器之间可以互相免密连接。

4.5 集群配置

Hadoop框架中主要由三大组件组成:

  1. HDFS
  2. Yarn
  3. MapReduce
  • HDFS

    HDFS是Hadoop框架中的分布式文件系统,用于存储文件数据,通过目录树来定位文件。

  • Yarn

    Hadoop集群中的资源调度器,主要作用是给运算任务分配运算资源。

  • MapReduce

    MapReduce是一个分布式运算程序的编程框架,简单来说作用是用来处理计算文件数据。

当然,我只是提一下这些组件,毕竟这篇文章只是环境配置记录。

4.5.1 配置规划

node1 node2 node3
HDFS NameNode(nn)
DataNode
DataNode SecondaryNameNode(2nn)
DataNode
Yarn NodeManager ResourceManager
NodeManager
NodeManager
因为穷啊!不得已让每个节点都当DataNode,
注意:NameNode不能和SecondaryNameNode配在一起,不然SecondaryNameNode的作用就无效了。

4.5.2 配置文件

既然来到这里,就不得不说明一下Hadoop中各个目录所储存的文件类型了:

[hh@node1 hadoop]$ cd /opt/module/hadoop-3.1.3/
[hh@node1 hadoop-3.1.3]$ ll
总用量 176
drwxr-xr-x. 2 hh hh    183 9月  12 2019 bin
drwxr-xr-x. 3 hh hh     20 9月  12 2019 etc
drwxr-xr-x. 2 hh hh    106 9月  12 2019 include
drwxr-xr-x. 3 hh hh     20 9月  12 2019 lib
drwxr-xr-x. 4 hh hh    288 9月  12 2019 libexec
-rw-rw-r--. 1 hh hh 147145 9月   4 2019 LICENSE.txt
-rw-rw-r--. 1 hh hh  21867 9月   4 2019 NOTICE.txt
-rw-rw-r--. 1 hh hh   1366 9月   4 2019 README.txt
drwxr-xr-x. 3 hh hh   4096 9月  12 2019 sbin
drwxr-xr-x. 4 hh hh     31 9月  12 2019 share
drwxrwxr-x. 2 hh hh     22 4月  18 21:44 test
drwxr-xr-x. 2 hh hh     88 4月  18 21:50 WCoutput
[hh@node1 hadoop-3.1.3]$
  • bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
  • etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
  • lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
  • sbin目录:存放启动或停止Hadoop相关服务的脚本
  • share目录:存放Hadoop的依赖jar包、文档、和官方案例

因此,要配置Hadoop集群,就应该来到etc目录下:

[hh@node1 hadoop-3.1.3]$ cd etc
[hh@node1 etc]$ ls
hadoop
[hh@node1 etc]$ cd hadoop
[hh@node1 hadoop]$ ls
capacity-scheduler.xml            httpfs-log4j.properties     mapred-site.xml
configuration.xsl                 httpfs-signature.secret     shellprofile.d
container-executor.cfg            httpfs-site.xml             ssl-client.xml.example
core-site.xml                     kms-acls.xml                ssl-server.xml.example
hadoop-env.cmd                    kms-env.sh                  user_ec_policies.xml.template
hadoop-env.sh                     kms-log4j.properties        workers
hadoop-metrics2.properties        kms-site.xml                yarn-env.cmd
hadoop-policy.xml                 log4j.properties            yarn-env.sh
hadoop-user-functions.sh.example  mapred-env.cmd              yarnservice-log4j.properties
hdfs-site.xml                     mapred-env.sh               yarn-site.xml
httpfs-env.sh                     mapred-queues.xml.template
[hh@node1 hadoop]$

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

  • 自定义配置文件如下
    core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml

  • 默认的配置文件如下:
    core-default.xml、hdfs-default.xml、yarn-default.xml、mapred-default.xml
    默认配置文件文件存放在Hadoop的jar包中的位置,如果想看可以上这些位置看:

/opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar/core-default.xml
/opt/module/hadoop-3.1.3/share/hadoop/hdfs/hadoop-hdfs-3.1.3.jar/hdfs-default.xml
/opt/module/hadoop-3.1.3/share/hadoop/yarn/hadoop-yarn-common-3.1.3.jar/yarn-default.xml
/opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

4.5.3 配置core-site.xml

注意:当前目录位置是:/opt/module/hadoop-3.1.3/etc/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>/opt/module/hadoop-3.1.3/data</value></property><!-- 配置HDFS网页登录使用的静态用户为hh --><property><name>hadoop.http.staticuser.user</name><value>hh</value></property>

我的是这样的:

4.5.4 配置hdfs-site.xml

使用命令: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>

我的是这样的:

4.5.5 配置yarn-site.xml

使用命令:vim 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>

我的:

4.5.6 配置mapred-site.xml

更改配置文件:vim mapred-site.xml
插入:

<!-- 指定MapReduce程序运行在Yarn上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property>

我的:

4.5.7 同步所有虚拟机的配置

  • 因为刚刚我只是在node1上完成配置文件的修改了,但是另外两个主机还是默认的,所以这里就可以用到之前编写的集群分发脚本:
    xsync /opt/module/hadoop-3.1.3/etc/hadoop/ 意为:同步所有虚拟机上该位置的文件

然后查看一下另外两个虚拟机上的配置文件是否跟node1一样了:

  • nod2:

    [hh@node2 ~]$ cd /opt/module/hadoop-3.1.3/etc/hadoop/
    [hh@node2 hadoop]$ vim yarn-site.xml
    

  • node3:
[hh@node3 ~]$ cd /opt/module/hadoop-3.1.3/etc/hadoop/
[hh@node3 hadoop]$ vim hdfs-site.xml

4.5.8 群起集群

  1. 先配置workers:vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
    粘贴一下内容:
node1
node2
node3

分别是三个主机的名称。

  1. 同步配置文件workers:xsync /opt/module/hadoop-3.1.3/etc
  2. 启动集群
    注意:此时,我是在/opt/module/hadoop-3.1.3路径下,使用普通用户nn来操作的;
    如果集群是第一次启动,需要在node1虚拟机处格式化NameNode:hdfs namenode -format
    启动HDFS(node1):sbin/start-dfs.sh
    启动YARN(node2):sbin/start-yarn.sh
    关闭所有:sbin/stop-all.sh
    查看程序进程(可以查看当前节点上的组件是否成功开启):jps
  3. Web端查看HDFS的NameNode(主节点)和YARN的ResourceManager
    nn:http://node1:9870
    rm:http://node2:8088
    看图:

4.5.9 web端测试

来到web端的HDFS,点击最右边的Utilities,然后点击Browse the file system

就会来到这个页面:

这就是hadoop的分布式文件系统的具象化(反正我觉得HDFS挺抽象的),可以在这个页面上操作文件数据。
譬如,上传本地(Windows电脑)的文件:

选择要上传的文件,然后点击Upload即可,如果没反应就刷新一下

4.5.10 节点客户端测试

来到主机node1,使用命令:hadoop fs -mkdir /input,在集群上创建目录input

上传虚拟机里的jdk安装包到HDFS的 /inpu 目录里去:
hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /input

想要了解更多操作命令可以去Apache Hadoop的官网。

4.6 配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。
来到主机node1。

  • 配置mapred-site.xml
    命令:vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.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>
    

    我的是这样的:

    然后同步配置:xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
    再是开启历史服务器:mr-jobhistory-daemon.sh start historyserver
    使用jps指令查看组件是否成功开启:

    [hh@node1 ~]$ jps
    11074 Jps
    11012 JobHistoryServer      <--- 这个就是
    9237 DataNode
    9529 NodeManager
    9082 NameNode
    
  • 查看web端jobhistory
    http://node1:19888/jobhistory

4.7 配置日志聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
来到node1。

  • 配置yarn-site.xml
    使用命令:vim /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml
  1. 插入配置参数:
 <!-- 开启日志聚集功能 -->
<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>
  1. 我的是这样的:

  2. 然后同步配置:xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

还记得之前本地模式运行的word.txt文件吗?它在 /opt/module/hadoop-3.1.3/test目录里,里面的内容是:

apple apple
banana dog
dog apple
cat
  1. 这次将该文件上传到集群中的 /input 目录中去:
[hh@node1 test]$ hadoop fs -put /opt/module/hadoop-3.1.3/test/word.txt /input

然后可以看到web端的HDFS上的 /input 目录多出了个 word.txt文件:

5. 然后执行WordCount程序,统计该文件里每个单词出现的次数:

[hh@node1 test]$ cd /opt/module/hadoop-3.1.3/
[hh@node1 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input/word.txt /output

第一行是来到hadoop-3.1.3目录下,第二命令是执行WordCount程序,将集群中的/input/word.txt文件里的单词统计结果放到 /output 目录里。

  1. 可以看到HDFS里多出了 /output目录,下面00000结尾的文件就是储存的结果

  2. 查看历史服务地址:http://node1:19888/jobhistory
    多出了一条记录,这就是刚刚统计单词的程序的记录:

    这就是详细信息:

4.8 集群启动/停止方式总结

  1. 整体启动/停止HDFS
    start-dfs.sh/stop-dfs.sh
  2. 整体启动/停止YARN
    start-yarn.sh/stop-yarn.sh
  3. 分别启动/停止HDFS组件
    hdfs --daemon start/stop namenode/datanode/secondarynamenode
  4. 启动/停止YARN
    yarn --daemon start/stop resourcemanager/nodemanager

4.9 Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver)

  • 脚本代码:主要作用说在一台主机上就能将所有的组件开启,不用去其它主机上开启各个组件
#!/bin/bashif [ $# -lt 1 ]
thenecho "No Args Input..."exit ;
ficase $1 in
"start")echo " =================== 启动 hadoop集群 ==================="echo " --------------- 启动 hdfs ---------------"ssh node1 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"echo " --------------- 启动 yarn ---------------"ssh node2 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"echo " --------------- 启动 historyserver ---------------"ssh node1 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")echo " =================== 关闭 hadoop集群 ==================="echo " --------------- 关闭 historyserver ---------------"ssh node1 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"echo " --------------- 关闭 yarn ---------------"ssh node2 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"echo " --------------- 关闭 hdfs ---------------"ssh node1 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)echo "Input Args Error..."
;;
esac
  • 脚本指令:
    启动集群(启动集群上各个节点的所有组件):myhadoop.sh start
    关闭集群(关闭集群上各个节点的所有组件):myhadoop.sh stop

  • 操作步骤:

[hh@node1 bin]$ cd /home/hh/bin
[hh@node1 bin]$ vim myhadoop.sh
[hh@node1 bin]$ chmod +x myhadoop.sh
[hh@node1 bin]$ myhadoop.sh stop=================== 关闭 hadoop集群 ===================--------------- 关闭 historyserver ------------------------------ 关闭 yarn ---------------
Stopping nodemanagers
node1: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
node3: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
Stopping resourcemanager--------------- 关闭 hdfs ---------------
Stopping namenodes on [node1]
Stopping datanodes
Stopping secondary namenodes [node3]
[hh@node1 bin]$ jps
12987 Jps
[hh@node1 bin]$ myhadoop.sh start=================== 启动 hadoop集群 ===================--------------- 启动 hdfs ---------------
Starting namenodes on [node1]
Starting datanodes
Starting secondary namenodes [node3]--------------- 启动 yarn ---------------
Starting resourcemanager
Starting nodemanagers--------------- 启动 historyserver ---------------[hh@node1 bin]$ jps
13874 JobHistoryServer
13399 DataNode
13241 NameNode
13690 NodeManager
13947 Jps
[hh@node1 bin]$

4.10 查看所有主机进程脚本

代码如下:主要作用是只在一台主机上使用该脚本就能看到所有主机里的程序进程

#!/bin/bashfor host in hadoop102 hadoop103 hadoop104
doecho =============== $host ===============ssh $host jps
done

步骤:

[hh@node1 bin]$ vim jpsall
[hh@node1 bin]$ chmod +x jpsall
[hh@node1 bin]$ jpsall
=============== node1 ===============
1879 Jps
=============== node2 ===============
1881 Jps
=============== node3 ===============
1863 Jps
[hh@node1 bin]$

4.11 集群时间同步

将其它所有节点的时间与NameNode同步,NameNode是几点其它节点的时间也要是几点。
提示:时间服务器配置必须root用户。

  1. 先查看所有节点ntpd服务状态和开机自启动状态
    查看状态:systemctl status ntpd
    开启服务:systemctl start ntpd
    开机启动:systemctl is-enabled ntpd
    如果输入指令发生以下错误,可能是因为没有安装ntp,因此需要先在各个节点安装ntp服务:

    安装ntp:yum -y install ntp

  2. 如图所示,这样才是开启了ntpd服务

  3. 修改node1(NameNode所在的那个节点)的ntp.conf配置文件
    授权192.168.10.0-192.168.10.255网段上的所有机器可以从这台机器上查询和同步时间:
    先使用指令:vim /etc/ntp.conf,来到配置文件里;
    然后将:

    以下字段的注释号(#)去掉:
    #restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap   将以下字段全部注释起来(添加 # ):
    server 0.centos.pool.ntp.org iburst
    server 1.centos.pool.ntp.org iburst
    server 2.centos.pool.ntp.org iburst
    server 3.centos.pool.ntp.org iburst最后将以下字段添加到文件末尾:
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10
    

    如图:原来是这样的

    修改之后是这样的:
    完成后保存退出。

  4. 接着修改node1的 /etc/sysconfig/ntpd 文件
    使用命令vim /etc/sysconfig/ntpd,来到对应的文件下;
    然后添加内容:SYNC_HWCLOCK=yes
    再是重启ntpd服务:systemctl start ntpd
    最后开启ntpd开机自启:systemctl enable ntpd

  5. 关闭除了node1之外的所有节点上ntp服务和自启动
    关闭服务:systemctl stop ntpd
    关闭自启动:systemctl disable ntpd
    node2和node3都要执行一遍。

  6. 配置定时任务:crontab -e
    添加一行字段:*/1 * * * * /usr/sbin/ntpdate hadoop102,保存后退出;

这时就可以更改node2或者node3的时间,测试一下一分钟后他们的时间会不会与node1同步:

node1的时间:可以看到时间是同步的

四、配置完毕
现在我的集群已经弄好了,web端的各组件都可以使用。
不过记得,一定一定要拍快照,不然这从头再配一次是真的难受!

Apache Hadoop3.x 分布式集群配置安装相关推荐

  1. CentOS 7 + Hadoop3 伪分布式集群配置

    转自:https://www.cnblogs.com/thousfeet/p/8618696.html ps:本文的步骤已自实现过一遍,在正文部分避开了旧版教程在新版使用导致出错的内容,因此版本一致的 ...

  2. Linux下Apache与Tomcat的完全分布式集群配置(负载均衡)

    最近公司要给客户提供一套集群方案,项目组采用了Apache和Tomcat的集群配置,用于实现负载均衡的实现. 由于以前没有接触过Apache,因此有些手生,另外在网上搜寻了很多有关这方面的集群文章,但 ...

  3. Hadoop伪分布式集群的安装部署

    Hadoop伪分布式集群的安装部署Hadoop伪分布式集群的安装部署 首先可以为Linux虚拟机搭建起来的最初状态做一个快照,方便后期搭建分布式集群时多台Linux虚拟机的准备. 一.如何为虚拟机做快 ...

  4. 橙子03-Hadoop完全分布式集群配置过程

    Hadoop完全分布式集群配置 完整配置视频可在b站观看hadoop完全分布式集群配置 第一步:安装虚拟机 Linux Centos6.8 64位 Vmware11 第二步:配master的固定IP ...

  5. Hadoop分布式集群的安装与部署实训总结报告

    目录 前言 一.Hadoop平台框介绍 1.Hadoop的架构 2.HDFS:遵循主从架构,它具有以下元素. 2.1 名称节点 -Namenode 2.2 数据节点 - Datanode 2.3 块 ...

  6. Hadoop分布式集群的安装(图解)

    全局统筹 前言 安装前的检查 开始安装虚拟机 Linux的网络配置步骤 虚拟机内部设置 进入虚拟机 安装其他东西 克隆虚拟机 开始搭建分布式集群 集群配置 启动集群 jps查看进程 常见问题 前言 这 ...

  7. hadoop+HBase+ZooKeeper+Hive完全分布式集群部署安装

    本文源自:https://www.cnblogs.com/linxizhifeng/p/7207655.html 1.        系统环境 1.1.   软件版本 下表为本系统环境所安装的软件的版 ...

  8. Hadoop分布式集群配置

    1.三台虚拟机(Centos7.6),配置JDK,HADOOP环境,在搭建虚拟机时,可以先将一台的环境配置,再克隆两台改IP就好.三台虚拟机最小化安装,必须拥有必要的插件 <!--解释--> ...

  9. hadoop单机及完全分布式集群的安装

    1. hadoop 我Hadoop的安装目录为/usr/local/workspace/hadoop 2.hdfs 2.1 单机模式 单机模式即不使用分布式模式,无需启动namenode和datano ...

最新文章

  1. zoj3777(状态压缩)
  2. centos 下端口开放设置
  3. url散列算法原理_如何列出与网站相关的所有URL
  4. Golang go 命令
  5. uefi下的开机顺序_如何访问UEFI或BIOS并进行设置?
  6. ViewDidLoad运行多次的问题
  7. IE8的模式修改优化Windows7
  8. spring boot + nacos多环境部署
  9. redis安装教程(简明扼要,一看就懂)
  10. 从“星空”主题绘画系统出发寻求绘画的可能性
  11. 漂亮有创意的思维导图模板下载教程,教你思维导图怎么画
  12. 复习汇总vue知识点
  13. AIROBOT系统 之 私人存储 和 DLNA 智能电视云
  14. QGIS 3.14|地震数据动画效果实战(一)数据准备篇
  15. 大童保险确认获得投资:德弘资本等出资15亿元,获得约33%股权
  16. 蓝桥杯试题 基础练习 Fibonacci数列
  17. 网上搜索电子书的办法
  18. Property description must be an object
  19. 计算机的显卡功能,电脑怎么看显卡参数 显卡有什么作用
  20. john the ripper 使用

热门文章

  1. 不能bostype没有元数据异常_金蝶EAS_BOS工作笔记
  2. Kubernetes Deployment控制器(二十)
  3. 大数据Kylin(三):Kylin配置
  4. Google Earth Engine(GEE) 01-中输入提示快捷键Ctrl+space无法使用的问题
  5. python 警告:simplify chained comparison
  6. 基于SSM框架的百度人脸识别
  7. Linux设备驱动开发详解【三】_Linux 内核及内核编程
  8. 用U盘在虚拟机中装Linux系统
  9. CIFAR彩色图像分类数据集
  10. 微信自定义菜单java_Java微信公众平台开发(九)--微信自定义菜单的创建实现