Zookeeper基础教程
资料来源:Zookeeper Tutorial (tutorialspoint.com)
zookeeper就是Hadoop生态动物园的管理员
1. Zookeeper-概述
ZooKeeper是一种分布式协调服务,用于管理大型主机集群(large set of hosts)。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper用它简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用逻辑,而不用担心应用的分布式特性。
ZooKeeper框架最初是在Yahoo!,以便以一种简单而稳健的方式访问他们的应用程序。后来,Apache ZooKeeper成为Hadoop、HBase和其他分布式框架使用的有组织服务的标准。例如,Apache HBase使用ZooKeeper来跟踪分布式数据的状态。本教程解释了ZooKeeper的基础知识,如何在分布式环境中安装和部署ZooKeeper集群,最后以使用Java编程和示例应用程序的几个示例结束。
在进一步讨论之前,了解一些关于分布式应用程序的知识是很重要的。因此,让我们从快速概述分布式应用程序开始讨论。
分布式应用
分布式应用程序可以在给定时间(同时)在网络中的多个系统上运行,通过它们之间的协调以快速有效的方式完成特定的任务。通常,非分布式应用程序(在单个系统中运行)需要数小时才能完成的复杂且耗时的任务,通过使用所有相关系统的计算能力,分布式应用程序可以在几分钟内完成。
通过将分布式应用程序配置为在更多系统上运行,可以进一步减少完成任务的时间。运行分布式应用程序的一组系统称为集群(Cluster),在集群中运行的每台机器称为节点(Node)。
分布式应用程序有两个部分,服务器(Server)和客户端(Client)应用程序。服务器应用程序实际上是分布式的,并且具有公共接口,因此客户机可以连接到集群中的任何服务器并获得相同的结果。客户机应用程序是与分布式应用程序交互的工具。如下图所示。
分布式应用程序的优点
可靠性−单个或部分系统故障不会导致整个系统故障。
可扩展性-性能可以在需要时增加更多的机器,在应用程序的配置中进行微小的更改,而不会停机。
透明性-隐藏系统的复杂性,显示其作为一个单一的实体/应用程序。
分布式应用的挑战
竞态条件(Race condition)−:两台或两台以上的机器同时执行某项任务,而该任务在任何给定时间内实际上只需要一台机器来完成。例如,共享资源在任何给定时间只能由一台机器修改。聪明的你有没有想起操作系统的知识?(doge)
死锁−两个或多个操作无限期地等待对方完成。
不一致性−数据部分失效。
那么ZooKeeper存在的意义是什么?
Apache ZooKeeper是集群(一组节点)使用的服务,通过强大的同步技术在集群(一组节点)之间进行协调并维护共享数据。ZooKeeper本身就是一个分布式应用程序,为编写分布式应用程序提供服务。
ZooKeeper提供的常用服务有:
命名服务−通过名称识别集群中的节点。它类似于DNS,但针对的是节点。
配置管理−接入节点最新的系统配置信息。
集群管理−实时管理集群中节点的加入/退出和节点状态。
Leader选举−选举节点作为Leader进行协调。
锁定同步服务−数据修改时锁定。这种机制可以帮助您在连接其他分布式应用程序(如Apache HBase)时自动进行故障恢复。
高可靠性的数据注册表−即使一个或几个节点宕机,数据仍然可用。
分布式应用程序提供了很多好处,但也带来了一些复杂和难以破解的挑战。ZooKeeper框架提供了一个完整的机制来克服所有的挑战。使用故障安全同步方法(fail-safe synchronization approach)处理竞争条件和死锁。另一个主要缺点是数据不一致,ZooKeeper通过**原子性(atomicity)**解决了这个问题。
Zookeeper的优点
简单的分布式协调过程
同步−服务器进程间互斥协作。这个过程有助于在Apache HBase中进行配置管理。
有序的消息(Ordered Messages)
序列化−按照指定的规则对数据进行编码。确保应用程序始终如一地运行。这种方法可以在MapReduce中用于协调队列以执行正在运行的线程。
可靠性
原子性-数据传输完全成功或完全失败,但没有事务是部分的。