Hadoop入门


目录
  • Hadoop入门
    • 第一章 Hadoop概述
      • 1.1 Hadoop是什么
      • 1.2 Hadoop发展历史
      • 1.3 Hadoop三大发行版本
      • 1.4 Hadoop优势
      • 1.5 Hadoop组成
        • 1.5.1 HDFS概述
        • 1.5.2 Yarn结构概述
        • 1.5.3 MapReduce架构概述
        • 1.5.4 HDFS、YARN、MapReduce三者关系
      • 1.6 大数据技术生态体系
      • 1.7 推荐系统框架图
    • 第二章 Hadoop运行环境搭建
      • 2.1 准备环境
      • 2.2 环境基础配置
      • 2.3 在hadoop102上安装JDK和hadoop
    • 第三章 Hadoop运行模式
      • 3.1 本地运行模式
      • 3.2 完全分布式模式
        • 3.2.1 编写集群分发脚本
        • 3.2.2 配置SSH免密登录
        • 3.2.3 集群配置
        • 3.2.4 集群启动
        • 3.2.5 集群测试
        • 3.2.6 配置历史服务器
        • 3.2.7 配置日志聚集
        • 3.2.8 集群启动/停止方式
        • 3.2.9 编写hadoop集群常用脚本
        • 3.2.10 常见端口说明
        • 3.2.11 集群时间同步
    • 第四章 常见错误及解决方案

Hadoop入门

第一章 Hadoop概述

1.1 Hadoop是什么

  • Hadoop是一个由Apache基金会所开发的分布式系统基础架构
  • 主要解决海量数据的存储和海量数据的分析计算问题
  • Hadoop通常是指一个更广泛的概念----Hadoop生态圈

1.2 Hadoop发展历史

  • Hadoop创始人Doug Cutting
  • 2006年3月份,Map-Reduce和NDFS分别被纳入到Hadoop项目中,Hadoop正式诞生,标志着大数据时代来临

1.3 Hadoop三大发行版本

  • Apache:最原始(最基础)的版本,对于入门学习最好
  • Cloudera:内部集成了很多大数据框架,对应产品CDH
  • Hortonworks:文档较好,对应产品HDP
  • Hortonworks现在已经被Cloudera公司收购,推出新的品牌CDP

1.4 Hadoop优势

  • 高可靠性
    • Hadoop底层维护多个数据副本,所以即使Hadoop某个计算节点或存储出现故障,也不会导致数据的丢失
  • 高扩展性
    • 在集群间分配任务数据,可方便的扩展数以千计的节点
  • 高效性
    • 在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度
  • 高容错性
    • 能够自动将失败的任务重新分配

1.5 Hadoop组成

  • Hadoop1.X组成
    • Common(辅助工具)
    • HDFS(数据存储)
    • MapReduce(计算+资源调度)
  • Hadoop2.X组成
    • Common(辅助工具)
    • HDFS(数据存储)
    • Yarn(资源调度)
    • MapReduce(计算)
  • Hadoop3.X组成
    • 在组成上没有变化
    • 在细节上做了一些修改

1.5.1 HDFS概述

  • 是一个分布式的文件系统
    • NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DateNode等
    • DateNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和
    • Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份

1.5.2 Yarn结构概述

  • 另一种资源协调者,是Hadoop的资源管理器
    • ResourceManager(RM):整个集群资源(内存、CPU)的老大
    • NodeManager(NM):单个节点服务器资源老大
    • ApplicationMaster(AM):单个任务运行的老大(运行任务的数量和所在节点CPU成正比)
    • Container:容器,相当一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等
    • 客户端可以有多个
    • 集群上可以运行多个ApplicationMaster
    • 每个NodeManager上可以有多个Container

1.5.3 MapReduce架构概述

  • MapReduce将计算过程分为两个阶段:Map和Reduce
    • Map阶段并行处理输入数据
    • Reduce阶段对Map结果进行汇总

1.5.4 HDFS、YARN、MapReduce三者关系

  • 客户端发送请求,Yarn分配资源调度,由MapReduce进行计算汇总,然后存储到HDFS

1.6 大数据技术生态体系

