20210113_hadoop_ha高可用学习笔记

一、hadoop集群的安装与配置,全部按照hadoop基础学习笔记中先配置
高可用没有了secondarynamenode,使用JournalNodes来替代,且必须要有三台机器有JournalNodes
新增加了一个namenode(standby),以前namenode还是namenode(active)
新增加了一个resourcemanager(standby),以前resourcemanager还是resourcemanager(active)

二、hadoop高可用参数修改配置
          192.168.100.101/master         192.168.100.102/s1                  192.168.100.103/s2
hdfs      namenode+datanode              namenode+datanode                         datanode
yarn       nodemanager                  nodemanager+resourcemanager         nodemanager+resourcemanager
Journal   JournalNode+Zookeeper        JournalNode+Zookeeper                 JournalNode+Zookeeper


三、手动切换HA操作步骤
新建目录
mkdir /root/HA
拷贝原始搭建的HADOOP单节点集群
cp -r /root/hadoop-2.10.1 /root/HA/
新建journal目录
mkdir -p /root/HA/hadoop-2.10.1/journal
修改部分配置参数
vim /root/HA/hadoop-2.10.1/etc/hadoop/hdfs-site.xml
<property>
  <name>dfs.replication</name>
  <value>2</value>
  <description>表示数据块的备份数量,不能大于DataNode的数量</description>
</property>
<property>
  <name>dfs.namenode.name.dir</name>
  <value>/root/HA/hadoop-2.10.1/namenode</value>
  <description>表示NameNode需要存储数据的地方;可以设置多个目录用逗号隔开,那么名称表将复制到所有目录中,以实现冗余。</description>
</property>
<property>
  <name>dfs.datanode.data.dir</name>
  <value>/root/HA/hadoop-2.10.1/datanode</value>
  <description>DataNode存放数据的地方;可以设置多个目录用逗号隔开,数据将存储在某一个目录中,不实现冗余,某机器增加磁盘后会选择此项</description>
</property>
<property>
  <name>dfs.namenode.heartbeat.recheck-interval</name>
  <value>300000</value>  
  <description>单位为毫秒;datanode进程死亡或者网络故障造成datanode无法与namenode通信,namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。</description>
</property>
<property>
  <name> dfs.heartbeat.interval </name>
  <value>3</value>
  <description>单位为秒;默认dfs.namenode.heartbeat.recheck-interval 大小为5分钟,dfs.heartbeat.interval默认为3秒;timeout  = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval</description>
</property>
<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
  <description>配置集群的id</description>
</property>
<!--配置所有的namenode节点的namenodeid--> 
<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>
<!--给nameserviceid下的namenodeid指定是哪台机器 哪个端口 对外提供上传服务 -->
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>master:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>s1:8020</value>
</property>
<!--给nameserviceid下的namenodeid指定是http端口 可以使用浏览器打开查看的 -->
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>master:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>s1:50070</value>
</property>
<!--配置journal的所有节点所在的主机;最好配置为 nameservieid -->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://master:8485;s1:8485;s2:8485/mycluster</value>
</property>
<!--配置自动切换的代理 也就是前面提到的zkfc 如果是手动切换主从 不需要配置这个 后面使用自动 先配上-->
<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>shell(/bin/true)</value>
</property>
<!--主机私钥地址,给对应用户地址-->
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/root/.ssh/id_rsa</value>
</property>
<!--关闭权限检查-->
<property>
  <name>dfs.permissions.enabled</name>
  <value>false</value>
</property>


 
 
vim /root/HA/hadoop-2.10.1/etc/hadoop/core-site.xml
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
  <description>单位为KB</description>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/root/HA/hadoop-2.10.1/tmp</value>
  <description>Abasefor other temporary directories.</description>
</property>
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/root/HA/hadoop-2.10.1/journal</value>
</property>
  <property>
    <name>fs.trash.interval</name>
    <value>3</value>
    <description>回收站文件保留时间,单位分钟</description>
  </property>
  <property>
    <name>fs.trash.checkpoint.interval</name>
    <value>1440</value>
    <description>回收站的检查间隔,应该是小于或者等于fs.trash.interval,单位分钟</description>
  </property>
  <property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
    <description>回收站里面可以查看的用户,默认是dr.who,有设置回收站建议修改</description>
  </property>
  <property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
  </property>

  
