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=hadoop 集群搭建工具 hadoop集群搭建原理_hadoop 集群搭建工具JAVA_HOME/bin:hadoop 集群搭建工具 hadoop集群搭建原理_hdfs_02HADOOP_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