图中涉及的技术名词解释如下:

1)Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

2)Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

3)Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:

(1)通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

(2)高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。

(3)支持通过Kafka服务器和消费机集群来分区消息。

(4)支持Hadoop并行数据加载。

4)Storm:Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。

5)Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。

6)Oozie:Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。

7)Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。

8)Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

10)R语言:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。

11)Mahout:Apache Mahout是个可扩展的机器学习和数据挖掘库。

12)ZooKeeper:Zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

1.7 推荐系统框架图

第二章 Hadoop运行环境搭建

2.1 准备环境

  • 准备三台2C/4G/50G配置的虚拟机

    hadoop102 hadoop103 hadoop104
    192.168.10.102 192.168.10.103 192.168.10.104

2.2 环境基础配置

  • 以下操作需要在三台机器配置,以hadoop102为例

    #安装基础命令
    [root@hadoop102 ~]# yum -y install  vim  net-tools 
    [root@hadoop102 ~]#yum -y install epel-release
    #配置IP信息
    [root@hadoop102 ~]# vim  /etc/sysconfig/network-scripts/ifcfg-ens33 
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=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=62bc3cef-8a72-419a-984b-10a838f47918
    DEVICE=ens33
    ONBOOT=yes
    IPADDR=192.168.10.102
    NETMASK=255.255.255.0
    GATEWAY=192.168.10.2
    DNS1=192.168.10.2
    ----------------------------------------------------------------------
    #修改主机名
    [root@hadoop102 ~]# hostnamectl set-hostname hadoop102
    
    #配置主机映射
    [root@hadoop102 ~]# 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
    #关闭防火墙
    [root@hadoop102 ~]# systemctl stop  firewalld  &&  systemctl disable  firewalld
    #创建文件目录及用户
    [root@hadoop102 ~]# mkdir  /opt/src/   /opt/module
    [root@hadoop102 ~]# useradd  xiaoyao 
    [root@hadoop102 ~]# echo  "123456"  |  passwd  --stdin  xiaoyao
    #配置授权用户
    [root@hadoop102 ~]# vim  /etc/sudoers
    ## Allows people in group wheel to run all commands
    %wheel  ALL=(ALL)       ALL
    xiaoyao ALL=(ALL)       NOPASSWD:ALL   #需要写在wheel组下
    ##授权目录
    [root@hadoop102 ~]# chown -R  xiaoyao:xiaoyao  /opt/src/  /opt/module/
    ##重启主机,使配置生效,后续所有操作使用普通用户执行
    

2.3 在hadoop102上安装JDK和hadoop

  • 把准备的软件包上传到hadoop102的/opt/src目录下

    [xiaoyao@hadoop102 src]$ ls
    hadoop-3.2.2.tar.gz  jdk-8u291-linux-x64.tar.gz
    #安装jdk
    [xiaoyao@hadoop102 src]$ tar  -xvzf  jdk-8u291-linux-x64.tar.gz -C  /opt/module/
    #配置JDK环境变量
    [xiaoyao@hadoop102 src]$ sudo  vim  /etc/profile.d/my_env.sh 
    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_291
    export PATH=$PATH:$JAVA_HOME/bin
    ------------------------------------------------------------------
    #安装hadoop
    [xiaoyao@hadoop102 src]$ tar  -xvfz  hadoop-3.2.2.tar.gz -C  /opt/module/
    #配置Hadoop环境变量
    [xiaoyao@hadoop102 src]$ sudo  vim  /etc/profile.d/my_env.sh 
    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_291
    export PATH=$PATH:$JAVA_HOME/bin
    
    #HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-3.2.2
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    ##使配置的变量生效
    [xiaoyao@hadoop102 hadoop-3.2.2]$ source /etc/profile
    
  • hadoop目录文件说明

    [xiaoyao@hadoop102 module]$ tree  -L 1 hadoop-3.2.2/
    hadoop-3.2.2/
    ├── bin
    ├── etc
    ├── include
    ├── lib
    ├── libexec
    ├── LICENSE.txt
    ├── NOTICE.txt
    ├── README.txt
    ├── sbin
    └── share
    #bin:存储的是hadoop、hdfs、mapred、yarn等执行命令
    #etc: 存储的是hdfs、mapred、yarn配置文件以及全局配置文件
    #include:存储C语言的头文件,一般不使用
    #lib:存储本地动态链接库
    #libexec:扩展库,一般不使用
    #sbin:启动整个集群相关命令
    #share:官方提供的案例,一般作为测试使用
       
    

