热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hadoop笔记整理(三):Zookeeper

[TOC]为了方便知识的管理,把zk归到hadoop知识中来进行整理。zookeeper基础知识zookeeper概述ZooKeeper是一个分布式的,

[TOC]


为了方便知识的管理,把zk归到hadoop知识中来进行整理。

zookeeper基础知识

zookeeper概述

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。一言以蔽之,ZooKeeper是分布式系统中的协调系统。有如下特点:简单ZooKeeper的核心是一个精简的文件系统,它支持一些简单的操作和一些抽象操作,例如,排序和通知。丰富ZooKeeper的操作是很丰富的,可实现一些协调数据结构和协议。例如,分布式队列、分布式锁和一组同级别节点中的“领导者选举”。高可靠ZooKeeper支持集群模式,可以很容易的解决单点故障问题。松耦合交互不同进程间的交互不需要了解彼此,甚至可以不必同时存在,某进程在ZooKeeper中留下消息后,该进程结束后其它进程还可以读这条消息。资源库ZooKeeper实现了一个关于通用协调模式的开源共享存储库,能使开发者免于编写这类通用协议。

zookeeper的角色

领导者(leader):负责进行投票的发起和决议,更新系统状态。学习者(learner):包括跟随者(follower)和观察者(observer)follower:用于接受客户端请求并向客户端返回结果,在选举过程中参与投票。Observer:可以接受客户端连接,将写请求转发给leader,但observer不参与投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。客户端(client):请求发起方。

zookeeper的数据模型

层次化的目录结构,命名符合常规文件系统规范每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识节点znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本客户端应用可以在节点上设置监视器节点不支持部分读写,而是一次性完整读写

zookeeper的节点类型

ZooKeeper节点znode有两种类型,临时节点(ephemeral)和持久节(persistent)。znode的类型在创建时确定并且之后不能再修改。ephemeral节点在客户端会话结束时,将会被zookeeper删除,并且ephemeral节点不可以有子节点。persistent节点不依赖与客户端会话,只有当客户端明确要删除该persistent节点时才会被删除。目前znode有四种形式的目录节点,PERSISTENT、PERSISTENT_SEQUENTIAL、EPHEMERAL、EPHEMERAL_SEQUENTIALznode可以是临时节点,一旦创建这个znode的客户端与服务器失去联系,这个znode也将自动删除,ZooKeeper的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称之为session,如果znode是临时节点,这个seesion失效,znode也就删除了;持久化目录节点,这个目录节点存储的数据不会丢失;顺序自动编号的目录节点,这种目录节点会更具当前已经存放在的节点数自动加1,然后返回给客户端已经成功创建的目录节点名;临时目录节点,一旦创建这个节点的客户端和服务器端口也就是session超时,这种节点会被自动删除。33

zookeeper的安装与操作

