栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hadoop-HA 高可用集群搭建

Hadoop-HA 高可用集群搭建

阶段一(非实操):搭建普通集群(非HA,了解一下即可) 

 一、完全分布式集群

1.规划
    Hadoop中的进程在多台机器运行!

    HDFS:  1个NN+N个DN N个2NN
    YARN:  1个RM+N个NM

    避免单点故障,NN和RM建议分散到多台机器!
    注意负载均衡

hadoop101    hadoop102     hadoop103
      DN                 DN                 DN
      NM                 NM                NM
      NN                 RM                2NN

2.准备集群,安装软件

①克隆三台虚拟机
        a)在每台机器的/etc/hosts中配置集群所有机器的ip和主机名的映射
        b)提供atguigu用户,配置atguigu用户具有root权限
        c)保证三台机器可以互相联通
②安装软件,在一台机器安装,再将这台机器的软件复制到其他机器

二、常用命令

1. scp(安全拷贝)
        全量复制!
        使用: scp -r  源文件用户名A@主机名1:path1    目标文件用户名B@主机名2:path2
                -r: 递归,复制目录
                
                如果从本机执行读取或写入,用户名B@主机名2:可以省略!
        
        在主机1上,使用A用户读取path1的文件,再使用用户B登录到主机2,在主机2的path2路径执行写入!
        
        要求: 用户名A@主机名1 对path1有读权限
               用户名B@主机名2 对path2有写权限
               
2. rsync (远程同步)
        可以只同步变化的文件(对比文件的修改时间)!增量同步!
        
        使用: rsync -rvlt   path1    目标文件用户名B@主机名2:path2
                -r: 递归,复制目录
                -v: 显示复制的过程
                -l:  同步软连接
                -t:  基于文件的修改时间进行对比,只同步修改时间不同的文件
                
        只能将本机的文件同步到其他机器!
        
        注意:  rsync -rvlt   path1    目标文件用户名B@主机名2:path2
        
        path1是个目录,目录以/结尾,只会同步目录中的内容,不会同步目录本身!
        path1是个目录,目录不以/结尾,同步目录中的内容,也会同步目录本身!
            
3. 免输入密码登录,借助SSH实现

        举例:  A机器的a用户,希望在A机器上,使用b用户的身份登录到B机器!
        
        实现步骤: ①A机器的a用户,在A机器上生成一对密钥
                                    ssh-keygen -t rsa

                           ②密钥分为公钥和私钥,a用户需要将公钥拷贝到B机器上b用户的家目录下的
                                authorithxxxx_keys

                                    a)使用b用户登录到B机器
                                    b)编辑authorithxxxx_keys,将公钥的内容进行添加
                                    
                                也可以在A机器,使用a用户执行以下命令: ssh-copy-id  b@B
                                
                           ③A机器的a用户,可以使用 ssh  b@B进行登录!
                           
                注意: 如果使用ssh 直接登录 主机名
                            默认使用当前用户对目标主机进行登录!
                            
4. 编写同步脚本xsync

        作用: 将当前机器的文件,同步到集群所有机器的相同路径下!
                    hadoop102:/A/a , 执行脚本后,将此文件同步到集群中所有机器的 /A/a
        
        用户在使用xsync时,只需要传入要同步的文件即可
                xysnc a 
                不管a是一个相对路径还是绝对路径,都需要将a转换为绝对路径!
                
        文件的绝对路径:  
                父路径:  dirpath=$(cd `dirname /home/atguigu/hi`; pwd -P)
                文件名:  filename=`basename hi`
                    
        核心命令:  
                for(())
                do
                    rsync -rvlt   path1
                done

一、使用ssh执行命令

①ssh 目标机器 

        登录之后,执行某个命令!
        属于Login-shell,会自动读取 /etc/profile文件中定义的所有的变量!
        
