【手把手配置】Hadoop集群--虚拟机模拟完全分布式模式

Hadoop运行环境搭建

模板虚拟机环境准备

  1. VMware安装
    • 快速安装
  2. CentOS配置
    • 虚拟机配置(硬件)

      创建虚拟机

      新建自定义虚拟机

      选择硬件兼容性

      安装操作系统

      选择客户机操作系统

      命名虚拟机

      处理器配置

      查看自己电脑的CPU核数

      查看自己电脑的CPU核数

      为何采用2+2+2+2的配置呢?

      首先是有3个hadoop虚拟机组成集群,故配置3*2;同时要考虑Windows实际运行的内容,再配置个2;下面配置内存,同理。

      设置虚拟机内存

      设置网络类型

      选择IO控制器

      磁盘类型

      选择磁盘配置

      指定磁盘容量

      指定磁盘存放位置

      硬件配置汇总

    • 系统安装(软件)

      插入光驱

      开启虚拟机

      安装CentOS7

      选择语言

      配置

      • 日期和时间

        日期和时间

      • 软件选择

        软件选择

      • 安装位置

        安装位置

        手动配置分区

      • KDUMP

        KDUMP

      • 网络和主机名

        网络和主机名

      • 安全协议

        安全协议

      开始安装

      开始安装,安装期间设置root用户密码

      设置root用户

      安装完成后,重启虚拟机,进入引导界面,基本勾选“前进”,即可;同时要创建一个普通用户

      接受许可证

      添加新用户

    • 网络配置

      1. 虚拟机的网络配置

        虚拟机的网络配置

        NAT模式配置

      2. 实体机的网络配置(以win10为例)

        实体机网络配置

        VM8配置

        Internet4配置

      3. CentOS的网络IP修改

        root用户下运行

        vim /etc/sysconfig/network-scripts/ifcfg-ens33
        

        编辑内容如下:

        TYPE="Ethernet"    #网络类型(通常是Ethemet)
        PROXY_METHOD="none"
        BROWSER_ONLY="no"
        BOOTPROTO="static"   #IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
        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="e83804c1-3257-4584-81bb-660665ac22f6"   #随机id
        DEVICE="ens33"   #接口名(设备,网卡)
        ONBOOT="yes"   #系统启动的时候网络接口是否有效(yes/no)
        #IP地址
        IPADDR=192.168.10.100  
        #网关  
        GATEWAY=192.168.10.2      
        #域名解析器
        DNS1=192.168.10.2
        

        修改前先按“i”,进入编辑模式;修改后按“ESC”键后输入“:wq”以退出并保存

        效果如下:

        CentOSIP配置

        重启网络服务

        systemctl restart network
        

        查看当前IP

        ifconfig
        

        查询IP

        保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同

      4. 修改主机名和hosts文件

        修改主机名称,为hadoop100

        vim /etc/hostname
        

        配置Linux克隆机主机名称映射hosts文件

        vim /etc/hosts
        

        内容如下:

        192.168.10.100 hadoop100
        192.168.10.101 hadoop101
        192.168.10.102 hadoop102
        192.168.10.103 hadoop103
        192.168.10.104 hadoop104
        192.168.10.105 hadoop105
        192.168.10.106 hadoop106
        192.168.10.107 hadoop107
        192.168.10.108 hadoop108
        

        重启虚拟机

        reboot
        
    • 修改windows的主机映射文件(hosts文件)

      进入C:\Windows\System32\drivers\etc

      将hosts文件拷贝到桌面

      打开hosts文件添加如下内容:

      192.168.10.100 hadoop100
      192.168.10.101 hadoop101
      192.168.10.102 hadoop102
      192.168.10.103 hadoop103
      192.168.10.104 hadoop104
      192.168.10.105 hadoop105
      192.168.10.106 hadoop106
      192.168.10.107 hadoop107
      192.168.10.108 hadoop108
      

      将桌面hosts文件覆盖C:\Windows\System32\drivers\etc路径hosts文件

  3. 远程终端工具Xshell和Xftp配置
    • Xshell安装

      xshell免费版

    • 以Xshell配置hadoop100为例

      1. 创建新链接

        Xshell新建链接

      2. 编辑新链接

        编辑新链接

        用户身份验证

        保存密钥

      3. 连接完成

        连接完成

    • 配置Xftp,不再赘述

  4. hadoop100虚拟机配置
    • 检查是否正常上网

      ping www.baidu.com
      

      测试下虚拟机联网情况

    • 安装epel-release

      yum install -y epel-release
      
      • Extra Packages for Enterprise Linux是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库,大多数rpm包在官方 repository 中是找不到的)

      • 如果Linux安装的是最小系统版,还需要安装如下工具;如果安装的是Linux桌面标准版,不需要执行如下操作:

        yum install -y net-tools
        yum install -y vim
        
    • 关闭防火墙和防火墙开机自启

      # 关闭防火墙
      systemctl stop firewalld
      # 关闭防火墙开机自启
      systemctl disable firewalld.service
      

      在企业开发时,通常单个服务器的防火墙时关闭的。公司整体对外会设置非常安全的防火墙

    • 创建普通用户,并设置密码

      useradd userName
      passwd userName
      

      输入两次用户密码

    • 为普通用户配置root权限

      vim /etc/sudoers
      
      # 在%wheel这行下面添加一行
      
      ## Allow root to run any commands anywhere
      root    ALL=(ALL)     ALL
      
      ## Allows people in group wheel to run all commands
      %wheel  ALL=(ALL)       ALL
      userName   ALL=(ALL)     NOPASSWD:ALL
      
    • 创建相关文件夹

      # 在/opt目录下创建module和software文件夹
      mkdir /opt/module
      mkdir /opt/software
      # 修改module和software文件夹的所有者和所属组为普通用户
      chown userName:userName /opt/module 
      chown userName:userName /opt/software
      # 查看文件夹所有者和所属组
      cd /opt/
      ll
      
    • 卸载虚拟机自带的JDK

      rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
      

      如果你的虚拟机是最小化安装不需要执行这一步

    • 重启虚拟机

      reboot
      
  5. 克隆虚拟机
    • 以模板hadoop100,克隆三台虚拟机(克隆时先关闭hadoop100)

      克隆

      开始克隆

      克隆自

      完整克隆

      克隆机命名

      克隆完成

    • 修改克隆的虚拟机IP(与上面操作基本一样)

      NAT模式

      NAT配置

      修改IP文件

      vim /etc/sysconfig/network-scripts/ifcfg-ens33
      

      内容如下

      DEVICE=ens33
      TYPE=Ethernet
      ONBOOT=yes
      BOOTPROTO=static
      NAME="ens33"
      IPADDR=192.168.10.102
      PREFIX=24
      GATEWAY=192.168.10.2
      DNS1=192.168.10.2
      

      保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同

    • 修改克隆的主机名(与上面操作基本一样)

      # 修改主机名称
      vim /etc/hostname
      # 修改为:
      hadoop102
      # 配置Linux克隆机主机名称映射hosts
      vim /etc/hosts
      # 内容如下:
      192.168.10.100 hadoop100
      192.168.10.101 hadoop101
      192.168.10.102 hadoop102
      192.168.10.103 hadoop103
      192.168.10.104 hadoop104
      192.168.10.105 hadoop105
      192.168.10.106 hadoop106
      192.168.10.107 hadoop107
      192.168.10.108 hadoop108
      
    • 重启克隆机

      reboot
      
    • 修改windows的主机映射文件(hosts文件)

      进入C:\Windows\System32\drivers\etc

      将hosts文件拷贝到桌面

      打开hosts文件添加如下内容:

      192.168.10.100 hadoop100
      192.168.10.101 hadoop101
      192.168.10.102 hadoop102
      192.168.10.103 hadoop103
      192.168.10.104 hadoop104
      192.168.10.105 hadoop105
      192.168.10.106 hadoop106
      192.168.10.107 hadoop107
      192.168.10.108 hadoop108
      

      将桌面hosts文件覆盖C:\Windows\System32\drivers\etc路径hosts文件

  6. 为hadoop102安装JDK(以hadoop102为例)
    1. 卸载已有JDK

      安装JDK前,一定确保提前删除了虚拟机自带的JDK

    2. 上传下载好的JDK

      利用Xftp将JDK导入到opt目录下的software文件夹下

      上传JDK

      下载地址:jdk-8u212-linux-x64.tar.gz百度网盘 提取码:cbw4

    3. 检查是否上传成功并解压

      检查是否上传成功

      ls /opt/software/
      # 结果如下:
      jdk-8u212-linux-x64.tar.gz
      

      解压到指定目录下

      1.  tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
        
    4. 配置JDK环境变量

      sudo 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生效

      source /etc/profile
      
    5. 测试JDK是否安装成功

      java
      # 或查看Java版本
      java -version
      
  7. 为hadoop102安装Hadoop
    1. 将下载好的hadoop上传到/opt/software文件夹下

      上传Hadoop

      Hadoop下载地址:hadoop-3.1.3

    2. 解压安装文件到/opt/module

      # 进入对应目录
      cd /opt/software/
      # 解压到对应目录
      tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
      # 查看是否解压成功
      ls /opt/module/
      
    3. 为Hadoop配置环境变量

      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文件,让新的环境变量PATH生效

      source /etc/profile
      
    4. 测试是否安装成功

      hadoop
      # 或查看hadoop版本
      hadoop version
      

      查看Hadoop目录结构

      [user@hadoop102 hadoop-3.1.3]$  ll
      
      # 内容如下:
      总用量 52
      drwxr-xr-x. 2 user user  4096 5月  22 2017 bin
      drwxr-xr-x. 3 user user  4096 5月  22 2017 etc
      drwxr-xr-x. 2 user user  4096 5月  22 2017 include
      drwxr-xr-x. 3 user user  4096 5月  22 2017 lib
      drwxr-xr-x. 2 user user  4096 5月  22 2017 libexec
      -rw-r--r--. 1 user user 15429 5月  22 2017 LICENSE.txt
      -rw-r--r--. 1 user user   101 5月  22 2017 NOTICE.txt
      -rw-r--r--. 1 user user  1366 5月  22 2017 README.txt
      drwxr-xr-x. 2 user user  4096 5月  22 2017 sbin
      drwxr-xr-x. 4 user user  4096 5月  22 2017 share
      

      bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本

      etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

      lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

      sbin目录:存放启动或停止Hadoop相关服务的脚本

      share目录:存放Hadoop的依赖jar包、文档、和官方案例