第三章 Hadoop运行模式

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

3.1 本地运行模式

#hadoop102上执行
#创建一个文本,统计文本内单词出现的次数
[xiaoyao@hadoop102 hadoop-3.2.2]$ cd  /opt/module/hadoop-3.2.2/
[xiaoyao@hadoop102 hadoop-3.2.2]$ mkdir  wcinput
[xiaoyao@hadoop102 wcinput]$ cat  test.txt 
zhangsan  zhangsan
lisi lisi
jim
tom
lucy
#执行命令,统计文本内单词出现的次数
[xiaoyao@hadoop102 hadoop-3.2.2]$ hadoop  jar  share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordconut wcinput/  wcoutput/
#后续所有使用mapreduce程序必须指定输入路径和输出路径,而且输出路径不能存在
#查看结果
[xiaoyao@hadoop102 hadoop-3.2.2]$ cd  wcoutput/
[xiaoyao@hadoop102 wcoutput]$ ls
part-r-00000  _SUCCESS
[xiaoyao@hadoop102 wcoutput]$ cat  part-r-00000 
jim	1
lisi	2
lucy	1
tom	1
zhangsan	2

3.2 完全分布式模式

3.2.1 编写集群分发脚本

#创建一个集群分发脚本,把hadoop102上的安装包和配置信息拷贝到其他服务器上
[xiaoyao@hadoop102 ~]$ cd 
[xiaoyao@hadoop102 ~]$ mkdir bin
[xiaoyao@hadoop102 ~]$ cat  bin/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
--------------------------------------------------------------
#给脚本添加执行权限
[xiaoyao@hadoop102 bin]$ chmod  777  xsync 
#把JDK和Hadoop安装包从hadoop102分发到hadoop103和hadoop104
[xiaoyao@hadoop102 ~]$ xsync /opt/module/
#分发环境变量
[xiaoyao@hadoop102 ~]$ sudo  bin/xsync /etc/profile.d/my_env.sh 

3.2.2 配置SSH免密登录

#在hadoop102、hadoop103、hadoop104执行
#此处以hadoop102为例
#生成公私钥
[xiaoyao@hadoop102 ~]$ ssh-keygen 
#把公钥拷贝到hadoop102、hadoop103和hadoop104
[xiaoyao@hadoop102 ~]$ ssh-copy-id xiaoyao@hadoop102
[xiaoyao@hadoop102 ~]$ ssh-copy-id xiaoyao@hadoop103
[xiaoyao@hadoop102 ~]$ ssh-copy-id xiaoyao@hadoop104
#注意:此次配置只是针对普通用户做的免密登录配置,如切换其他用户,需要重新配置相对应的用户