其它文件配置和单点故障模式一样,不需要调整
删除以前的 datanode,namenode,tmp,logs 文件下数据
cd /root/HA/hadoop-2.10.1/datanode
rm -rf *
cd /root/HA/hadoop-2.10.1/namenode
rm -rf *
cd /root/HA/hadoop-2.10.1/tmp
rm -rf *
cd /root/HA/hadoop-2.10.1/logs
rm -rf *

拷贝HA文件到其它节点
scp -r HA root@192.168.100.102:/root/
scp -r HA root@192.168.100.103:/root/

启动所有JournalNode,在三台JournalNode机器执行
/root/HA/hadoop-2.10.1/sbin/hadoop-daemon.sh start journalnode

在master格式化集群,只执行一次
/root/HA/hadoop-2.10.1/bin/hdfs namenode -format

启动master节点的namenode
/root/HA/hadoop-2.10.1/sbin/hadoop-daemon.sh start namenode

同步master的namenode信息,只能执行一次
/root/HA/hadoop-2.10.1/bin/hdfs namenode -bootstrapStandby 

启动s1节点的namenode(standby)
/root/HA/hadoop-2.10.1/sbin/hadoop-daemon.sh start namenode

集群master启动dfs
/root/HA/hadoop-2.10.1/sbin/start-dfs.sh

通过网址访问
http://192.168.100.101:50070/
http://192.168.100.102:50070/

默认两个namenode都是standby状态 手动切换(将master也就是nn1设置为active状态)
/root/HA/hadoop-2.10.1/bin/hdfs haadmin -transitionToActive nn1

测试关闭 master的namenode服务
/root/HA/hadoop-2.10.1/sbin/hadoop-daemon.sh stop namenode
或者使用
kill -9 namenode的进程, 如果再重新启动此节点namenode,启动后变成了standby,还是需要手工转为active
/root/HA/hadoop-2.10.1/bin/hdfs haadmin -transitionToActive nn1

强制切换active节点到node2节点
/root/HA/hadoop-2.10.1/bin/hdfs haadmin -transitionToActive --forceactive nn2

后面可以启动yarn
/root/HA/hadoop-2.10.1/sbin/start-yarn.sh

四、自动切换HA操作步骤
1.按照手工方式配置好集群

2.安装好zookeeper软件,具体参考zookeeper学习笔记

3.在上面配置文件中增加如下配置
vim /root/HA/hadoop-2.10.1/etc/hadoop/hdfs-site.xml
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>

scp /root/HA/hadoop-2.10.1/etc/hadoop/hdfs-site.xml root@192.168.100.102:/root/HA/hadoop-2.10.1/etc/hadoop/hdfs-site.xml
scp /root/HA/hadoop-2.10.1/etc/hadoop/hdfs-site.xml root@192.168.100.103:/root/HA/hadoop-2.10.1/etc/hadoop/hdfs-site.xml

vim /root/HA/hadoop-2.10.1/etc/hadoop/core-site.xml
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>master:2181,s1:2181,s2:2181</value>
  </property>

scp /root/HA/hadoop-2.10.1/etc/hadoop/core-site.xml root@192.168.100.102:/root/HA/hadoop-2.10.1/etc/hadoop/core-site.xml
scp /root/HA/hadoop-2.10.1/etc/hadoop/core-site.xml root@192.168.100.103:/root/HA/hadoop-2.10.1/etc/hadoop/core-site.xml


4.停止集群所有服务
/root/HA/hadoop-2.10.1/sbin/stop-yarn.sh
/root/HA/hadoop-2.10.1/sbin/stop-dfs.sh

5.在任意一台namenode机器格式化zk
/root/HA/hadoop-2.10.1/bin/hdfs zkfc -formatZK
可使用zookeeper客户端查看hadoop集群配置参数是否加载到zookeeper
/root/zookeeper-3.6.2/bin/zkCli.sh
[zk: localhost:2181(CONNECTED) 3] ls /
[hadoop-ha, zookeeper]
[zk: localhost:2181(CONNECTED) 4] ls /hadoop-ha
[mycluster]
[zk: localhost:2181(CONNECTED) 5]

6.启动集群
/root/HA/hadoop-2.10.1/sbin/start-dfs.sh

7.验证kill -9 active后standby自动切换为active
/root/HA/hadoop-2.10.1/sbin/hadoop-daemon.sh start namenode

8.测试上传数据
/root/HA/hadoop-2.10.1/bin/hadoop -fs -put /root/study/emp.txt


