Hadoop 完全分布式运行模式搭建--初学者版本

2.完全分布式运行模式(开发重点)

Hadoop 官方网站
Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式。

  • 本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。测试用。
  • 伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模 拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
  • 完全分布式模式:多台服务器组成分布式环境。生产环境使用。

2.1.准备虚拟机

详情见:[Hadoop 运行环境搭建](#Hadoop 运行环境搭建)

2.2.编写集群分发脚本 xsync

scp(secure copy)安全拷贝(适用于第一次复制)

scp 可以实现服务器与服务器之间的数据拷贝

  • 语法

    scp -r $pdir/$fname $user@$host:$pdir/$fname 
    命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
    
  • 将102服务器上的JDK和hadoop拷贝到103,104服务器上,前提在 hadoop102、hadoop103、hadoop104 都已经创建好的 /opt/module,/opt/software 两个目录,并且已经把这两个目录修改为 ola:ola

    • 在 hadoop102 上, 将 hadoop102 中 /opt/module/jdk1.8.0_212 目录拷贝到 hadoop103 上

      [ola@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 ola@hadoop103:/opt/module
      
    • 在 hadoop103 上, 将 hadoop102 中 /opt/module/hadoop-3.1.3 目录拷贝到 hadoop103 上

      [ola@hadoop103 ~]$ scp -r ola@haoop102:/opt/module/hadoop-3.1.3 /opt/module
      
    • 在 hadoop103 上操作,将 hadoop102 中/opt/module 目录下 hadoop104 上

      [ola@hadoop104 ~]$ scp -r ola@hadoop102:/opt/module/jdk1.8.0_212 ola@hadoop104:/opt/module
      [ola@hadoop104 ~]$ scp -r ola@hadoop102:/opt/module/hadoop-3.1.3 ola@hadoop104:/opt/module
      

rsync 远程同步工具(第一次复制后,同步更改)

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。

  • 语法

    rsync -av $pdir/$fname $user@$host:$pdir/$fname 
    命令 选项参数 选项参数说明 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
    
    选项功能
    -a归档拷贝
    -v显示复制过程

xsync 集群分发脚本(运行脚本,自动实现集群分发)

执行没有放在环境变量里的命令,需要写全路径,比如 home/ola/bin/xsync,而不能单独使用xsync,除非在home/ola/bin目录下面。

像ll,ls,mkdir这样的命令可以全局使用,是因为已经在根目录/bin下了

  • 本质:利用rsync 命令,在脚本中实现循环复制文件到所有节点的相同目录下

  • 原理:在/home/ola/bin目录下面,写一个命令脚本xsync,然后将这个命令路径放在/bin/下面

  • 实现方式

    • 第一步,编写脚本,放在/home/ola/bin目录中,文件叫xsycn,没有任何后缀,脚本命令是:在hadoop102 hadoop103 hadoop104中执行rsync,同步文档

      #!/bin/bash
      
      #1. 判断参数个数
      if [ $# -lt 1 ]
      then
          echo Not Enough Argument!
          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
      
    • 第二步,测试脚本

      #测试脚本,将/home/ola/bin复制到102,103,104中
      [ola@hadoop102 bin]$ xsync /home/ola/bin
      -bash: /home/ola/bin/xsync: 权限不够
      #修改脚本 xsync 具有执行权限
      [ola@hadoop102 bin]$ chmod +x xsync
      #再次测试脚本
      [ola@hadoop102 bin]$ xsync /home/ola/bin
      
    • 第三步,同步/etc/profile.d/my_env.sh(root 所有者),注意:如果用了 sudo,那么 xsync命令 一定要给它的路径补全。

      [ola@hadoop102 ~]$ sudo /home/ola/bin/xsync /etc/profile.d/my_env.sh
      
    • 现在my_env.sh已经在103,104中了,执行source /etc/profile让环境变量生效

      [ola@hadoop103 ~]$ source /etc/profile
      [ola@hadoop104 ~]$ source /etc/profile
      

2.3.配置SSH 无密登录

  • 什么是 ssh(Secure Shell) ,ssh可以实现一台服务器登录另一台服务器

    • 基本语法:ssh 另一台电脑的 IP 地址,例如 ssh ola@198.162.109.129
  • 无密钥配置,实现免密登录其他服务器

    • 原理,将公钥发给谁,就可以免密登录谁(用自己的公钥换登录别人自由)

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 实现hadoop102免密登录103

      • 第一步,在102上,找到隐藏文件夹.ssh

        在102服务器上执行过ssh命令登录103,会在102和103的用户目录(我的是/home/ola)下生成.ssh文件夹,是隐藏目录,可以通过下面方式查看到

        [ola@hadoop102 ~]$ ls -al
        总用量 20
        drwx------. 4 ola  ola   122 322 21:26 .
        drwxr-xr-x. 3 root root   17 322 17:49 ..
        -rw-------. 1 ola  ola   873 322 21:26 .bash_history
        -rw-r--r--. 1 ola  ola    18 41 2020 .bash_logout
        -rw-r--r--. 1 ola  ola   193 41 2020 .bash_profile
        -rw-r--r--. 1 ola  ola   231 41 2020 .bashrc
        drwxrwxr-x. 2 ola  ola    19 322 21:05 bin
        drwx------. 2 ola  ola    25 322 19:50 .ssh
        -rw-------. 1 ola  ola  3494 322 21:05 .viminfo
        
        • .ssh 文件夹下(~/.ssh)的文件功能解释

        • 当102服务器第一次登录103服务器时,只有102服务器(客户端)的known_hosts文件可能会发生变化(添加103服务器的公钥),而103服务器的known_hosts文件不会受到影响

        • 文件名称用途如何生成
          known_hosts* 我访问过谁
          记录访问过的计算机的公钥
          * 通过ssh生成
          * 前提:102和103都没访问过对方
          102初次访问103,会生成known_hosts里面存上103的公钥;103不会生成任何文件
          id_rsa* 我的私钥通过:ssh-keygen -t rsa 生成
          id_rsa.pub* 我的公钥通过:ssh-keygen -t rsa 生成
          authorized_keys* 谁可以免密登录我
          存放授权过的无密登录服务器公钥
          免密配置后自动生成
      • 第二步,在102上,给102生成公钥和私钥的2个文件夹(在.ssh文件夹下)

        #进入.ssh
        [ola@hadoop102 ~]$ cd .ssh/
        #生成id_rsa.pub,id_rsa,三次回车!!!
        [ola@hadoop102 .ssh]$ ssh-keygen -t rsa
        Generating public/private rsa key pair.
        Enter file in which to save the key (/home/ola/.ssh/id_rsa):
        Enter passphrase (empty for no passphrase):
        Enter same passphrase again:
        Your identification has been saved in /home/ola/.ssh/id_rsa.
        Your public key has been saved in /home/ola/.ssh/id_rsa.pub.
        The key fingerprint is:
        SHA256:I/+8Oly+wx+ycT60jn6aQUrYSYWJNZbPeNtRg9jNSho ola@hadoop102
        The key's randomart image is:
        +---[RSA 2048]----+
        |       o++.o +   |
        |      ..+oE + =  |
        |        .+ + o . |
        |       +..= o    |
        |      o S..o .   |
        |       + +o o    |
        |       .o++.o.   |
        |        oo+X+.   |
        |        .+@O+.   |
        +----[SHA256]-----+
        
      • 第三步,在102上,将id_rsa.pub中的公钥拷贝到103上(在.ssh文件夹下)

      • 完成操作后,103上会生成一个文件authorized_keys,存放授权过的无密登录服务器102的公钥

        [ola@hadoop102 .ssh]$ ssh-copy-id hadoop103
        /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ola/.ssh/id_rsa.pub"
        /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
        /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
        ola@hadoop103's password:
        
        Number of key(s) added: 1
        
        Now try logging into the machine, with:   "ssh 'hadoop103'"
        and check to make sure that only the key(s) you wanted were added.
        

        成功!!以后在102上执行ssh hadoop103可以不用再输入密码了!!

      还可以通过相同的方式,实现在102上免密登录104,以及102自己(如果没有配置免密,自己登录自己也需要输入密码。至于为啥要设置自己,可能是以免在执行脚本的时候,需要在102上登录102,例如xsync);104免密登录102,103同上;103免密登录102,104同上。

2.4.配置集群HDFS、Yarn、MapReduce

即将见到完整的Hadoop!!!

2.4.1.先了解一下HDFS

Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • NameNode–存储元数据,集群只有一个,在core-*.xml中配置

    存储文件的元数据, 如文件名,文件目录结构, 文件属性(生成时间、副本数、 文件权限),以及每个文件的块列表和块所在的DataNode等。

  • DataNode–存储实际数据,集群存在多个,每个服务器一个

    在本地文件系统存储文件块数据,以及块数据的校验和。

  • 2NN(SecondaryNameNode)–备份NameNode,集群只有一个,在hdfs-*.xml配置

    每隔一段时间对NameNode元数据备份。

2.4.2.部署规划

NameNode和SecondaryNameNode不要安装在同一台服务器

ResourceManager不要和NameNode、SecondaryNameNode配置在同一台机器上,因为它很消耗内存

方案:

hadoop102hadoop103hadoop104
HDFSNameNode
DataNode

DataNode
SecondaryNameNode
DataNode
YARN
NodeManager
ResourceManager
NodeManager

NodeManager
  • Hadoop配置文件说明,如果没有特殊需求,不需要更改自定义配置文件

    • 默认配置文件

      • 位置:存放在Hadoop的jar包中的位置–???具体在哪里我也没搞清楚

        要获取的默认文件文件存放在Hadoop的jar包中的位置
        core-default.xmlhadoop-common-3.1.3.jar/core-default.xml
        hdfs-default.xmlhadoop-hdfs-3.1.3.jar/hdfs-default.xml
        yarn-default.xmlhadoop-yarn-common-3.1.3.jar/yarn-default.xml
        mapred-default.xmlhadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml
    • 自定义配置文件

      • 存放位置:存放在 H A D O O P H O M E / e t c / h a d o o p ,关于 HADOOP_HOME/etc/hadoop,关于 HADOOPHOME/etc/hadoop,关于HADOOP_HOME地址,上面安装hadoop时已经定义好了,包括core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml这四个文件,可以根据项目需求重新进行修改配置

2.4.3.在102上正式配置

总结:
core-site.xml,hdfs-site.xml---->配置HDFS
yarn-site.xml---->配置yarn
mapred-site.xml---->配置MapReduce

  • core-site.xml–配置NameNode、DataNode,102

    [ola@hadoop102 .ssh]$ cd $HADOOP_HOME/etc/hadoop
    [ola@hadoop102 hadoop]$ vim core-site.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>
    </configuration>
    
  • hdfs-site.xml–NameNode和2NN的web端访问地址,102,104

    [ola@hadoop102 hadoop]$ vim hdfs-site.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-site.xml–指定ResourceManager的地址,103

    [ola@hadoop102 hadoop]$ vim yarn-site.xml
    

    文档内容

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <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_MAPRED_HOME</value>
        </property>
    </configuration>
    
  • mapred-site.xml–指定MapReduce程序运行在Yarn上

    [ola@hadoop102 hadoop]$ vim mapred-site.xml
    

    文档内容

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
    	<!-- 指定MapReduce程序运行在Yarn上 -->
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    

2.4.4.在集群上分发配置好的102Hadoop配置文件

[ola@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/

2.4.5.去103和104上查看文件分发情况

[ola@hadoop103 .ssh]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml
[ola@hadoop104 etc]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml

2.5.群起集群

2.5.1.配置workers

  • 第一步:在102下配置workers文档

    [ola@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
    

​ 把原文中的localhost删除,增加下面内容,该文件中添加的内容结尾不允许有空格,文 件中不允许有空行:
​ hadoop102

​ hadoop103

​ hadoop104

  • 第二步:同步所有节点配置文件etc到103,104

    [ola@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
    

2.5.2.启动集群

  • 第一步:在102上,如果集群是第一次启动,需要在hadoop102节点格式化NameNode

注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。

初始化后,$HADOOP_HOME下多了data和logs目录,如下:

[ola@hadoop102 hadoop-3.1.3]$ ll
总用量 176
drwxr-xr-x. 2 ola ola    183 912 2019 bin
drwxrwxr-x. 3 ola ola     17 323 15:22 data
drwxr-xr-x. 3 ola ola     20 912 2019 etc
drwxr-xr-x. 2 ola ola    106 912 2019 include
drwxr-xr-x. 3 ola ola     20 912 2019 lib
drwxr-xr-x. 4 ola ola    288 912 2019 libexec
-rw-rw-r--. 1 ola ola 147145 94 2019 LICENSE.txt
drwxrwxr-x. 2 ola ola     36 323 15:22 logs
-rw-rw-r--. 1 ola ola  21867 94 2019 NOTICE.txt
-rw-rw-r--. 1 ola ola   1366 94 2019 README.txt
drwxr-xr-x. 3 ola ola   4096 912 2019 sbin
drwxr-xr-x. 4 ola ola     31 912 2019 share
  • 第二步,在102上,启动HDFS,运行后,在102$HADOOP_HOME下多了data和logs目录,也会在103,104产生。

    $HADOOP_HOME下sbin文件夹内的start-dfs.sh,脚本是用于启动Hadoop分布式文件系统(HDFS)相关的守护进程的。start-dfs.sh是一个Shell脚本,运行它时,它会启动HDFS集群中的3个核心服务:NameNode、SecondaryNameNode、DataNode

    [ola@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
    Starting namenodes on [hadoop102]
    Starting datanodes
    hadoop103: WARNING: /opt/module/hadoop-3.1.3/logs does not exist. Creating.
    hadoop104: WARNING: /opt/module/hadoop-3.1.3/logs does not exist. Creating.
    Starting secondary namenodes [hadoop104]
    
    • 在Hadoop环境中,jps命令经常被用来快速检查Hadoop集群各个组件(如NameNode、DataNode、ResourceManager、 NodeManager等)的运行状态。

      [ola@hadoop102 hadoop-3.1.3]$ jps
      12528 NameNode
      12678 DataNode
      13048 Jps
      
      [ola@hadoop103 hadoop-3.1.3]$ jps
      12629 Jps
      12015 DataNode
      
      [ola@hadoop104 etc]$ jps
      11954 DataNode
      12262 Jps
      12063 SecondaryNameNode
      
  • 第三步,在103上,在配置了ResourceManager的节点(hadoop103)启动YARN

    [ola@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
    Starting resourcemanager
    Starting nodemanagers
    

​ 同样可以使用jps来查看ResourceManager运行状态

  • Web端查看HDFS的NameNode

    http://hadoop102:9870 ------->. 查看HDFS上存储的数据信息

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • Web端查看YARN的ResourceManager

    http://hadoop103:8088 --------> 查看YARN上运行的Job信息,只有计算时才有数据

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.6.集群基本测试

以下操作在102服务器上,尝试在103上操作,也可以,看来在不同集群都可以操作

在Hadoop命令行工具中,fs是指文件系统(File System)的缩写,这里,fs后面通常跟着具体的文件系统命令和选项,用于指定要执行的操作,如列出文件、创建目录、复制文件等。

hadoop fs -ls /会列出HDFS根目录下的所有文件和目录

测试HDFS:

  • 上传文件到集群

    • 在集群上新建文件夹input
    [ola@hadoop102 logs]$ hadoop fs -mkdir /input
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 上传小文件到input
    [ola@hadoop102 hadoop-3.1.3]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
    2024-03-23 16:50:01,537 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 上传大文件到根目录
    [ola@hadoop103 logs]$ hadoop fs -put  /opt/software/jdk-8u212-linux-x64.tar.gz  /
    
  • 查看HDFS文件存储路径

    [ola@hadoop102 subdir0]$ ll
    总用量 191952
    -rw-rw-r--. 1 ola ola        32 323 16:50 blk_1073741825
    -rw-rw-r--. 1 ola ola        11 323 16:50 blk_1073741825_1001.meta
    -rw-rw-r--. 1 ola ola 134217728 323 16:53 blk_1073741826
    -rw-rw-r--. 1 ola ola   1048583 323 16:53 blk_1073741826_1002.meta
    -rw-rw-r--. 1 ola ola  60795424 323 16:53 blk_1073741827
    -rw-rw-r--. 1 ola ola    474975 323 16:53 blk_1073741827_1003.meta
    -rw-rw-r--. 1 ola ola        32 323 16:56 blk_1073741828
    -rw-rw-r--. 1 ola ola        11 323 16:56 blk_1073741828_1004.meta
    [ola@hadoop102 subdir0]$ pwd
    /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1459196067-192.168.109.102-1711178530280/current/finalized/subdir0/subdir0
    
  • 查看文件内容

    这正是刚才上传的word.txt文件

    [ola@hadoop102 subdir0]$ cat blk_1073741825
    Everthing is gonna be okay!
    Li
    
  • 拼接文件

    #使用blk_1073741826和blk_1073741827生成tmp.tar.gz
    [ola@hadoop102 subdir0]$ cat blk_1073741826 >> tmp.tar.gz
    [ola@hadoop102 subdir0]$ cat blk_1073741827 >> tmp.tar.gz
    #解压
    [ola@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz
    
  • 下载集群文件到linux

    [ola@hadoop102 s]$ hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./
    2024-03-23 17:36:28,689 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
    [ola@hadoop102 s]$ ll
    总用量 190444
    -rw-r--r--. 1 ola ola 195013152 323 17:36 jdk-8u212-linux-x64.tar.gz
    

测试yarn:

  • 执行wordcount程序,可以在下图中看到执行任务

    [ola@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
    

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.7.配置历史运行记录服务器

上图中有个history入口,可以查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

  • 在102配置mapred-site.xml

    [ola@hadoop102 hadoop]$ vim 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>
    
  • 分发配置到103,104

    [ola@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
    
  • 在102启动历史服务器

    [ola@hadoop102 hadoop]$ mapred --daemon start historyserver
    
  • 查看历史服务器是否启动

    [ola@hadoop102 hadoop]$ jps
    12528 NameNode
    14098 Jps
    12678 DataNode
    12951 NodeManager
    14039 JobHistoryServer
    
  • 查看JobHistory

    http://hadoop102:19888/jobhistory

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.8.配置日志的聚集

上图中有个logs入口,需要配置一下
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 在102配置yarn-site.xml

    [ola@hadoop102 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://hadoop102:19888/jobhistory/logs</value>
    </property>
    <!-- 设置日志保留时间为7天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
    
  • 分发配置到103,104

    [ola@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
    
  • 在103上关闭NodeManager 、ResourceManager,在102上关闭HistoryServer

    #关闭NodeManager 、ResourceManager
    [ola@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
    Stopping nodemanagers
    hadoop103: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
    hadoop102: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
    hadoop104: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
    Stopping resourcemanager
    #关闭后检查一下
    [ola@hadoop103 hadoop-3.1.3]$ jps
    13656 Jps
    12015 DataNode
    
    #关闭前先检查一下
    [ola@hadoop102 hadoop-3.1.3]$ jps
    12528 NameNode
    14705 Jps
    12678 DataNode
    14039 JobHistoryServer
    #关闭HistoryServer
    [ola@hadoop102 hadoop-3.1.3]$ mapred --daemon stop historyserver
    #关闭后检查
    [ola@hadoop102 hadoop-3.1.3]$ jps
    12528 NameNode
    12678 DataNode
    14760 Jps
    
  • 在103上启动NodeManager 、ResourceManager,在102上启动HistoryServer

    #启动NodeManager 、ResourceManager
    [ola@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
    Starting resourcemanager
    Starting nodemanagers
    #开启后检查一下
    [ola@hadoop103 hadoop-3.1.3]$ jps
    13817 ResourceManager
    13945 NodeManager
    12015 DataNode
    14303 Jps
    
    #启动HistoryServer
    [ola@hadoop102 hadoop-3.1.3]$ mapred --daemon start historyserver
    #开启后检查
    [ola@hadoop102 hadoop-3.1.3]$ jps
    12528 NameNode
    14821 NodeManager
    12678 DataNode
    15078 Jps
    15018 JobHistoryServer
    
  • 执行WordCount程序,之前历史执行的日志看不到了,需要重新执行下新的任务,一个任务对应一个输出文件夹,将输出设置为新文件夹output2

    [ola@hadoop102 hadoop]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output2
    
  • 查看日志

    • 历史服务器地址

      http://hadoop102:19888/jobhistory

    • 点击某个历史任务

    • 点击查看任务运行日志

2.9.集群启动/停止方式总结

第一种:模块逐一启动/停止

  • 在配置了NameNode的服务器上启动/停止HDFS—102

    [ola@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
    [ola@hadoop102 hadoop-3.1.3]$ sbin/stop-dfs.sh
    
  • 在配置了ResourceManager的服务器上启动/停止YARN—103

    [ola@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
    [ola@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
    
  • 在配置了历史服务器的服务器上启动/停止历史服务器—102

    [ola@hadoop102 hadoop]$ mapred --daemon start historyserver
    [ola@hadoop102 hadoop]$ mapred --daemon stop historyserver
    

第二种:服务组件逐一启动停止

  • 在各服务器单独启动/停止HDFS组件

    $HADOOP_HOME/bin/hdfs --daemon start/stop namenode/datanode/secondarynamenode
    
  • 在各服务器单独启动/停止Yarn

    $HADOOP_HOME/bin/yarn --daemon start/stop  resourcemanager/nodemanager
    

第三种:集群启停脚本

  • 创建Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver)

    使用方法:

    开启:[ola@hadoop102 bin]$ myhadoop.sh start

    关闭:[ola@hadoop102 bin]$ myhadoop.sh start

    [ola@hadoop102 hadoop-3.1.3]$ cd /home/ola/bin
    [ola@hadoop102 bin]$ vim myhadoop.sh
    
    • #!/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
      
    • 保存后退出,然后赋予脚本执行权限

      [ola@hadoop102 bin]$ chmod +x myhadoop.sh
      
  • 创建查看三台服务器Java进程的脚本:jpsall

    使用方法:[ola@hadoop102 bin]$ jpsall

    [ola@hadoop102 hadoop-3.1.3]$ cd /home/ola/bin
    [ola@hadoop102 bin]$ vim jpsall
    
    • #!/bin/bash
      
      for host in hadoop102 hadoop103 hadoop104
      do
              echo =============== $host ===============
              ssh $host jps 
      done
      
    • 保存后退出,然后赋予脚本执行权限

      [ola@hadoop102 bin]$ chmod +x jpsall
      
  • 分发/home/ola/bin目录,保证自定义脚本在三台机器上都可以使用

    [ola@hadoop102 bin]$ xsync /home/ola/bin/
    

2.10.常用端口号说明

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

端口名称Hadoop2.xHadoop3.x
NameNode内部通信端口8020 / 90008020 / 9000/9820
NameNode HTTP UI500709870
MapReduce查看执行任务端口80888088
历史服务器通信端口1988819888

2.11.常用配置文件

3和2只有一个不同,就是2的salves更改成了workers

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • Hadoop3.x
    • core-site.xml
    • hdfs-site.xml
    • yarn-site.xml
    • mapred-site.xml
    • workers
  • Hadoop2.x
    • core-site.xml
    • hdfs-site.xml
    • yarn-site.xml
    • mapred-site.xml
    • slaves

3.完全分布式运行模式总结

保持集群内102,103,104的配置,工具都是一致的

  1. 服务器准备
    服务器准备:102,103,104,三台服务器
    服务器环境搭建:IP设定,JDK、Hadoop安装

  2. 工具准备,脚本放在/home/ola/bin下
    集群分发脚本:xsycn
    ssh无密登录配置
    常用脚本:集群启动/停止脚本

  3. 集群配置
    5个文件

    • 配置HDFS
    • 配置Yarn
    • 配置MapReduce
    • 配置历史运行记录
    • 配置日志
    • 配置workers

    =============== hadoop102 ===============
    17232 JobHistoryServer
    17300 Jps
    16790 DataNode
    17065 NodeManager
    16636 NameNode
    =============== hadoop103 ===============
    15875 Jps
    15223 DataNode
    15401 ResourceManager
    15530 NodeManager
    =============== hadoop104 ===============
    14182 Jps
    13978 SecondaryNameNode
    13868 DataNode
    14061 NodeManager

  4. 集群启动/停止

    • 模块逐一启动/停止

      • 在配置了NameNode的服务器上启动/停止HDFS—102
      • 在配置了ResourceManager的服务器上启动/停止YARN—103
      • 在配置了历史服务器的服务器上启动/停止历史服务器—102
    • 服务组件逐一启动/停止

      • 在各服务器单独启动/停止HDFS组件
      • 在各服务器单独启动/停止Yarn
    • 集群启停脚本

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值