一、完全分布式集群
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 2NN2.准备集群,安装软件
①克隆三台虚拟机
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_keysa)使用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一定会报错!
二、启动HadoopHDFS
①需要在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协议
xsync 集群分发脚本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 104. 修改/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
xcall 集群群起脚本#!/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
配置文件 core-site.xml#!/bin/bash #在集群的所有机器上批量执行统一条命令 if(($#==0));then echo "请输入您要操作的命令!" fi echo "要执行的命令是$*" #循环执行此命令 for (( i = 101; i <= 103; i++ )); do echo "---------------------hadoop$i-------------------" ssh hadoop$i $* done
hdfs-site.xmlfs.defaultFS hdfs://hadoop101:9000 hadoop.tmp.dir /opt/module/hadoop-2.7.2/data/tmp
mapred-site.xmldfs.namenode.secondary.http-address hadoop103:50090
yarn-site.xmlmapreduce.framework.name yarn mapreduce.jobhistory.address hadoop101:10020 mapreduce.jobhistory.webapp.address hadoop101:19888 yarn.log.server.url http://hadoop101:19888/jobhistory/logs
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
core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml一、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状态
阶段三(实操部分):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分别重启三台机器的网卡
2、在hadoop102节点编辑 /etc/hosts 主机映射文件
- systemctl restart network
- 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 hadoop1033、配置ssh免登录,先把hadoop102节点到其他节点的免密登录配好4、编写hadoop102节点 xcall 脚本保存在 /root/bin,没有则创建这个目录,提升可执行权限(xcall脚本核心命令:ssh 用户名@主机名 需要执行的操作)
- 生成私钥和公钥
- ssh-keygen -t rsa
- 将公钥拷贝分别拷贝到 hadoop101、hadoop102、hadoop103节点
- ssh-copy-id hadoop101
- ssh-copy-id hadoop102
- ssh-copy-id hadoop103
- 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 $* done7、更改下载源,安装必要软件更改三台机器下载源为阿里云
- 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
5、编写hadoop102节点 xsync 脚本保存在 /root/bin,没有则创建这个目录,提升可执行权限(xsync核心脚本:rsync -rvlt 源目录或文件 用户名@主机名:目标目录或文件)
- xcall yum -y install rsync
- 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 done6、使用xsync脚本将 /etc/hosts 文件分发到每个节点7、在hadoop102节点的 /root/bashrc文件末尾加上 source /etc/profile命令,并使用xsync脚本分发一下
- xsync /etc/hosts
8、将另外两个节点登录到其他节点的免密登录全部配好
- sed -i '$asource /etc/profile' /root/.bashrc
- xsync /root/.bashrc
9、关闭防火墙,并设置开机不自启动
- hadoop101 登录 hadoop101、102、103
- hadoop103 登录 hadoop101、102、103
- 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/profilesed -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/bin2、将 $HADOOP_HOME/etc/hadoop下的四个配置文件改为前面阶段二的四个配置文件的内容core-site.xml
- 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
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
- hdfs-site.xml ,原来就有 ,直接改内容
- vim $HADOOP_HOME/etc/hadoop/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
- yarn-site.xml ,原来就有 ,直接改内容
- vim $HADOOP_HOME/etc/hadoop/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 ,原来没有,将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
3、配置hadoop种slaves集群启动配置文件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 4、在 $ZOOKEEPER_HOME/ 这个目录下创建zkData
- 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
- 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里内容对应8、使用xsync脚本分发 /opt目录和 /etc/profile文件
- touch $ZOOKEEPER_HOME/zkData/myid
- echo "102" >> $ZOOKEEPER_HOME/zkData/myid
重新编译 profile 文件
- xsync /opt
- xsync /etc/profile
source /etc/profile
9、将另外两台节点 $ZOOKEEPER_HOME/zkData/myid 配置好10、使用xcall脚本启动zookeeper,并查看状态,一个leader两个follower
- hadoop01节点:sed -i 's/102/101/' $ZOOKEEPER_HOME/zkData/myid
- hadoop03节点:sed -i 's/102/103/' $ZOOKEEPER_HOME/zkData/myid
- 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中状态
16、在hadoop102节点上群起HDFS服务
hdfs zkfc -formatZK
13、验证:将Active NameNode进程kill,看另外的Standby节点是否变成了Active 14、在hadoop102节点群起YARN
- start-dfs.sh
15、在hadoop103中启动RM2
- start-yarn.sh
16、查看服务状态
- yarn-daemon.sh start resourcemanager
yarn rmadmin -getServiceState rm1 或者 rm2
17、设置集群同步,步骤在阶段一