问题1,当kill -9avtice 的namenode后standby并没有启动起来
dfs.ha.fencing.methods配置有sshfence和shell两种方法:
sshfence:防止namenode脑裂,当脑裂时,会自动通过ssh到old-active将其杀掉,将standby切换为active。但是只能在网络通畅时有效,一旦ipdown后fencing方法返回false,standby不会自动切换active,
    只能手动执行 hdfs haadmin failover namenode1 namenode2 进行切;所以需要加配shell(/bin/true)。想要kill掉namenode active后standby自动切换为active,需要安装psmisc(fuser);
    因为sshfence方式是使用fuser通过ssh登录old-active进行诊断从而切换active/standby的。
shell(/bin/true):如果出现故障并且fencing方法返回false,则会继续执行shell(true),从而active/standby自动切换。fencing方法返回true,则不会执行shell。

五、yarn高可用配置,即两个 resourcemanager
1.修改部分配置参数
vim /root/HA/hadoop-2.10.1/etc/hadoop/yarn-site.xml
<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>s1</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>s2</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.rm1</name>
  <value>s1:8088</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.rm2</name>
  <value>s2:8088</value>
</property>
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>master:2181,s1:2181,s2:2181</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>  
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    <description>开启日志聚集功能</description>
</property>
<property>
   <name>yarn.log-aggregation.retain-seconds</name>
   <value>640800</value>
   <description>日志聚集保留时间单位秒</description>
</property>

scp /root/HA/hadoop-2.10.1/etc/hadoop/yarn-site.xml root@192.168.100.102:/root/HA/hadoop-2.10.1/etc/hadoop/yarn-site.xml
scp /root/HA/hadoop-2.10.1/etc/hadoop/yarn-site.xml root@192.168.100.103:/root/HA/hadoop-2.10.1/etc/hadoop/yarn-site.xml

2.启动yarn,在s1机器上
/root/HA/hadoop-2.10.1/sbin/stop-yarn.sh
/root/HA/hadoop-2.10.1/sbin/start-yarn.sh
在s2机器上也启动yarn
/root/HA/hadoop-2.10.1/sbin/yarn-daemon.sh start resourcemanager

问题:
1.http://s1:8088/cluster 和 http://s2:8088/cluster 每次只能访问一个,访问另外一个会自动跳转到当前提供服务的那个地址
如果kill掉当前访问的地址,另外一个就可以访问了,但每次要切换访问地址,对用户不友好
2.yarn的启动停止,使用如下命令都只能操作本机的resourcemanager
/root/HA/hadoop-2.10.1/sbin/stop-yarn.sh
/root/HA/hadoop-2.10.1/sbin/start-yarn.sh
必须在另外一个机器上使用来停止本机resourcemanager
/root/HA/hadoop-2.10.1/sbin/yarn-daemon.sh start resourcemanager
/root/HA/hadoop-2.10.1/sbin/yarn-daemon.sh stop resourcemanager

上诉全部启动后进程如下
[root@master ~]# jps
6881 NodeManager
7028 Jps
3014 QuorumPeerMain
5256 DataNode
5451 JournalNode
5774 NameNode
5615 DFSZKFailoverController

[root@s1 ~]# jps
4432 DataNode
6544 NodeManager
6437 ResourceManager
6870 Jps
4600 DFSZKFailoverController
4361 NameNode
4506 JournalNode
3182 QuorumPeerMain

[root@s2 ~]# jps
3968 ResourceManager
2885 JournalNode
2791 DataNode
3815 NodeManager
4026 Jps
1995 QuorumPeerMain
2493 ZooKeeperMain

          192.168.100.101/master         192.168.100.102/s1                  192.168.100.103/s2
hdfs      namenode+datanode              namenode+datanode                         datanode
yarn       nodemanager                  nodemanager+resourcemanager         nodemanager+resourcemanager
Journal   JournalNode+Zookeeper        JournalNode+Zookeeper                 JournalNode+Zookeeper

对比所有进程是否都存在
ZooKeeperMain:启动一个zookeeper客户端就会有一个进程
[root@s2 ~]# /root/zookeeper-3.6.2/bin/zkCli.sh
QuorumPeerMain:zookeeper服务端进程
/root/zookeeper-3.6.2/bin/zkServer.sh start
DFSZKFailoverController:Namenode和ZKFC同布署在同一台物理机器上, HealthMonitor, FailoverController, ActiveStandbyElector 在同一个JVM进程中(即ZKFC)
/root/HA/hadoop-2.10.1/sbin/start-dfs.sh  #和此命令一起启动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值