3.2.3 集群配置

  • 集群部署规划

    hadoop102 hadoop103 hadoop104
    HDFS NameNode/DataNode DataNode SecondaryNameNode/DataNode
    YARN NodeManager ResourceManager/Nodemanager NodeManager
    • NameNode和SecondaryNameNode不要安装在同一台服务器
    • ResourceManager也很消耗内存,不要和NameNode和SecondaryNameNode配置在同一台服务器
  • 配置文件说明

    • Hadoop配置文件分为两类:默认配置文件和自定义配置文件,只有用户相修改某一默认配置值时,才需要修改自定义配置文件,更改响应属性值。
      • 默认配置文件(存放在hadoop的jar包中的位置)
        • core-default.xml
        • hdfs-default.xml
        • yarn-default.xml
        • mapred-default.xml
      • 自定义配置文件(存放在HADOOP_HOME/etc/hadoop目录下)
        • core-site.xml
        • hdfs-site.xml
        • yarn-site.xml
        • mapred-site.xml
  • 配置集群

    • 全局核心配置文件
    #修改核心配置文件core-site.xml
    [xiaoyao@hadoop102 hadoop]$ vim  core-site.xml
    
        
        
            fs.defaultFS
            hdfs://hadoop102:8020
        
    
        
        
           hadoop.tmp.dir
           /opt/module/hadoop-3.2.2/data
        
    
        
        
           hadoop.http.staticuser.user
           xiaoyao
        
    
    
  • HDFS配置文件

      #修改HDFS配置文件
      [xiaoyao@hadoop102 hadoop]$ vim  hdfs-site.xml
      
         
         
            dfs.namenode.http-address
            hadoop102:9870
         
      
         
          
             dfs.namenode.secondary.http-address
             hadoop104:9868
          
      
    
  • YARN配置文件

      #修改yarn配置文件
      [xiaoyao@hadoop102 hadoop]$ vim  yarn-site.xml 
      
         
         
            yarn.nodemanager.aux-services
            mapreduce_shuffle
         
      
         
          
             yarn.resourcemanager.hostname
             hadoop103
          
      
    
    
  • mapreduce配置文件

      #修改mapreduce配置文件
      [xiaoyao@hadoop102 hadoop]$ vim  mapred-site.xml
      
       
          
             mapreduce.framework.name
             yarn
          
      
    
    
  • 配置workers

    #配置workers
    [xiaoyao@hadoop102 hadoop]$ cd  /opt/module/hadoop-3.2.2/etc/hadoop/
    [xiaoyao@hadoop102 hadoop]$ vi  workers 
    hadoop102
    hadoop103
    hadoop104
    #注意:里面的配置文件不能有空格
    
    
  • 使用分发脚本,把配置推送到另外两台服务器

    [xiaoyao@hadoop102 etc]$ cd  /opt/module/hadoop-3.2.2/etc/
    [xiaoyao@hadoop102 etc]$ xsync hadoop/
    
    

3.2.4 集群启动

  • 如果集群是第一次启动,需要在hadoop102节点上格式化NameNode(注意:格式化NameNode,会产生新的集群ID,导致NameNode和DataNode的集群ID不一致,集群找不到以往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程。并且要删除所有机器的data和logs目录,然后再进行格式化操作)

    #格式化namenode
    [xiaoyao@hadoop102 hadoop]$ hdfs namenode -format
    #启动HDFS
    [xiaoyao@hadoop102 sbin]$ ./start-dfs.sh 
    #启动yarn,在hadoop103上启动
    [xiaoyao@hadoop103 sbin]$ ./start-yarn.sh
    ##查看集群内进程状态
    [xiaoyao@hadoop102 sbin]$ jps
    22192 NodeManager
    21862 DataNode
    21757 NameNode
    22271 Jps
    
    [xiaoyao@hadoop103 sbin]$ jps
    21203 Jps
    21110 NodeManager
    20839 DataNode
    21004 ResourceManager
    
    [xiaoyao@hadoop104 ~]$ jps
    21154 Jps
    21065 NodeManager
    20877 DataNode
    20973 SecondaryNameNode
    
    
  • 在web界面查看HDFS的NameNode

    http://hadoop102:9870
    #查看HDFS上存储的数据信息
    
    
  • 在web界面查看YARN的ResourceManager

    http://hadoop103:8088
    #查看yarn上运行的Job信息
    
    