本地运行模式

  1. 在hadoop文件夹下创建wcinput文件夹

    mkdir wcinput
    
  2. 在wcinput文件夹下创建并编辑word.txt文件

    # 进入wcinput文件夹
    cd wcinput
    # 编辑word.txt
    vim word.txt
    
    # 内容如下:
    hadoop yarn
    hadoop mapreduce
    user
    user
    
  3. 回到Hadoop目录,即/opt/module/hadoop

    cd /opt/module/hadoop
    
  4. 执行程序

    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
    
  5. 查看结果

    cat wcoutput/part-r-00000
    
    # 结果如下:
    user 2
    hadoop  2
    mapreduce       1
    yarn    1
    

完全分布式模式

  • 上述配置模板虚拟机完成,进行以下操作:

    1. 准备工作

      • 分发jdk到集群中各机器

        修改两个目录的组别

        sudo chown userName:userName -R /opt/module
        sudo chown userName:userName -R /opt/software
        

        将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103和hadoop104上

        scp -r /opt/module/jdk1.8.0_212  user@hadoop103:/opt/module
        scp -r /opt/module/jdk1.8.0_212  user@hadoop104:/opt/module
        
      • 同步hadoop到集群中各机器

        将hadoop102中/opt/module/hadoop-3.1.3目录同步到hadoop103和hadoop104上

        rsync -av hadoop-3.1.3/ userName@hadoop103:/opt/module/hadoop-3.1.3/
        rsync -av hadoop-3.1.3/ userName@hadoop104:/opt/module/hadoop-3.1.3/
        
      • 编写xsync脚本分发集群

        在/home/userName/bin目录下创建xsync文件

        [userName@hadoop102 opt]$  cd /home/userName
        [userName@hadoop102 ~]$  mkdir bin
        [userName@hadoop102 ~]$  cd bin
        [userName@hadoop102 bin]$  vim xsync
        

        在该文件中编写如下代码:

        #!/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
        

        修改脚本 xsync 具有执行权限

        [userName@hadoop102 bin]$  chmod +x xsync
        

        测试脚本

        [userName@hadoop102 ~]$  xsync /home/userName/bin
        

        将脚本复制到/bin中,以便全局调用

        [userName@hadoop102 bin]$  sudo cp xsync /bin/
        

        同步环境变量配置(root所有者)

        [userName@hadoop102 ~]$  sudo ./bin/xsync /etc/profile.d/my_env.sh
        

        使环境变量在集群中其他机器生效

        [userName@hadoop103 bin]$  source /etc/profile
        [userName@hadoop104 bin]$  source /etc/profile
        
      • 配置无密钥登录

        生成公钥和私钥

        [userName@hadoop102 ~]$  cd ~/.ssh
        [userName@hadoop102 .ssh]$  ssh-keygen -t rsa
        

        将公钥拷贝到要免密登录的目标机器上

        [userName@hadoop102 .ssh]$  ssh-copy-id hadoop102
        [userName@hadoop102 .ssh]$  ssh-copy-id hadoop103
        [userName@hadoop102 .ssh]$  ssh-copy-id hadoop104
        

        还需要在hadoop103上采用user账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。

        还需要在hadoop104上采用user账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。

        与上述操作一致(即,重复①生成公钥和私钥和②将公钥拷贝到要免密登录的目标机器上两步)

    2. 配置集群

      集群部署规划

      hadoop102 hadoop103 hadoop104
      HDFS NameNode
      DataNode
      DataNode SecondaryNameNode
      DataNode
      YARN NodeManager ResourceManager
      NodeManager
      NodeManager

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

      Ø ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。

      默认配置文件:

      要获取的默认文件 文件存放在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

      配置集群

      • 核心配置文件

        [userName@hadoop102 ~]$  cd $HADOOP_HOME/etc/hadoop
        [userName@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>
        
            <!-- 配置HDFS网页登录使用的静态用户为userName -->
            <property>
                <name>hadoop.http.staticuser.user</name>
                <value>userName</value>
            </property>
        </configuration>
        
      • HDFS配置文件

        [userName@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配置文件

        [userName@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>
        
      • MapReduce配置文件

        [userName@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>
        

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

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

      在103和104上查看文件分发情况

      [userName@hadoop103 ~]$  cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
      [userName@hadoop104 ~]$  cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
      
    3. 群起并测试集群

      配置workers

      1. 进入workers

        [userName@hadoop102 hadoop]$  vim /opt/module/hadoop3.1.3/etc/hadoop/workers
        
      2. 修改为以下内容:

        hadoop102
        hadoop103
        hadoop104
        

        即将该文件中localhost的内容修改为上述内容,并要求结尾不允许有空格,文件中不允许有空行

      3. 同步集群所有机器配置文件

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

      启动集群

      1. 如果集群是第一次启动,需要在hadoop102节点格式化NameNode

        [userName@hadoop102 hadoop-3.1.3]$  hdfs namenode -format
        

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

      2. 启动HDFS

        [userName@hadoop102 hadoop-3.1.3]$  sbin/start-dfs.sh
        

        去集群中各台机器中输入jps,查看对应结点与配置规则HDFS是否一致

      3. 在配置了ResourceManager的节点(hadoop103)启动YARN

        [userName@hadoop103 hadoop-3.1.3]$  sbin/start-yarn.sh
        

        去集群中各台机器中输入jps,查看对应结点与配置规则YARN是否一致

      4. Web端查看HDFS的NameNode

        (a)浏览器中输入:http://hadoop102:9870

        (b)查看HDFS上存储的数据信息

      5. Web端查看YARN的ResourceManager

        (a)浏览器中输入:http://hadoop103:8088

        (b)查看YARN上运行的Job信息

      集群基本测试

      • 上传文件到集群

        [userName@hadoop102 ~]$  hadoop fs -mkdir /input
        [userName@hadoop102 ~]$  hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
        
      • 执行wordcount程序

        [userName@hadoop102 hadoop-3.1.3]$  hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
        
    • 优化配置内容

      • 配置历史服务器

        1. 配置mapred-site.xml

          vim mapred-site.xml
          

          增加如下配置:

          <configuration>
              <!-- 历史服务器端地址 -->
              <property>
                  <name>mapreduce.jobhistory.address</name>
                  <value>hadoop102:10020</value>
              </property>
          
              <!-- 历史服务器web端地址 -->
              <property>
                  <name>mapreduce.jobhistory.webapp.address</name>
                  <value>hadoop102:19888</value>
              </property>
          </configuration>
          
        2. 分发配置

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

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

          [userName@hadoop102 hadoop]$  jps
          
      • 配置日志的聚集

        1. 配置yarn-site.xml

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

          增加如下配置

          <configuration>
              <!-- 开启日志聚集功能 -->
              <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>
          </configuration>
          
        2. 分发配置

          [userName@hadoop102 hadoop]$  xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
          
        3. 关闭NodeManager 、ResourceManager和HistoryServer

          [userName@hadoop103 hadoop-3.1.3]$  sbin/stop-yarn.sh
          [userName@hadoop103 hadoop-3.1.3]$  mapred --daemon stop historyserver
          
        4. 启动NodeManager 、ResourceManager和HistoryServer

          [userName@hadoop103 ~]$  start-yarn.sh
          [userName@hadoop102 ~]$  mapred --daemon start historyserver
          
        5. 删除HDFS上已经存在的输出文件

          [userName@hadoop102 ~]$  hadoop fs -rm -r /output
          
        6. 执行WordCount程序

          [userName@hadoop102 hadoop-3.1.3]$  hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
          
        7. 查看日志

          历史服务器

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

        各个模块分开启动停止

        • 整体启动/停止HDFS

          start-dfs.sh/stop-dfs.sh
          
        • 整体启动/停止YARN

          start-yarn.sh/stop-yarn.sh
          

        各个服务组件逐一启动停止

        • 分别启动/停止HDFS组件

          hdfs --daemon start / stop namenode/datanode/secondarynamenode
          
        • 分别启动/停止YARN组件

          yarn --daemon start / stop  resourcemanager/nodemanager
          
      • 编写Hadoop集群常用脚本

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

          [userName@hadoop102 ~]$  cd /home/userName/bin
          [userName@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
          
          [userName@hadoop102 bin]$  chmod +x myhadoop.sh
          
          [userName@hadoop102 ~]$ xsync /home/userName/bin/
          
        • 查看三台服务器Java进程脚本

          [userName@hadoop102 ~]$  cd /home/userName/bin
          [userName@hadoop102 bin]$  vim jpsall
          
          #!/bin/bash
          
          for host in hadoop102 hadoop103 hadoop104
          do
                  echo =============== $host ===============
                  ssh $host jps 
          done
          
          [userName@hadoop102 bin]$  chmod +x jpsall
          
          [userName@hadoop102 ~]$  xsync /home/userName/bin/
          
posted @   昼长  阅读(265)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示