约定:安装在/opt目录下面http://zookeeper.apache.org/releases.html单节点安装解压:tar -zxvf /opt/soft/zookeeper-3.4.6.jar -C /opt/重命名:mv /opt/soft/zookeeper-3.4.6 /opt/soft/zookeeper添加到环境变量中vim /etc/profile.d/hadoop-eco.sh,添加一下内容:export ZOOKEEPER_HOME=/opt/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/bin让配置生效source /etc/profile.d/hadoop-eco.sh配置zookeeper$ZOOKEEPER_HOME/confcp zoo_sample.cfg zoo.cfgvim zoo.cfg只需要修改一个地方dataDir=/opt/zookeeper/data在$ZOOOKEEPER创建一个目录data即可启动:$ZOOKEEPER_HOME/bin/zkServer.sh start关于zk的日志文件存储修改$ZOOKEEPER_HOME/bin/zkServer.sh,94行添加ZOO_LOG_DIR=$ZOOKEEPER_HOME/log客户端连接:$ZOOKEEPER_HOME/bin/zkCli.sh基本的命令行操作:[zk: localhost:2181(CONNECTED) 10] helpZooKeeper -server host:port cmd argsstat path [watch]set path data [version]ls path [watch]delquota [-n|-b] pathls2 path [watch]setAcl path aclsetquota -n|-b val pathhistory redo cmdnoprintwatches on|offdelete path [version]sync pathlistquota pathrmr pathget path [watch]create [-s] [-e] path data acladdauth scheme authquit getAcl pathclose connect host:portJava API的方式来访问ZooKeeper// 创建一个目录节点String path = "/zk";byte data[] = "this is my first zk node".getBytes();
// String ret = zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
// System.out.println("创建临时节点返回值:" + ret);String zk = zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);System.out.println("创建持久节点返回值:" + zk);// 创建一个子目录节点path = "/zk/childone";data = "child one node".getBytes();zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);// 取出子目录节点列表List cList = zooKeeper.getChildren("/zk", true);for (String child : cList) {System.out.println(child);}// 修改子目录节点数据data = "child one node last information".getBytes();zooKeeper.setData(path, data, -1);// 创建另外一个子目录节点path = "/zk/childtwo";data = "child two node".getBytes();zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);List cList = zooKeeper.getChildren("/zk", true);for (String child : cList) {System.out.println(child);}// 删除子目录节点zooKeeper.delete("/zk/childtwo", -1);zooKeeper.delete("/zk/childone", -1);// 删除父目录节点/*** 这里没有提供一个递归删除的API*/zooKeeper.delete("/zk", -1); 分布式安装uplooking01 zkuplooking02 zkuplooking03 zk解压:tar -zxvf /opt/soft/zookeeper-3.4.6.tar.gz -C /opt/重命名:mv /opt/soft/zookeeper-3.4.6 /opt/soft/zookeeper添加到环境变量中vim /etc/profile.d/hadoop-etc.sh,添加一下内容:export ZOOKEEPER_HOME=/opt/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/binexport ZOO_LOG_DIR=/opt/zookeeper/logs ##zookeeper的日志目录让配置生效source /etc/profile.d/hadoop-eco.sh配置zookeeper$ZOOOKEEPER/confcp zoo_sample.cfg zoo.cfgvim zoo.cfgdataDir=/opt/zookeeper/data在$ZOOOKEEPER创建一个目录data即可添加集群中的三台机器server.100=uplooking01:2888:3888server.101=uplooking02:2888:3888server.102=uplooking03:2888:3888 端口2181--->zookeeper服务器开放给client连接的端口2888--->zookeeper服务器之间进行通信的端口3888--->zookeeper和外部进程进行通信的端口拷贝zookeeper安装目录和环境变量文件到其它两台机器上scp -r /opt/zookeeper root@uplooking02:/opt/scp -r /opt/zookeeper root@uplooking03:/opt/scp /etc/profile.d/hadoop-eco.sh root@uplooking02:/etc/profile.d/scp /etc/profile.d/hadoop-eco.sh root@uplooking03:/etc/profile.d/启动:到每一台机器上执行脚本zkServer.sh start查看zk的角色:zkServer.sh status其中有一台是leader,另外两台是follower为了保障zookeeper在为其它进程服务的时候,能够做出决策,进行投票,有结果,所以需要配置zookeeper机器的个数,一般都要是2N+1(N是正整数)

转载于:https://blog.51cto.com/xpleaf/2145101


推荐阅读
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文介绍了如何在 MapReduce 作业中使用 SequenceFileOutputFormat 生成 SequenceFile 文件,并详细解释了 SequenceFile 的结构和用途。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • Spark与HBase结合处理大规模流量数据结构设计
    本文将详细介绍如何利用Spark和HBase进行大规模流量数据的分析与处理,包括数据结构的设计和优化方法。 ... [详细]
  • Hadoop平台警告解决:无法加载本机Hadoop库的全面应对方案
    本文探讨了在Hadoop平台上遇到“无法加载本机Hadoop库”警告的多种解决方案。首先,通过修改日志配置文件来忽略该警告,这一方法被证明是有效的。其次,尝试指定本地库的路径,但未能解决问题。接着,尝试不使用Hadoop本地库,同样没有效果。然后,通过替换现有的Hadoop本地库,成功解决了问题。最后,根据Hadoop的源代码自行编译本地库,也达到了预期的效果。以上方法适用于macOS系统。 ... [详细]
  • Kafka 是由 Apache 软件基金会开发的高性能分布式消息系统,支持高吞吐量的发布和订阅功能,主要使用 Scala 和 Java 编写。本文将深入解析 Kafka 的安装与配置过程,为程序员提供详尽的操作指南,涵盖从环境准备到集群搭建的每一个关键步骤。 ... [详细]
  • 在CentOS系统中部署与配置ZooKeeper详解 ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
author-avatar
拍友2502862603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有