当前位置: 首页 > news >正文

Zookeeper基础教程

Zookeeper基础教程

资料来源:Zookeeper Tutorial (tutorialspoint.com)

zookeeper就是Hadoop生态动物园的管理员

Zookeeper Tutorial

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)应用程序。服务器应用程序实际上是分布式的,并且具有公共接口,因此客户机可以连接到集群中的任何服务器并获得相同的结果。客户机应用程序是与分布式应用程序交互的工具。如下图所示。

Distributed Application


分布式应用程序的优点

可靠性−单个或部分系统故障不会导致整个系统故障。

可扩展性-性能可以在需要时增加更多的机器,在应用程序的配置中进行微小的更改,而不会停机。

透明性-隐藏系统的复杂性,显示其作为一个单一的实体/应用程序。


分布式应用的挑战

竞态条件(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中用于协调队列以执行正在运行的线程。

可靠性

原子性-数据传输完全成功或完全失败,但没有事务是部分的。

相关文章:

  • 计算机网络:网络层 - IP数据报的转发
  • docker方式启动的redis如何使用自定义配置文件
  • word常用的通配符大全
  • [Vulnhub] Troll FTP匿名登录+定时任务权限提升
  • 【Android 11】AOSP Settings添加屏幕旋转按钮
  • 每天一个数据分析题(三百八十三)- 聚类
  • 怎么看电脑实时充电功率
  • 关于Notebook环境的安装记录
  • Ubuntu20.04中复现FoundationPose
  • 永磁同步电机驱动死区补偿
  • TIM: A Time Interval Machine for Audio-Visual Action Recognition
  • Gflags的使用
  • rknn转换后精度差异很大,失真算子自纠
  • 未授权访问漏洞总结
  • 一文让你彻底搞懂什么是VR、AR、AV、MR
  • 《深入 React 技术栈》
  • 【个人向】《HTTP图解》阅后小结
  • 0基础学习移动端适配
  •  D - 粉碎叛乱F - 其他起义
  • If…else
  • iOS | NSProxy
  • java中具有继承关系的类及其对象初始化顺序
  • jquery ajax学习笔记
  • js正则,这点儿就够用了
  • Linux快速复制或删除大量小文件
  • Puppeteer:浏览器控制器
  • vue-loader 源码解析系列之 selector
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 浮现式设计
  • 前端面试题总结
  • 如何使用 JavaScript 解析 URL
  • 深度学习中的信息论知识详解
  • 双管齐下,VMware的容器新战略
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 听说你叫Java(二)–Servlet请求
  • 微信小程序设置上一页数据
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 优秀架构师必须掌握的架构思维
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #数学建模# 线性规划问题的Matlab求解
  • (175)FPGA门控时钟技术
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (编译到47%失败)to be deleted
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (第30天)二叉树阶段总结
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (七)Java对象在Hibernate持久化层的状态
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (五)c52学习之旅-静态数码管
  • (转)h264中avc和flv数据的解析