3.2.5 集群测试

  • 上传文件到集群

    #在hadoop102上创建一个目录,并上传文件到集群
    [xiaoyao@hadoop102 sbin]$ hadoop  fs  -mkdir  /wcinput
    [xiaoyao@hadoop102 sbin]$ hadoop  fs  -put /opt/module/hadoop-3.2.2/wcinput/test.txt /wcinput
    [xiaoyao@hadoop102 sbin]$ hadoop  fs    -put /opt/src/jdk-8u291-linux-x64.tar.gz /
    #可登录hadoop102:9870 查看上传的文件
    
    
  • 查看HDFS文件存储路径

    #我们在web界面查看的文件只是一个链接,其实文件是存储在datanode上
    #我们之前写的配置文件,数据是存放在/opt/module/hadoop-3.2.2/data目录下
    [xiaoyao@hadoop102 subdir0]$ pwd
    /opt/module/hadoop-3.2.2/data/dfs/data/current/BP-2047190783-192.168.10.102-1624737244756/current/finalized/subdir0/subdir0
    [xiaoyao@hadoop102 subdir0]$ ll
    总用量 142660
    -rw-rw-r--. 1 xiaoyao xiaoyao        43 6月  27 04:40 blk_1073741825
    -rw-rw-r--. 1 xiaoyao xiaoyao        11 6月  27 04:40 blk_1073741825_1001.meta
    -rw-rw-r--. 1 xiaoyao xiaoyao 134217728 6月  27 04:42 blk_1073741826
    -rw-rw-r--. 1 xiaoyao xiaoyao   1048583 6月  27 04:42 blk_1073741826_1002.meta
    -rw-rw-r--. 1 xiaoyao xiaoyao  10718261 6月  27 04:42 blk_1073741827
    -rw-rw-r--. 1 xiaoyao xiaoyao     83747 6月  27 04:42 blk_1073741827_1003.meta
    
    ##这里的数据就是我们刚上传的JDK压缩包和test.txt文件
    
    
  • 查看HDFS在磁盘存储文件内容

    [xiaoyao@hadoop102 subdir0]$ cat  blk_1073741825
    zhangsan  zhangsan
    lisi lisi
    jim
    tom
    lucy
    #这是test.txt文件中的内容
    ------------------------------------------------
    #使用拼接查找JDK压缩文件
    [xiaoyao@hadoop102 subdir0]$ cat  blk_1073741826 >>  tmp.tar.gz
    [xiaoyao@hadoop102 subdir0]$ cat  blk_1073741827 >>  tmp.tar.gz
    [xiaoyao@hadoop102 subdir0]$ tar  -zxvf  tmp.tar.gz 
    #解压完成后就是我们JDK的目录文件
    
    
  • 执行wordcount程序测试yarn工作

    [xiaoyao@hadoop102 hadoop-3.2.2]$ hadoop  jar  share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /wcinput /wcoutput
    #这条命令在执行过程中,去web界面hadoop103:8088上查看yarn工作
    #在yarn工作界面可以查看history,查看程序的历史运行情况,目前3.2版本默认已经配置历史服务器;如果是之前的hadoop版本,需要手动配置历史服务器
    
    

3.2.6 配置历史服务器

#配置mapred-site.xml
[xiaoyao@hadoop102 hadoop]$ cd  /opt/module/hadoop-3.2.2/etc/hadoop/
[xiaoyao@hadoop102 hadoop]$ vim  mapred-site.xml 
#在该文件中增加如下配置

  
     mapreduce.jobhistory.address
     hadoop102:10020
  

  
     mapreduce.jobhistory.webapp.address
     hadoop102:19888
  
##分发配置
[xiaoyao@hadoop102 hadoop]$ xsync mapred-site.xml
#在hadoop102上启动历史器
[xiaoyao@hadoop102 hadoop]$ mapred  --daemon start historyserver
#查看进程
[xiaoyao@hadoop102 hadoop]$ jps
22896 Jps
21862 DataNode
22875 JobHistoryServer
21757 NameNode

3.2.7 配置日志聚集

  • Hadoop3.2版本聚合了日志聚集功能,之前的版本需要手动配置

    #修改yarn-site.xml
    [xiaoyao@hadoop102 hadoop]$ cd  /opt/module/hadoop-3.2.2/etc/hadoop/
    [xiaoyao@hadoop102 hadoop]$ vim  yarn-site.xml 
    #在文件中增加如下内容
      
        
           yarn.log-aggregation-enable
           true
        
       
        
           yarn.log.server.url
           http://hadoop102:19888/jobhistory/logs
        
       
        
           yarn.log-aggregation.retain-seconds
           604800
        
    #分发配置
    [xiaoyao@hadoop102 hadoop]$ xsync yarn-site.xml
    #需要重启历史服务和yarn服务
    [xiaoyao@hadoop102 hadoop]$ mapred  --daemon stop  historyserver
    [xiaoyao@hadoop103 sbin]$ ./stop-yarn.sh   #在hadoop103上执行
    [xiaoyao@hadoop103 sbin]$ ./start-yarn.sh   #在hadoop103上执行
    [xiaoyao@hadoop102 hadoop]$ mapred  --daemon start  historyserver
    
    

