ha的原理
hadoop的ha high avalible 高可用集群
hadoop的搭建方式5种
单机
伪分布式
完全分布式
高可用
联邦+高可用
高可用的模式:
为了解决完全分布式的主节点的单点故障的问题
解决方案:在这个集群中 同一时间有2个主节点 但是只有一个
是对外提供服务的 另外一个实时处于热备状态
我们将对外提供服务的称为active的 热备的称为standby
以namenode为案例说明:
两个namenode要想做到高可用,必须保证2件事:
1)standby 和 active的数据要一致
2)standby可以实时感知active的状态变化 灵敏
如何保证?
1)standby 和 active的数据要一致
active namenode主要存储的就是hdfs的元数据信息
主要存储在下面的文件中:
1)edites文件 ---- 日志文件 hdfs的文件系统发生变化 就会产生
2)fsimage文件 — 镜像文件 元数据合并的时候
最原始的fsimage文件 namenode格式化的时候产生的
后面的fsimage文件 都是fsiamge+edits文件合并得来的
standby要想保证和active的数据一致 只要保证上面的
两个文件一致就可以
fsimage—只要保证最原始的那个fsimage文件相同就可以
策略:在一个节点格式化namenode后 将fsimage文件
手动复制到另外一个namenode上
edits— 必须保证和active namenode的一致性
共享的文件系统 两个namenode都可以访问的
1)QJM----HIGH AVALIBLELITY quorum journal manager
hadoop中内置的一种共享文件策略/系统
对应的进程—jounalnode
使用的主流别的共享文件系统
类似于zk 主打的存储
安装节点和zk一样 奇数个节点
注意:在ha中多个一个standby namenode 但是secondarynamenode没有了
secondarynamenode的工作 standbynamenode接替
元数据合并的工作也是standbynamenode做的
2)standby可以实时感知active的状态变化
zk的应用场景 集群管理 集群的节点上下线管理
借助zk
两个节点的状态信息都写入到zk中 存贮一个临时无编号节点
通过zkfc写入的
zkfc监控每一个namenode的健康状态的
ha的搭建
1)集群规划
hdfs:2个namenode 4个datanode 2个zkfc
3个journalnode
yarn:2个resourcemanager 4个nodemanager
zk:3个zk
hadoop01 hadoop02 hadoop03 hadoop04
hdfs namenode namenode
zkfc zkfc
datanode datanode datanode datanode
journalnode jounalnode jounalnode
yarn: resourcemanager resourcemanager
nodemanager nodemanager nodemanager nodemanager
zk quorumpeermain quorumpeermain quorumpeermain
2)安装:
安装准备
1)主机名
2)ip
3)hosts
4)防火墙
5)selinux
6)普通用户的sudoers权限
7)修改系统的启动级别 3
8)安装jdk
9)ssh免密码登录
10)时间同步 ha必须做时间同步
sudo ntpdate ntp1.aliyun.com
删除之前的hadoop:
1)关闭hadoop集群
stop-dfs.sh
stop-yarn.sh
2)删除hadoop的安装包
rm -rf hadoop-2.7.6
3)删除hadoop的数据文件
4)重新上传一个安装包
安装步骤:
1)上传
2)解压
tar -xvzf hadoop-2.7.6.tar.gz
3)配置环境变量
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.6
export ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper-3.4.10
export PATH=JAVA_HOME/bin:HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
source /etc/profile
验证:hadoop version
4)修改hadoop的配置文件
$HADOOP_HOME/etc/hadoop
hadoop-env.sh
修改:
export JAVA_HOME=/home/hadoop/apps/jdk1.8.0_73
core-site.xml
fs.defaultFS hdfs://bd1807/
hadoop.tmp.dir /home/hadoop/data/hadoopdata/
ha.zookeeper.quorum hadoop01:2181,hadoop02:2181,hadoop03:2181
hdfs-site.xml
dfs.replication 3
dfs.nameservices bd1807
dfs.ha.namenodes.bd1807 nn1,nn2
dfs.namenode.rpc-address.bd1807.nn1 hadoop01:9000
dfs.namenode.http-address.bd1807.nn1 hadoop01:50070
dfs.namenode.rpc-address.bd1807.nn2 hadoop02:9000
dfs.namenode.http-address.bd1807.nn2 hadoop02:50070
dfs.namenode.shared.edits.dir qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/bd1807
dfs.journalnode.edits.dir /home/hadoop/data/hadoopdata/journaldata
dfs.ha.automatic-failover.enabled true
dfs.client.failover.proxy.provider.bd1807 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods sshfence shell(/bin/true)
dfs.ha.fencing.ssh.private-key-files /home/hadoop/.ssh/id_rsa
dfs.ha.fencing.ssh.connect-timeout 30000
yarn-site.xml
yarn.resourcemanager.ha.enabled true
yarn.resourcemanager.cluster-id yrc
yarn.resourcemanager.ha.rm-ids rm1,rm2
yarn.resourcemanager.hostname.rm1 hadoop01 yarn.resourcemanager.hostname.rm2 hadoop02
yarn.resourcemanager.zk-address hadoop01:2181,hadoop02:2181,hadoop03:2181
yarn.nodemanager.aux-services mapreduce_shuffle
yarn.log-aggregation-enable true
yarn.log-aggregation.retain-seconds 86400
yarn.resourcemanager.recovery.enabled true
yarn.resourcemanager.store.class org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
mapreduce.framework.name yarn
mapreduce.jobhistory.address hadoop03:10020
mapreduce.jobhistory.webapp.address hadoop03:19888
slaves 从节点nodemanager datanode
hadoop01
hadoop02
hadoop03
hadoop04
5)将hadoop的安装包远程发送到其他节点
scp -r hadoop-2.7.6 hadoop02:/home/hadoop/apps/
scp -r hadoop-2.7.6 hadoop03:/home/hadoop/apps/
scp -r hadoop-2.7.6 hadoop04:/home/hadoop/apps/
source /etc/profile
hadoop version
6)从这一步开始 严格按照顺序执行
1)先启动journalnode
hadoop01 hadoop-daemon.sh start journalnode
hadoop02 hadoop-daemon.sh start journalnode
hadoop03 hadoop-daemon.sh start journalnode
2)格式化namenode 在一个namenode上执行格式化命令
在hadoop01执行
hadoop namenode -format
3)将hadoop01上的namenode的相关数据文件远程并发送到另一个namenode
节点hadoop02
scp -r dfs hadoop02:/home/hadoop/data/hadoopdata/
4)先启动zk
hadoop01
hadoop02
hadoop03
zkServer.sh start
5)格式化zkfc 选择一个namenode的节点
hdfs zkfc -formatZK
成功标志:
Successfully created /hadoop-ha/bd1807 in ZK
6)启动集群
启动hdfs
start-dfs.sh 任意节点执行
DFSZKFailoverController---zkfc
启动yarn
start-yarn.sh 最好在resourcemanager的节点
在哪一个节点执行上面的命令 在哪一个节点启动resourcemanager
另一个节点手动启动
yarn-daemon.sh start resourcemanager
注意:
单独启动zkfc的命令:
hadoop-daemon.sh start zkfc