②ssh 目标机器  命令

        属于non-login-shell
        不会读取/etc/profile
        
        如果在使用命令时,我们需要使用/etc/profile定义的一些变量,需要在
        目标机器的对应的用户的家目录/.bashrc中添加以下代码
        
        source /etc/profile
        
        如果不添加以上代码,在执行start-all.sh | stop-all.sh一定会报错!
        
二、启动Hadoop

HDFS
    ①需要在NN所配置的节点进行格式化
    ②在不同的节点启动不同的进程
    
三、运行群起脚本

①群起脚本的原理是获取集群中所有的节点的主机名
            默认读取当前机器 HADOOP_HOME/etc/hadoop/slaves,获取集群中所有的节点的主机名
        
②循环执行 ssh 主机名 hadoop-daemon.sh start xxx
            保证当前机器到其他节点,已经配置了ssh免密登录
            保证集群中所有当前用户的家目录/.bashrc中,已经配置source /etc/profile
        
注意: start-all.sh时,其实分别调用了start-dfs.sh和start-yarn.sh
            start-dfs.sh可以在集群的任意一台机器使用!可以启动HDFS中的所有进程!
            start-yarn.sh在集群的非RM所在的机器使用,不会启动resourcemanager!
            
建议: 只需要配置RM所在机器到其他机器的SSH免密登录!
            都在RM所在的机器执行群起和群停脚本!
            xsync和xcall只放在RM所在的机器即可!

设置集群时间同步 

方式:

        找一个机器作为时间服务器,所有的机器与这台集群时间进行定时的同步。比如每隔十分钟同步一次时间。

原因:

        很多集群操作对时间同步的要求性很高,最高的像Hbase,要求不差不能超过秒级。

注意:

        这只是“同步”,并不保证时间一定是正确的。

协议:

        ntp协议

1. 检查ntp是否安装,需要有ntp和ntpdate

  • rpm -qa | grep ntp

如未安装输入命令安装:

  • xcall yum -y install ntp
  • xcall yum -y install ntpdate

2.检查ntp服务是否处于关闭状态,必须要确保当前ntp处于关闭状态

如未关闭,输入命令

  • xcall systemctl stop ntpd

3. 修改ntp配置文件 vim /etc/ntp.conf

server 127.127.1.0
fudge 127.127.1.0 stratum 10

 4. 修改/etc/sysconfig/ntpd 文件,让硬件时间与系统时间一起同步

  • echo "SYNC_HWCLOCK=yes" >> /etc/sysconfig/ntpd

5. 启动ntpd服务

  • systemctl restart ntpd

6. 设置ntpd服务开机启动

  • systemctl enable ntpd

7. 其他机器配置

在其他机器上配置10分钟与时间服务器(hadoop102)同步一次

  • crontab -e

编写定时任务

  • */10 * * * * /usr/sbin/ntpdate hadoop102

测试:修改任意及其实践

        date -s "2020-01-01 11:11:11"

测试:十分钟后查看及其实践是否与时间服务器同步

        date

