zookeeper: 分布式协同服务,负责处理分布式框架所产生的一些问题 分布式框架: 可扩展性 透明性 高可靠性 分布式框架的弊端: 不一致性:单个节点数据的缺失,处理数据 竞态条件:多个节点同时处理一个只需要一个节点处理的数据 死锁: 两个节点互相等待对方完成 zk为了解决问题能提供什么服务? 名字服务: 标识集群中的所有节点,(节点能够向其注册并产生唯一标识) 配置管理: 存储配置文件,以便共享 集群管理: 添加或删除节点同时,事实更新集群信息 领袖推选机制: 锁和同步服务: 当文件进行修改,会将其进行加锁,防止多用户同时写入 高有效性数据注册: zk: follower leader 推荐配置奇数个节点: (n-1)/2 个节点挂掉,仍能提供服务,超过则挂掉 //奇数 n/2 个节点挂掉,不能提供服务, //偶数 2888:leader独有端口,负责和follower进行通信 3888:负责leader选举的端口 2181:client端口 zk启动: zkServer.sh start //启动zk stop status zkCli.sh //启动本地zk客户端 zkCli.sh -server s102:2181 //启动远程zk客户端 zk的节点和数据,是zk的目录结构 节点 数据 / 'tom' /a/b ... /aaa create /a '' //创建节点:持久节点 客户端断开不会自动删除 create /a -e '' //创建节点:临时节点 客户端断开会自动删除 create /a -s '' //创建节点:序列节点 在节点后加上10位的自增字段 rmr /a/b/c //递归删除 delete /a //不能递归 ls / //列出孩子节点 stat / //查询节点状态,不包括数据 get / //查询数据并返回状态 set / //修改节点数据 使用zk对hdfs实现自动容灾:hdfs-site.xml <!-- =======================配置hdfs自动容灾======================= --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>s102:2181,s103:2181,s104:2181</value> </property> 0、启动zk,不用启动hdfs进程 1、配置文件,如上 2、分发hdfs-site.xml 3、hdfs zkfc -formatZK 4、启动hdfs进程 zkfc进程:zookeeper failover controller //zk容灾管理器 初始化journalnode方法:关闭所有namenode进程 hdfs namenode -initializeSharedEdits hadoop ha的切换: ================================ nn1 //s101 nn2 //s105 hdfs haadmin -transitionToActive [--forcemanual] nn1 //强制切换 hdfs haadmin -transitionToStandby nn1 hdfs haadmin -getServiceState nn1 无法将两个namenode处于standby或active状态 resourcemanager配置高可用以及自动容灾:yarn-site.xml ============================================== <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>mycluster</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>s101</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>s105</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>s101:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>s105:8088</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>s102:2181,s103:2181,s104:2181</value> </property> 0、zk保持开启,yarn不要启动 1、配置文件,如上 2、分发文件yarn-site.xml 3、在/soft/hadoop/etc/hadoop下添加rm_hosts文件,内容如下 s101 s105 4、修改/soft/hadoop/sbin/start-yarn.sh倒数第五行,改为 "$bin"/yarn-daemons.sh --config $YARN_CONF_DIR --hosts rm_hosts start resourcemanager 修改/soft/hadoop/sbin/stop-yarn.sh倒数第五行,改为 "$bin"/yarn-daemons.sh --config $YARN_CONF_DIR --hosts rm_hosts stop resourcemanager 5、分发以上三个配置文件 6、start-yarn.sh并查看8088端口,可看出一个节点为active模式,另一个为standby 重新格式化HA模式的hadoop集群: =========================================== 1、停止进程: stop-all.sh //停止hadoop进程 xzk.sh stop //停止zk进程 2、将s101-s105的临时(工作)目录删除 xcall.sh "rm -rf ~/hadoop/*" 3、在s102-s104节点启动journalnode //s101 hadoop-daemons.sh start journalnode 4、格式化s101的namenode hdfs namenode -format 5、将s101的工作目录分发到s105 rsync -r ~/hadoop centos@s105:~/ 6、启动zk 7、启动hadoop hadoop进程: slave:s102 s103 s104 s101和s105: namenode resourcemanager DFSZKFailoverController(zkfc) s102-s104: datanode nodemanager journalnode zk进程 s102-s104: QuorumPeerMain