• Hadoop 概述(一)


    Hadoop概述信息

    hadoop 有三大组成部分,HDFS(分布式文件存储系统)、YARN(资源管理器)、MAPREDUCE(分布式计算框架) ,下边我们来简单介绍一下

    HDFS 分布式文件存储系统

    HDFS分布式文件系统,是由Google的GFS谷歌文件系统开源出来,其存储模型是有主从结构的,可以划分出来以下几点

      • NameNode(NN)
        基于内存存储,不会和磁盘发生交互,使用映射快照和日志文件进行持久化,保存元数据信息,
        以及保存文件名,文件属性,block块列表偏移量,位置信息和副本位置(block位置信息不会持久化,由 DN 心跳汇报)

      • DataNode(DN)
        以文件形式进行本地磁盘目录存储block块信息,同时会存储block块的元数据文件(MD5文件,用于校验文件完整性)
        启动 DN 时会向 NN 发送心跳信息,同时汇报block的位置信息,默认心跳时间是3秒一次,如果 NN 10分钟没有收到 DN 的心跳汇报,
        则认为其已经丢失,由于副本数会小于系统配置副本数,NN 会进行copy该block块信息到其他 DN 上

        1. block,是将文件线性切割成块,也是偏移量 offset,大小默认设置为128M,副本数默认为3个,分散存储在集群节点中,
          已上传的文件block副本数可以调整,大小不可以调整,只支持一次写入多次读取,同一时刻只有一个写入者

        2. 副本的放置位置的逻辑
          第一个副本:放置在上传文件的 DN,如果是集群外提交,则随机挑选一台磁盘不满,CPU不忙的
          第二个副本:放置在与同一个副本不同的机架上的某个 DN
          第三个副本:放置在与第二个副本同一个机架,不同的 DN 上
          更多个脚本:出去上边3个,其他随机放置在不同的 DN 上

      • SecondaryNameNode (2NN)
        它不是 NN 的备份,主要工作是帮助 NN 合并 fsimage 和 edits log信息,减少 NN 启动时间

        1. 2NN 执行合并文件的时机:根据配置的时间间隔 dfs.namenode.checkpoint.perid 默认是3600秒,
          或者根据配置文件设置一定数量的文件系统事物之后 dfs.namenode.checkpoint.txns,默认是 1000000次事物
          如果同时设置了这两个属性,则达到的哪一个阈值将触发一个检查点

        2. 2NN 合并的流程
          NN 在触发checkpoint时间节点,会将自己的fsimage 和 edits log 日志信息同步到 2NN。同时创建一个新的edits log
          2NN 会加载fsimage 并执行log日志里的命令,生成一个最新的fsimage.ckpt文件,此时fsimage.ckpt保存的快照信息就是从hadoop启动到当前checkpoint时间节点的信息。
          再次推送fsimage.ckpt 到 NN 转换成fsimage文件,此时会有一个checkpoint时间节点的快照文件,和checkpoint时间节点后的edits log日志文件
          当下次再次触发checkpoint时,2NN 只需要加载edits log日志文件就可以合并下一个最新的快照文件

      • 安全模式

        1. NN 启动的时候,首先将映射文件fsimage载入内存,并执行编辑日志edits log文件里的操作

        2. 一旦在内存中成功建立文件系统元数据的映射,则会创建一个新的fsimage 文件和一个空的edits log文件
          此刻 NN 是安全模式,即 NN 的文件系统对于客户端来说只读

        3. 此时,NN 接收到各个 DN 的心跳和汇报信息,会收集到数据块的位置等信息,当数据块达到最小副本数时,
          会被认为是安全的,在一定比例的数据块被确认为安全后,再过若干时间,安全模式结束

        4. 当检测到副本数不足的数据块,块会被复制到其他 DN 中,直到达到最小副本数,系统中数据块的位置并不是由 NN 维护,而是以块列表形式存储在 DN 中

    hadoop 概述一,已经写了hdfs的一些基本概念,那作为分布式文件系统,是怎么进行读写的?下边讲述hdfs的读写流程

    HDFS中读写流程中有一些额外的小的概念,下面讲述一下

    1. block
      blokc块,一般是128M,可以修改大小,但不推荐,原因如下:
    • 如果块设置过大,
      一方面,从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢;
      另一方面,mapreduce中的map任务通常一次只处理一个块中的数据,如果块过大运行速度也会很慢。

    • 如果块设置过小,
      一方面存放大量小文件会占用NameNode中大量内存来存储元数据,而NameNode的内存是有限的,不可取;
      另一方面文件块过小,寻址时间增大,导致程序一直在找block的开始位置。

    1. packet
      packet 它是client端向DataNode,或者DataNode之间使用PipLine传输的基本单位,默认64KB

    2. chunk
      它是client向DataNode,或者DataNode之间PipLine之间进行数据校验的基本单位,默认是512Byte,因为要用作校验,
      故每个chunk需要带有4Byte的校验位,一个chunk的大小是516Byte

    HDFS写流程

    写流程步骤

    1. 客户端向NameNode发出写文件请求,

    2. 检查文件是否已经存在,是否有权限写,如果校验通过,写入到edits log,并返回输出流对象和可写的DataNode列表

    3. 客户端按128MB的大小切分文件

    4. 客户端根据NameNode返回的可分配的可写DataNode列表,将Data数据发送给最近的一个DataNode节点写入一个packet,
      列表中其他可写DataNode节点会和第一个节点形成pipline管道,将packet在多个节点写入,使得多个DataNode节点可以同时写入

    5. 给个DataNode写完一个块后,会返回确认信息

    6. 写数据完成,关闭输出流

    7. 发送完成信号给NameNode

    HDFS读流程

    读流程步骤

    1. 客户端访问NameNode,查询元数据信息,获取这个文件按照距离排序的位置信息,返回输入流对象

    2. 选择最近的一台DataNode服务器,请求建立输入流

    3. 客户端从DataNode读取数据,以packet为单位,还要校验完整性

    4. 关闭输入流

    从我们之前搭建的hadoop来看HDFS存在如下问题

    1. NameNode 单点故障,难于应用于在线场景
    2. NameNode 压力过大,且内存受限,影响系统扩展性
    3. MapReduce jobTracker访问压力过大,影响系统扩展性

    那有没有解决方案呢?
    解决单点故障:HDFS HA 通过主备NameNode解决
    解决系统扩展性问题:使用HDFS Federation 水平扩展,支持多个NameNode,所有NameNode共享所有DataNode存储资源,每个NameNode分管一部分目录

    hadoop集群下几个好用的脚本工具 

    远程复制同步脚本

    1.通过scp直接拷贝

    一般Linux系统之间复制同步文件,或者文件夹使用的是scp,基本语法如下:

    scp -r sourceFile  username@host:destpath
    
    • 或者在有ssh免密登录的情况下可以使用如下命令
    scp -r sourceFile  host:$PWD
    
    2. 通过rsync来实现增量拷贝

    rsync 远程同步工具,rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

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

    (1) 基本语法

    rsync -av sourceFile username@host:destPath
    

    选项参数说明

    选项功能
    -a 归档拷贝
    -v 显示复制过程
    例如hadoop01执行以下命令同步zk安装包  
    rsync -av /bigdata/soft/apache-zookeeper-3.6.2-bin.tar.gz hadoop02:/bigdata/soft/
    
    3. 通过rsync来封装分发脚本

    我们可以通过rsync这个命令工具来实现脚本的分发,可以增量的将文件分发到我们所有其他的机器上面去
    (1)需求:循环复制文件到所有节点的相同目录下
    (2)需求分析:
    (a)rsync命令原始拷贝:

    rsync -av /bigdata/soft hadoop@hadoop02:/bigdata/soft
    

    (b)期望脚本使用方式:
    xsync要同步的文件名称
    (c)说明:在/home/hadoop/bin这个目录下存放的脚本,hadoop用户可以在系统任何地方直接执行。
    (3)脚本实现
    三台机器执行以下命令安装rsync工具

    sudo yum -y install rsync
    

    (a)在/home/hadoop目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:

    [hadoop@hadoop01 ~]$ cd ~
    [hadoop@hadoop01 ~]$ mkdir bin
    [hadoop@hadoop01 ~]$ cd /home/hadoop/bin
    [hadoop@hadoop01 bin]$ touch xsync
    [hadoop@hadoop01 bin]$ vim xsync
    

    在该文件中编写如下代码

    #!/bin/bash
    #1 获取输入参数个数,如果没有参数,直接退出
    pcount=$#
    if ((pcount==0)); then
    echo no args;
    exit;
    fi
    
    #2 获取文件名称
    p1=$1
    fname=`basename $p1`
    
    echo $fname
    
    #3 获取上级目录到绝对路径
    pdir=`cd -P $(dirname $p1); pwd`
    echo $pdir
    
    #4 获取当前用户名称
    user=`whoami`
    
    #5 循环
    for((host=1; host<4; host++)); do
           echo ------------------- hadoop0$host --------------
           rsync -av $pdir/$fname $user@hadoop0$host:$pdir
    done
    

    (b)修改脚本 xsync 具有执行权限

    [hadoop@hadoop01 bin]$ cd ~/bin/
    [hadoop@hadoop01 bin]$ chmod 777 xsync
    

    (c)调用脚本形式:xsync 文件名称

    [hadoop@hadoop01 bin]$ xsync /home/hadoop/bin/
    

    注意:如果将xsync放到/home/hadoop/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下

    一键启动hadoop集群的脚本

    • 为了便于一键启动hadoop集群,我们可以编写shell脚本
    • 在主节点hadoop01服务器的/home/hadoop/bin目录下创建脚本
    [hadoop@hadoop01 bin]$ cd /home/hadoop/bin/
    [hadoop@hadoop01 bin]$ vi hadoop.sh
    
    • 内容如下
    #!/bin/bash
    case $1 in
    "start" ){
     source /etc/profile;
     /bigdata/install/hadoop-3.1.4/sbin/start-dfs.sh
     /bigdata/install/hadoop-3.1.4/sbin/start-yarn.sh
     #/bigdata/install/hadoop-3.1.4/sbin/mr-jobhistory-daemon.sh start historyserver
     /bigdata/install/hadoop-3.1.4/bin/mapred --daemon start historyserver
    };;
    "stop"){
    
     /bigdata/install/hadoop-3.1.4/sbin/stop-dfs.sh
     /bigdata/install/hadoop-3.1.4/sbin/stop-yarn.sh
     #/bigdata/install/hadoop-3.1.4/sbin/mr-jobhistory-daemon.sh stop  historyserver
     /bigdata/install/hadoop-3.1.4/bin/mapred --daemon stop historyserver
    };;
    esac
    
    • 修改脚本权限
    [hadoop@hadoop01 bin]$ chmod 777 hadoop.sh
    [hadoop@hadoop01 bin]$ ./hadoop.sh start  # 启动hadoop集群
    [hadoop@hadoop01 bin]$ ./hadoop.sh stop   # 停止hadoop集群
    

    所有机器查看进程脚本

    • 我们也可以通过jps在每台机器上面查看进程名称,为了方便我们以后查看进程,我们可以通过脚本一键查看所有机器的进程
    • 在主节点hadoop01服务器的/home/hadoop/bin目录下创建文件xcall
    [hadoop@hadoop01 bin]$ cd ~/bin/
    [hadoop@hadoop01 bin]$ vi xcall
    
    • 添加以下内容
    #!/bin/bash
    
    params=$@
    for (( i=1 ; i <= 3 ; i = $i + 1 )) ; do
        echo ============= hadoop0$i $params =============
        ssh hadoop0$i "source /etc/profile;$params"
    done
    
    SHELL 复制 全屏
    • 然后一键查看进程并分发该脚本
    chmod 777  /home/hadoop/bin/xcall
    xsync /home/hadoop/bin/
    
    • 各节点应该启动的hadoop进程如下图
    xcall jps

    hadoop集群安装

    hadoop集群安装

    • 安装环境服务部署规划
    服务器IPnode01node02node03
    HDFS NameNode    
    HDFS SecondaryNameNode    
    HDFS DataNode DataNode DataNode
    YARN ResourceManager    
    YARN NodeManager NodeManager NodeManager
    历史日志服务器 JobHistoryServer    

    下载安装包,并解压

    下载

    目前hadoop已经更新到3.x版本,这次我们使用的是3.1.4版本
    使用国内清华大学的镜像库地址
    https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.4/
    将下载的压缩包保存在/bigdata/install

    解压
    cd /bigdata/install
    tar -zxf hadoop-3.1.4.tar.gz -C /bigdata/install/
    

    查看hadoop支持的压缩方式以及本地库

    在第一台机器执行以下命令

    cd /bigdata/install/hadoop-3.1.4/
    bin/hadoop checknative
    


    如果出现openssl为false,那么所有机器在线安装openssl即可,执行以下命令,虚拟机联网之后就可以在线进行安装了

    sudo yum -y install openssl-devel
    

    配置文件

    一共要修改5个文件hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

    修改hadoop-env.sh

    第一台机器执行以下命令

    cd /bigdata/install/hadoop-3.1.4/etc/hadoop
    vi hadoop-env.sh
    

    查找到JAVA_HOME的配置信息,修改为下边信息

    export JAVA_HOME=/bigdata/install/jdk1.8.0_141
    
    修改core-site.xml

    第一台机器执行以下命令

    vi core-site.xml
    
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop01:8020</value>
        </property>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/bigdata/install/hadoop-3.1.4/hadoopDatas/tempDatas</value>
        </property>
        <!--  缓冲区大小,实际工作中根据服务器性能动态调整;默认值4096 -->
        <property>
            <name>io.file.buffer.size</name>
            <value>4096</value>
        </property>
        <!--  开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟;默认值0 -->
        <property>
            <name>fs.trash.interval</name>
            <value>10080</value>
        </property>
    </configuration>
    
    修改hdfs-site.xml

    第一台机器执行以下命令

    vi hdfs-site.xml
    
    <configuration>
        <!-- NameNode存储元数据信息的路径,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割   --> 
         <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop01:9868</value>
        </property>
        <property>
            <name>dfs.namenode.http-address</name>
            <value>hadoop01:9870</value>
        </property>
        <!-- namenode保存fsimage的路径 -->
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:///bigdata/install/hadoop-3.1.4/hadoopDatas/namenodeDatas</value>
        </property>
        <!--  定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割  -->
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:///bigdata/install/hadoop-3.1.4/hadoopDatas/datanodeDatas</value>
        </property>
        <!-- namenode保存editslog的目录 -->
        <property>
            <name>dfs.namenode.edits.dir</name>
            <value>file:///bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/nn/edits</value>
        </property>
        <!-- secondarynamenode保存待合并的fsimage -->
        <property>
            <name>dfs.namenode.checkpoint.dir</name>
            <value>file:///bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/snn/name</value>
        </property>
        <!-- secondarynamenode保存待合并的editslog -->
        <property>
            <name>dfs.namenode.checkpoint.edits.dir</name>
            <value>file:///bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/nn/snn/edits</value>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <property>
            <name>dfs.permissions.enabled</name>
            <value>false</value>
        </property>
    	<property>
            <name>dfs.blocksize</name>
            <value>134217728</value>
        </property>
    </configuration>
    
    修改mapred-site.xml

    第一台机器执行以下命令

    vi mapred-site.xml
    
    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        <property>
            <name>mapreduce.job.ubertask.enable</name>
            <value>true</value>
        </property>
        <property>
            <name>mapreduce.jobhistory.address</name>
            <value>hadoop01:10020</value>
        </property>
        <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>hadoop01:19888</value>
        </property>
            <property>
            <name>yarn.app.mapreduce.am.env</name>
            <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
        </property>
        <property>
            <name>mapreduce.map.env</name>
            <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
        </property>
        <property>
            <name>mapreduce.reduce.env</name>
            <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
        </property>
    </configuration>
    
    修改yarn-site.xml

    第一台机器执行以下命令

    vi yarn-site.xml
    
    <configuration>
        <property>
           <name>yarn.resourcemanager.hostname</name>
            <value>hadoop01</value>
        </property>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <!-- 如果vmem、pmem资源不够,会报错,此处将资源监察置为false -->
        <property>
            <name>yarn.nodemanager.vmem-check-enabled</name>
            <value>false</value>
        </property>
        <property>
            <name>yarn.nodemanager.pmem-check-enabled</name>
            <value>false</value>
        </property>
    </configuration>
    
    修改workers文件

    第一台机器执行以下命令

    vi workers
    

    把里面内容全部删除后替换为

    hadoop01
    hadoop02
    hadoop03
    

    创建文件存放目录

    第一台机器执行以下命令

    hadoop01机器上面创建以下目录

    mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/tempDatas
    mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/namenodeDatas
    mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/datanodeDatas 
    mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/nn/edits
    mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/snn/name
    mkdir -p /bigdata/install/hadoop-3.1.4/hadoopDatas/dfs/nn/snn/edits
    

    hadoop01执行以下命令进行拷贝

    cd /bigdata/install
    scp -r hadoop-3.1.4/ hadoop02:$PWD
    scp -r hadoop-3.1.4/ hadoop03:$PWD
    

    配置hadoop的环境变量

    三台机器都要进行配置hadoop的环境变量,三台机器执行以下命令

    sudo vi /etc/profile
    
    export HADOOP_HOME=/bigdata/install/hadoop-3.1.4
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    

    配置完成之后生效

    source /etc/profile
    

    集群启动以及验证

    格式化集群
    • 要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个集群。
    • 注意:首次启动HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的 HDFS 在物理上还是不存在的。格式化操作只有在首次启动的时候需要,以后再也不需要了
    • hadoop01执行一遍即可
    hdfs namenode -format
    
    • 或者
    hadoop namenode –format
    
    • 下图高亮表示格式化成功;
    集群启动
    • 启动集群有两种方式:
      • ①脚本一键启动;
      • ②单个进程逐个启动
    1. 启动HDFS、YARN、Historyserver
    • 如果配置了 etc/hadoop/workers 和 ssh 免密登录,则可以使用程序脚本启动所有Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。
    • 启动集群
    • 主节点hadoop01节点上执行以下命令
    start-dfs.sh
    start-yarn.sh
    # 已过时mr-jobhistory-daemon.sh start historyserver
    mapred --daemon start historyserver
    
    • 停止集群(主节点hadoop01节点上执行):
    stop-dfs.sh
    stop-yarn.sh 
    # 已过时 mr-jobhistory-daemon.sh stop historyserver
    mapred --daemon stop historyserver
    
    2. 单个进程逐个启动
    # 在主节点上使用以下命令启动 HDFS NameNode: 
    # 已过时 hadoop-daemon.sh start namenode 
    hdfs --daemon start namenode
    
    # 在主节点上使用以下命令启动 HDFS SecondaryNamenode: 
    # 已过时 hadoop-daemon.sh start secondarynamenode 
    hdfs --daemon start secondarynamenode
    
    # 在每个从节点上使用以下命令启动 HDFS DataNode: 
    # 已过时 hadoop-daemon.sh start datanode
    hdfs --daemon start datanode
    
    # 在主节点上使用以下命令启动 YARN ResourceManager: 
    # 已过时 yarn-daemon.sh start resourcemanager 
    yarn --daemon start resourcemanager
    
    # 在每个从节点上使用以下命令启动 YARN nodemanager: 
    # 已过时 yarn-daemon.sh start nodemanager 
    yarn --daemon start nodemanager
    
    以上脚本位于$HADOOP_HOME/sbin/目录下。如果想要停止某个节点上某个角色,只需要把命令中的start 改为stop 即可。
    
    验证访问web ui界面

    hadoop HA高可用搭建

    接上回hadoop概述二,我们了解到了hdfs有弊端,需要搭建HA,通过官网查看有2中方式进行高可用。一种基于QJM方式的,另一种基于联邦的,
    我们今天先来使用QJM方案来做hadoop的高可用,使用4台服务器来做集群,还会用到zookeeper来做主备切换的调控

    先说一下我们的IP分配和服务的规划信息

    • 节点和IP

      节点IP
      ha01 192.168.56.20
      ha02 192.168.56.21
      ha03 192.168.56.22
      ha04 192.168.56.23
    • 服务规划

      节点namenodenamenodedatanodezookeeperzkFCJournalnode
      ha01 *       * *
      ha02   * * * * *
      ha03     * *   *
      ha04     * *    

    修改4台服务器的/etc/hosts文件,追加IP和节点信息,HA集群需要用到ssh免密登录,这里免密登录有2中场景

    1. ha01控制执行hadoop脚本会用到免密登录到其他机器
    2. 两个namenode进行主备切换时需要登录到对方机器,杀死对方的相应进程,然后提升自己节点的为激活状态
    vi /etc/hosts
    192.168.56.20	ha01
    192.168.56.21	ha02
    192.168.56.22	ha03
    192.168.56.23	ha04
    
    保存退出后执行/etc/init.d/network restart ,生效hosts文件内容
    

    安装zk

    以前已写了安装zk教程,请查看之前的zookeeper集群安装的教程,本次需要安装的是ha02,ha03,ha04,切换成对应的机器信息即可

    免密登录

    我们使用的hadoop用户,所以我们就在hadoop用户的家目录下进行创建免密登录的信息,其他3台相同操作

    [hadoop@ha01 ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    [hadoop@ha01 ~]$ ssh-copy-id ha01          ##复制公钥信息到authorized_keys中
    

    配置hadoop信息

    • hadoop.env.sh
    cd /bigdata/install/hadoop-3.1.4/etc/hadoop/
    vi hadoop.env.sh
    
    找到JAVA_HOME和HADOOP_HOME,对该配置项进行编辑,并去掉注释符
    JAVA_HOME=/bigdata/install/jdk1.8.0_141
    HADOOP_HOME=/bigdata/install/hadoop-3.1.4
    
    • core-site.xml
    vi core-site.xml
    <configuration>
    	<property>
    	  <name>fs.defaultFS</name>
    	  <value>hdfs://mycluster</value>
    	</property>
    	<!--  hadoop临时目录 -->
    	<property>
    	    <name>hadoop.tmp.dir</name>
    	    <value>/bigdata/install/hadoop-3.1.4/hadoopDatas/tempDatas</value>
    	</property>
    	<!--  zk 集群信息 -->
    	 <property>
    	   <name>ha.zookeeper.quorum</name>
    	   <value>ha02:2181,ha03:2181,ha04:2181</value>
    	 </property>
    	<!--  缓冲区大小,实际工作中根据服务器性能动态调整;默认值4096 -->
    	<property>
    	    <name>io.file.buffer.size</name>
    	    <value>4096</value>
    	</property>
    </configuration>
    
    • hdfs-site.xml
    <configuration>
    	<property>
    	  <name>dfs.nameservices</name>
    	  <value>mycluster</value>
    	</property>
    	<property>
    	  <name>dfs.ha.namenodes.mycluster</name>
    	  <value>nn1,nn2</value>
    	</property>
    	<property>
    	  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    	  <value>ha01:8020</value>
    	</property>
    	<property>
    	  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    	  <value>ha02:8020</value>
    	</property>
    	<property>
    	  <name>dfs.namenode.http-address.mycluster.nn1</name>
    	  <value>ha01:9870</value>
    	</property>
    	<property>
    	  <name>dfs.namenode.http-address.mycluster.nn2</name>
    	  <value>ha02:9870</value>
    	</property>
    	<property>
    	  <name>dfs.namenode.shared.edits.dir</name>
    	  <value>qjournal://ha01:8485;ha02:8485;ha03:8485/mycluster</value>
    	</property>
    	<property>
    	  <name>dfs.journalnode.edits.dir</name>
    	  <value>/bigdata/install/hadoop-3.1.4/hadoopDatas/journal</value>
    	</property>
    	<property>
    	  <name>dfs.client.failover.proxy.provider.mycluster</name>
    	  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    	</property>
    	<property>
    	  <name>dfs.ha.fencing.methods</name>
    	  <value>sshfence</value>
    	</property>
    	<property>
    	  <name>dfs.ha.fencing.ssh.private-key-files</name>
    	  <value>/home/hadoop/.ssh/id_rsa</value>
    	</property>
    	<property>
    	   <name>dfs.ha.automatic-failover.enabled</name>
    	   <value>true</value>
    	 </property>
    
    	<property>
    	    <name>dfs.replication</name>
    	    <value>3</value>
    	</property>
    	<property>
    	    <name>dfs.permissions.enabled</name>
    	    <value>false</value>
    	</property>
    	<property>
    	    <name>dfs.blocksize</name>
    	    <value>134217728</value>
    	</property>
    </configuration>
    
    • yarn-site.xml
    <configuration>
    	<property>
    	  <name>yarn.resourcemanager.ha.enabled</name>
    	  <value>true</value>
    	</property>
    	<property>
    	  <name>yarn.resourcemanager.cluster-id</name>
    	  <value>cluster1</value>
    	</property>
    	<property>
    	  <name>yarn.resourcemanager.ha.rm-ids</name>
    	  <value>rm1,rm2</value>
    	</property>
    	<property>
    	  <name>yarn.resourcemanager.hostname.rm1</name>
    	  <value>ha01</value>
    	</property>
    	<property>
    	  <name>yarn.resourcemanager.hostname.rm2</name>
    	  <value>ha02</value>
    	</property>
    	<property>
    	  <name>yarn.resourcemanager.webapp.address.rm1</name>
    	  <value>ha01:8088</value>
    	</property>
    	<property>
    	  <name>yarn.resourcemanager.webapp.address.rm2</name>
    	  <value>ha02:8088</value>
    	</property>
    	<property>
    	  <name>hadoop.zk.address</name>
    	  <value>ha02:2181,ha03:2181,ha04:2181</value>
    	</property>
      <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
      <!-- 如果vmem、pmem资源不够,会报错,此处将资源监察置为false -->
      <property>
          <name>yarn.nodemanager.vmem-check-enabled</name>
          <value>false</value>
      </property>
      <property>
          <name>yarn.nodemanager.pmem-check-enabled</name>
          <value>false</value>
      </property>
    </configuration>
    
    • works
    vi works,works里面表示的datanode节点的名称,我们这里是ha02-ha04
    ha02
    ha03
    ha04
    

    注意
    由于我们在安装centos7的时候选择了最小化安装,默认是不安装psmics。但在ZKFC中会使用到里面的命令来进行主从切换,否则切换失败,所以需安装psmisc
    yum -y install psmisc
    简短说明,包含fuser,killall,pstree三个程序

    fuser 显示使用指定文件或者文件系统的进程的PID。
    killall 杀死某个名字的进程,它向运行指定命令的所有进程发出信号。
    pstree 树型显示当前运行的进程。

    集群启动验证

    1. 启动zookeeper集群
      由于我们在ha02/ha03/ha04安装zookeeper,启动是在这3台进行
      zkServer.sh start

    2.启动journalnode
    JN我们规划是在ha01/ha02/ha03,在这3台分别执行
    hadoop-daemon.sh start journalnode

    3.格式化namenode,启动主从namenode
    格式化是hdfs中namenode第一次启动时要进行的操作,这里做了集群后是2个namenode,挑选一台,比如我们选的是ha01
    ha01执行 hdfs namenode -format
    启动主从namenode,
    在ha01执行 hadoop-daemon.sh start namenode

    在ha02执行 hdfs namenode -bootstrapStandby

    4.格式化zk
    在启动ZKFC时需要依赖zookeeper集群,上边已启动集群,对zookeeper集群格式化
    在ha01执行 hdfs zkfc -formatZK

    5.启动其他服务
    现在就可以启动其他服务了,我们在ha01执行 start-dfs.sh

    然后在4台机器上输入jps查看是否是我们规划的服务信息

     
     
     
  • 相关阅读:
    关于浏览器及系统的判断
    toggle与slideToggle
    安卓与ios的不同处理
    关于常用循环遍历获取数据
    docker
    Mysql
    rabbitMQ的使用转载
    Git命令行
    vue项目创建完整版
    redis操作(str.hash.list.set)
  • 原文地址:https://www.cnblogs.com/hanease/p/16221015.html
Copyright © 2020-2023  润新知