xsync 集群分发脚本
#!/bin/bash
#校验参数是否合法
if(($#==0)); then
	echo "请输入要分发的文件"
	exit;
fi

#获取分发文件的绝对路径
dirpath=$(cd `dirname $1`;pwd -P)
filename=`basename $1`

echo "要分发的文件的路径是:$dirpath/$filename"

#循环执行rsync分发文件到集群的每条机器
for (( i = 101; i <= 103; i++ )); do
	echo "--------------------hadoop$i-------------------"
	rsync -rvlt $dirpath/$filename root@hadoop$i:$dirpath
done
xcall 集群群起脚本
#!/bin/bash
#在集群的所有机器上批量执行统一条命令
if(($#==0));then
	echo "请输入您要操作的命令!"
fi

echo "要执行的命令是$*"

#循环执行此命令
for (( i = 101; i <= 103; i++ )); do
	echo "---------------------hadoop$i-------------------"
	ssh hadoop$i $*
done
配置文件  core-site.xml









    fs.defaultFS
    hdfs://hadoop101:9000




	hadoop.tmp.dir
	/opt/module/hadoop-2.7.2/data/tmp



hdfs-site.xml









	dfs.namenode.secondary.http-address
	hadoop103:50090



mapred-site.xml









	mapreduce.framework.name
	yarn



	mapreduce.jobhistory.address
	hadoop101:10020


    mapreduce.jobhistory.webapp.address
    hadoop101:19888


 
	yarn.log.server.url         
	http://hadoop101:19888/jobhistory/logs 



yarn-site.xml





	yarn.nodemanager.aux-services
	mapreduce_shuffle



	yarn.resourcemanager.hostname
	hadoop102



	yarn.log-aggregation-enable
	true



	yarn.log-aggregation.retain-seconds
	604800



	yarn.nodemanager.resource.memory-mb
	20480





 阶段二(非实操):搭建 HDFS-HA 和 YARN-HA

 一、Hadoop的HA

1. HA
        H(high)A(avilable): 高可用,意味着必须有容错机制,不能因为集群故障导致不可用!
        
        HDFS: 满足高可用
                    NN:  一个集群只有一个,负责接受客户端请求!
                    DN:  一个集群可以启动N个
        YARN: 满足高可用
                    RM:  一个集群只有一个,负责接受客户端请求!
                    NM:  一个集群可以启动N个
                    
        实现hadoop的HA,必须保证在NN和RM故障时,采取容错机制,可以让集群继续使用!
        
2. 防止故障
    核心: 避免NN和RM单点故障
    以HDFS的HA为例:
            ①NN启动多个进程,一旦当前正在提供服务的NN故障了,让其他的备用的NN继续顶上
            ②NN负责接受客户端的请求

                    在接收客户端的写请求时,NN还负责记录用户上传文件的元数据

                    保证: 正在提供服务的NN,必须和备用的NN之中的元数据必须是一致的!
                
    元数据的同步:    

           ①在active的nn格式化后,将空白的fsimage文件拷贝到所有的nn的机器上

           ②active的nn在启动后,将edits文件中的内容发送给Journalnode进程,standby状态的nn主动从Journalnode进程拷贝数据,保证元数据的同步
                                  
    注意:  

        ①Journalnode在设计时,采用paxos协议, Journalnode适合在奇数台机器上启动!在hadoop中,要求至少需要3个Journalnode进程

        ②如果开启了hdfs的ha,不能再启动2nn
                
        ③当启动了多个NN时,是否允许多个NN同时提供服务?
                不允许多个NN同时对外提供服务,因为如果多个NN同时对外提供服务,那么
                在同步元数据时,非常消耗性能,而且容易出错!
                
                在同一时刻,最多只能有一个NN作为主节点,对外提供服务!
                其余的NN,作为备用节点!
                
                使用active状态来标记主节点,使用standby状态标记备用节点! 

3. HDFS HA的搭建步骤
①配置
        ①对 fs.defaultFS=hdfs://hadoop101:9000 进行修改
        
        ②在整个集群中需要启动N个NN,配置N个NN运行的主机和开放的端口!
        
        ③配置Journalnode
        
②启动
        ①先启动Journalnode
        ②格式化NN,精格式化后的fsimage文件同步到其他的NN
        ③启动所有的NN,需要将其中之一转为active状态

core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml
阶段三(实操部分):HA集群的搭建
安装前环境搭建 1、准备三台虚拟机,三台虚拟机的静态ip和主机名分别是:
  • 192.168.1.101 hadoop101
  • 192.168.1.102 hadoop102
  • 192.168.1.103 hadoop103

分别修改三台机器的主机名,命令:

  • hostnamectl set-hostname hadoop101
  • hostnamectl set-hostname hadoop102
  • hostnamectl set-hostname hadoop103

分别修改三台机器的静态ip,命令:

  • sed -i 's/dhcp/static/' /etc/sysconfig/network-scripts/ifcfg-ens33
  • echo "IPADDR=192.168.1.102" >> /etc/sysconfig/network-scripts/ifcfg-ens33
  • echo "NETMASK=255.255.255.0" >> /etc/sysconfig/network-scripts/ifcfg-ens33
  • echo "GATEWAY=192.168.1.2" >> /etc/sysconfig/network-scripts/ifcfg-ens33
  • echo "DNS1=114.114.114.114" >> /etc/sysconfig/network-scripts/ifcfg-ens33
  • echo "DNS2=8.8.8.8" >> /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="4e1e2799-2457-4fbd-8f14-e182cacb0898"
DEVICE="ens33"
onBOOT="yes"
IPADDR=192.168.1.101
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
DNS1=114.114.114.114
DNS2=8.8.8.8

分别重启三台机器的网卡

  • systemctl restart network
2、在hadoop102节点编辑 /etc/hosts 主机映射文件
  • vi /etc/hosts
  • sed '$a192.168.1.101 hadoop101' /etc/hosts
  • sed '$a192.168.1.102 hadoop102' /etc/hosts
  • sed '$a192.168.1.103 hadoop103' /etc/hosts

内容如下:

192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
3、配置ssh免登录,先把hadoop102节点到其他节点的免密登录配好
  • 生成私钥和公钥
    • ssh-keygen -t rsa
  • 将公钥拷贝分别拷贝到 hadoop101、hadoop102、hadoop103节点
    • ssh-copy-id hadoop101
    • ssh-copy-id hadoop102
    • ssh-copy-id hadoop103
4、编写hadoop102节点 xcall 脚本保存在 /root/bin,没有则创建这个目录,提升可执行权限(xcall脚本核心命令:ssh 用户名@主机名 需要执行的操作)
  • mkdir /root/bin
  • touch /root/bin/xcall
  • chmod -R +x /root/bin/xcall
  • vi /root/bin/xcall
#!/bin/bash
#在集群的所有机器上批量执行统一条命令
if(($#==0));then
	echo "请输入您要操作的命令!"
fi

echo "要执行的命令是$*"

#循环执行此命令
for (( i = 101; i <= 103; i++ )); do
	echo "---------------------hadoop$i-------------------"
	ssh hadoop$i $*
done
7、更改下载源,安装必要软件

更改三台机器下载源为阿里云

  • xcall yum -y install wget
  • xcall wget -O CentOS-base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  • xcall yum clean all
  • xcall yum makecache

在三台机器安装vim

  • xcall yum -y install vim

在三台机器安装psmisc

  • xcall yum -y install psmisc

安装分发软件rsync

  • xcall yum -y install rsync
5、编写hadoop102节点 xsync 脚本保存在 /root/bin,没有则创建这个目录,提升可执行权限(xsync核心脚本:rsync -rvlt 源目录或文件 用户名@主机名:目标目录或文件)
  • touch /root/bin/xsync
  • chmod -R +x /root/bin/xsync
  • vi /root/bin/xsync
#!/bin/bash
#校验参数是否合法
if(($#==0)); then
	echo "请输入要分发的文件"
	exit;
fi

#获取分发文件的绝对路径
dirpath=$(cd `dirname $1`;pwd -P)
filename=`basename $1`

echo "要分发的文件的路径是:$dirpath/$filename"

#循环执行rsync分发文件到集群的每条机器
for (( i = 101; i <= 103; i++ )); do
	echo "--------------------hadoop$i-------------------"
	rsync -rvlt $dirpath/$filename root@hadoop$i:$dirpath
done
6、使用xsync脚本将 /etc/hosts 文件分发到每个节点
  • xsync /etc/hosts
7、在hadoop102节点的 /root/bashrc文件末尾加上 source /etc/profile命令,并使用xsync脚本分发一下
  • sed -i '$asource /etc/profile' /root/.bashrc
  • xsync /root/.bashrc
8、将另外两个节点登录到其他节点的免密登录全部配好
  • hadoop101 登录 hadoop101、102、103
  • hadoop103 登录 hadoop101、102、103
9、关闭防火墙,并设置开机不自启动
  • systemctl stop firewalld
  • systemctl disable firewalld

软件安装配置 1、将 jdk、hadoop、zookeeper的tar包都解压安装到hadoop102节点的安装目录,并配置环境变量
  • 创建安装目录:jdk180、hadoop260、zookeeper345
    • mkdir -p /opt/soft/jdk180
    • mkdir -p /opt/soft/hadoop260
    • mkdir -p /opt/soft/zookeeper345
  • 将所有的tar包上传到 /opt 目录下
  • tar -zxvf 压缩包名 -C 安装目录 --strip-components 1
    • tar -zxvf /opt/jdk-8u251-linux-x64.tar.gz -C /opt/soft/jdk180/ --strip-components 1
    • tar -zxvf /opt/hadoop-2.6.0-cdh5.14.2.tar.gz -C /opt/soft/hadoop260/ --strip-components 1
    • tar -zxvf /opt/zookeeper-3.4.5-cdh5.14.2.tar.gz -C /opt/soft/zookeeper345/ --strip-components 1
  • 配置 /etc/profile 各个软件的环境变量
    • sed -i '$a\n' /etc/profile

    • echo "#java environment" >> /etc/profile

    • echo "export JAVA_HOME=/opt/soft/jdk180" >> /etc/profile

    • echo "export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
      export PATH=$PATH:${JAVA_HOME}/bin" >> /etc/profile

    • sed -i '$a\n' /etc/profile

    • echo "#hadoop environment" >> /etc/profile

    • echo "export HADOOP_HOME=/opt/soft/hadoop260" >> /etc/profile

    • echo "export HADOOP_MAPRED_HOME=$HADOOP_HOME" >> /etc/profile

    • echo "export HADOOP_COMMON_HOME=$HADOOP_HOME" >> /etc/profile

    • echo "export HADOOP_HDFS_HOME=$HADOOP_HOME" >> /etc/profile

    • echo "export YARN_HOME=$HADOOP_HOME" >> /etc/profile

    • echo "export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native" >> /etc/profile

    • echo "export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin" >> /etc/profile

    • echo "export HADOOP_INSTALL=$HADOOP_HOME" >> /etc/profile

    • sed -i '$a\n' /etc/profile

    • echo "#zookeeper environment" >> /etc/profile

    • echo "export ZOOKEEPER_HOME=/opt/soft/zookeeper345" >> /etc/profile

    • echo "export PATH=$PATH:$ZOOKEEPER_HOME/bin" >> /etc/profile

重新编译 profile文件

source /etc/profile

如下图所示:

#java environment
export JAVA_HOME=/opt/soft/jdk180
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

#hadoop environment
export HADOOP_HOME=/opt/soft/hadoop260
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME

#zookeeper environment
export ZOOKEEPER_HOME=/opt/soft/zookeeper345
export PATH=$PATH:$ZOOKEEPER_HOME/bin
2、将 $HADOOP_HOME/etc/hadoop下的四个配置文件改为前面阶段二的四个配置文件的内容
  • hadoop-env.sh ,将里面的 export JAVA_HOME= 改为jdk安装目录的绝对地址
    • sed -i 's/${JAVA_HOME}//opt/soft/jdk180/' $HADOOP_HOME/etc/hadoop/hadoop-env.sh
  • core-site.xml ,原来就有 ,直接改内容
    • vim $HADOOP_HOME/etc/hadoop/core-site.xml
core-site.xml







	
	
		fs.defaultFS
		hdfs://mycluster
	

	
	
		hadoop.tmp.dir
		file:///opt/soft/hadoop260/tmp
	
	
	
	
		io.file.buffer.size
		4096
	

	
	
		ha.zookeeper.quorum
		hadoop101:2181,hadoop102:2181,hadoop103:2181
	
	
	
	
		hadoop.proxyuser.root.hosts
		*
	
	
	
		hadoop.proxyuser.root.groups
		*
	


  • hdfs-site.xml ,原来就有 ,直接改内容
    • vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
hdfs-site.xml







	
	
		dfs.block.size
		134217728
	
	
	
	
		dfs.replication
		3
	
	
	
	
		dfs.name.dir
		file:///opt/soft/hadoop260/dfs/namenode_data
	
	
	
	
		dfs.data.dir
		file:///opt/soft/hadoop260/dfs/datanode_data
	
	
	
	
		dfs.webhdfs.enabled
		true
	
	
	
	 
		dfs.datanode.max.transfer.threads
		4096
	
	
	
	
		dfs.nameservices
		mycluster
	

	
	
		dfs.ha.namenodes.mycluster
		nn1,nn2
	

	
	
		dfs.namenode.rpc-address.mycluster.nn1
		hadoop101:9000
	
	
	
		dfs.namenode.servicepc-address.mycluster.nn1
		hadoop101:53310
	
	
	
		dfs.namenode.http-address.mycluster.nn1
		hadoop101:50070
	

	
	
		dfs.namenode.rpc-address.mycluster.nn2
		hadoop102:9000
	
	
	
		dfs.namenode.servicepc-address.mycluster.nn2
		hadoop102:53310
	
	
	
		dfs.namenode.http-address.mycluster.nn2
		hadoop102:50070
	

	
	
		dfs.namenode.shared.edits.dir
		qjournal://hadoop101:8485;hadoop102:8485;hadoop103:8485/mycluster
	
	
	
	
		dfs.journalnode.edits.dir
		/opt/soft/hadoop260/dfs/journalnode_data
	
	
	
	
		dfs.namenode.edits.dir
		/opt/soft/hadoop260/dfs/edits
	

	
	
		dfs.ha.fencing.methods
		sshfence
	

	
	
		dfs.ha.fencing.ssh.private-key-files
		/root/.ssh/id_rsa
	

	
	
		dfs.permissions.enable
		false
	

	
	
  		dfs.client.failover.proxy.provider.mycluster
		org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
	

	
	
		dfs.ha.automatic-failover.enabled
		true
	


  • yarn-site.xml ,原来就有 ,直接改内容
    • vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
yarn-site.xml



	
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
    
    
        yarn.resourcemanager.ha.enabled
        true
    
 
    
    
        yarn.resourcemanager.cluster-id
        cluster-yarn1
    

	
    
        yarn.resourcemanager.ha.rm-ids
        rm1,rm2
    

	
    
        yarn.resourcemanager.hostname.rm1
        hadoop102
    

	
    
        yarn.resourcemanager.hostname.rm2
        hadoop103
    
 
     
    
        yarn.resourcemanager.zk-address
        hadoop101:2181,hadoop102:2181,hadoop103:2181
    

     
    
        yarn.resourcemanager.recovery.enabled
        true
    
 
     
    
        yarn.resourcemanager.store.class
        org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
    
	
	
	
		yarn.resourcemanager.hostname
		hadoop103
	
	
	
	
		yarn.log-aggregation-enable
		true
	
	
	
		yarn.log-aggregation.retain-seconds
		604800
	
	
	
	
		yarn.nodemanager.resource.memory-mb
		20480
	
	

  • mapred-site.xml ,原来没有,将mapred-site.xml.template拷一份改名后改内容
    • cd $HADOOP_HOME/etc/hadoop/
    • cp mapred-site.xml.template mapred-site.xml
    • vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
mapred-site.xml







	
	
		mapreduce.framework.name
		yarn
	
	
	
	
		mapreduce.jobhistory.address
		hadoop101:10020
	
	
		mapreduce.jobhistory.webapp.address
		hadoop101:19888
	
	
	
	
		mapreduce.job.ubertask.enable
		true
	
	
	
	 
		yarn.log.server.url         
		http://hadoop101:19888/jobhistory/logs 
	


3、配置hadoop种slaves集群启动配置文件
  • sed -i 's/localhost/hadoop101/' $HADOOP_HOME/etc/hadoop/slaves
  • sed -i '$ahadoop102' $HADOOP_HOME/etc/hadoop/slaves
  • sed -i '$ahadoop103' $HADOOP_HOME/etc/hadoop/slaves
4、在 $ZOOKEEPER_HOME/ 这个目录下创建zkData
  • mkdir -p $ZOOKEEPER_HOME/zkData

5、拷贝 $ZOOKEEPER_HOME/conf 这个目录下的zoo_sample.cfg为zoo.cfg
  • cp $ZOOKEEPER_HOME/conf/zoo_sample.cfg $ZOOKEEPER_HOME/conf/zoo.cfg

6、修改zoo.cfg文件的内容,
  • vim $ZOOKEEPER_HOME/conf/zoo.cfg
  • sed -i 's//tmp/zookeeper//opt/soft/zookeeper345/zkData/' $ZOOKEEPER_HOME/conf/zoo.cfg
  • sed -i '17aserver.101=hadoop101:2888:3888' $ZOOKEEPER_HOME/conf/zoo.cfg
  • sed -i '18aserver.102=hadoop102:2888:3888' $ZOOKEEPER_HOME/conf/zoo.cfg
  • sed -i '19aserver.103=hadoop103:2888:3888' $ZOOKEEPER_HOME/conf/zoo.cfg

如下图:

7、在 $ZOOKEEPER_HOME/zkData 目录下创建一个myid的文件,在文件中添加与server对应的编号:如这台为hadoop101,那么就在里面写个101,跟上面zoo.cfg里内容对应
  • touch $ZOOKEEPER_HOME/zkData/myid
  • echo "102" >> $ZOOKEEPER_HOME/zkData/myid
8、使用xsync脚本分发 /opt目录和 /etc/profile文件
  • xsync /opt
  • xsync /etc/profile
重新编译 profile 文件

source /etc/profile

9、将另外两台节点 $ZOOKEEPER_HOME/zkData/myid 配置好
  • hadoop01节点:sed -i 's/102/101/' $ZOOKEEPER_HOME/zkData/myid
  • hadoop03节点:sed -i 's/102/103/' $ZOOKEEPER_HOME/zkData/myid
10、使用xcall脚本启动zookeeper,并查看状态,一个leader两个follower
  • xcall zkServer.sh start
  • xcall zkServer.sh status

11、使用xcall脚本在各个JournalNode节点上,输入以下命令启动journalnode服务
  • xcall hadoop-daemon.sh start journalnode

12、切换至hadoop101节点,对NN1进行格式化,并启动
  • hdfs namenode -format

  • hadoop-daemon.sh start namenode

13、切换至hadoop102节点,在NN2上,同步NN1的元数据信息
  • hdfs namenode -bootstrapStandby

14、在hadoop102节点上启动NN2
  • hadoop-daemon.sh start namenode

15、使用xcall脚本启动所有datanode
  • xcall hadoop-daemon start datanode

16、在hadoop102节点上关闭hdfs
  • stop-dfs.sh

17、初始化HA在Zookeeper中状态
  • hdfs zkfc -formatZK

16、在hadoop102节点上群起HDFS服务
  • start-dfs.sh
13、验证:将Active NameNode进程kill,看另外的Standby节点是否变成了Active 14、在hadoop102节点群起YARN​​​
  • start-yarn.sh
15、在hadoop103中启动RM2
  • yarn-daemon.sh start resourcemanager
16、查看服务状态
  • yarn rmadmin -getServiceState rm1 或者 rm2

17、设置集群同步,步骤在阶段一

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/307386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号