3.2.8 集群启动/停止方式

  • 各个模块分开启动、停止

    #整体启动、停止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
    
    

3.2.9 编写hadoop集群常用脚本

#编写hadoop集群启停脚本(包含hdfs、yarn、historyserver)
[xiaoyao@hadoop102 hadoop-3.2.2]$ cd  /home/xiaoyao/
[xiaoyao@hadoop102 ~]$ cd bin/
[xiaoyao@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.2.2/sbin/start-dfs.sh"

    echo  “-----------------  启动YARN  --------------------”
    ssh  hadoop103 "/opt/module/hadoop-3.2.2/sbin/start-yarn.sh"

    echo  “-----------------  启动historyserver  --------------------”
    ssh  hadoop102 "/opt/module/hadoop-3.2.2/bin/mapred --daemon start historyserver"
;;
stop)
    echo  "=================  关闭Hadoop集群  ==================="

    echo  “-----------------  关闭historyserver  --------------------”
    ssh  hadoop102 "/opt/module/hadoop-3.2.2/bin/mapred --daemon stop historyserver"

    echo  “-----------------  关闭YARN  --------------------”
    ssh  hadoop103 "/opt/module/hadoop-3.2.2/sbin/stop-yarn.sh"

    echo  “-----------------  关闭HDFS  --------------------”
    ssh  hadoop102 "/opt/module/hadoop-3.2.2/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error...."
;;
esac
#增加执行权限
[xiaoyao@hadoop102 bin]$ chmod 777  myhadoop.sh 

#编写三台服务器Java进程脚本
[xiaoyao@hadoop102 bin]$ vim  jpsall
#!/bin/bash
for  host in hadoop102 hadoop103 hadoop104
do
       echo ===============  $host  ================
       ssh  $host jps
done 
#增加执行权限
[xiaoyao@hadoop102 bin]$ chmod 777 jpsall
#分发脚本
[xiaoyao@hadoop102 ~]$ xsync bin/

3.2.10 常见端口说明

端口名称 Hadoop2.X Hadoop3.X
NameNode内部通信端口 8020/9000 8020/9000/9820
NameNode外部访问端口 50070 9870
MapReduce查看执行任务端口 8088 8088
历史服务器通信端口 19888 19888

3.2.11 集群时间同步

  • 生产环境:如果服务器能够连接外网,则不需要配置时间同步

  • 生产环境:如果服务器无法连接外网,则需要配置时间同步

    #修改ntp配置文件,切换到root用户
    [root@hadoop102 ~]#  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
    #修改/etc/sysconfig/ntpd文件
    [root@hadoop102 ~]# cat /etc/sysconfig/ntpd
    OPTIONS="-g"
    SYNC_HWCLOCK=yes   #让硬件时间与系统时间一起同步
    
    #重启ntpd服务,并设置开机自启
    [root@hadoop102 ~]# systemctl restart  ntpd  &&  systemctl enable ntpd
    
    
    #其他节点配置,切换到root用户
    #关闭ntpd服务
    #添加计划任务,保证每一分钟与时间服务器同步一次
    [root@hadoop103 ~]# crontab -l
    */1 * * * * /usr/sbin/ntpdate hadoop102
    [root@hadoop104 ~]# crontab -l
    */1 * * * * /usr/sbin/ntpdate hadoop102
    
    

第四章 常见错误及解决方案

  • 防火墙没有关闭、或者没有启动YARN

    #常见报错信息
    INFO client.RMProxy: Connecting to ResourceManager of  hadoop103/192.168.10.103:8032
    
    
  • DataNode和NameNode进程同时只能工作一个

    1.namenode在初始化后会生成集群id
    2.datanode在启动后也会生成和namenode一样的集群id
    3.再次初始化NameNode,生成新的集群id,与未删除的DataNode的集群id不一致
    4.再格式化之前,需要关闭所有进程服务,再删除所有节点上的data和logs目录。然后再执行初始化操作