zookeeper

来源:互联网 发布:mac os 修复磁盘权限 编辑:程序博客网 时间:2024/06/03 03:26
1.YARN主要包括:ResourceManager,NodeManager,ApplicationMaster,Container;
  MapReduce作业提交之后,在nodeManager节点首先会new 一个ApplicationMaster,然后ApplicationMaster向ResourceManager申请资源,ResourceManager将ApplicationMaster申请到的资源交给nodemanager,
  nodemanager会将资源封装为一个container,container是进程级别的,一个Map task 或者一个Reduce task运行完成之后,container就会消失!
 
 
2.zookeeper可以做高可用,但是这是它的副产品!
   
   
3.面试谈的时候很重要,绝对不是干的多久薪资高,干的少也有可能薪资高!


4.zookeeper是为了保证分布式的数据一致性的!


5.Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务
    它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等

6.zookeeper集群节点最好是奇数的,当然偶数个数也没问题!



7.为什么使用Zookeeper?
    ? 大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等)
    ? 目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制
    ? 协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器
    ? ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用
    
    
8.Keepalive高可用的缺点:    
    ? Keepalived监控节点不好管理
    ? Keepalive 采用优先级监控
        ? 没有协同工作
        ? 功能单一
    ? Keepalive可扩展性差
    
    注:keepalived 主挂了之后再重启之后,leader领导权会抢回来!
    

8.Zookeeper优点
    特点                                         说明
    最终一致性                       为客户端展示同一个视图,这是zookeeper里面一个非常重要的功能
    可靠性                            如果消息被到一台服务器接受,那么它将被所有的服务器接受。
    实时性                            Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。(leader上一定会有最新的数据)
    独立性                            各个Client之间互不干预
    原子性                            更新只能成功或者失败,没有中间状态。
    顺序性                            所有Server,同一消息发布顺序一致。(leader里面有一个队列,这也保证了按着接收到请求的顺序性)
    
    
    注:(中间某一时刻可能信息不同,所以是最终一致性) ,leader上一定会有最新的数据,leader里面有一个队列,这也保证了按着接收到请求的顺序性!
    

    
9.zookeeper的工作原理,
    1.每个Server在内存中存储了一份数据;(这里是在内存中存储了数据哦,当然也会定期落到磁盘中)
    2.Zookeeper启动时,将从实例中选举一个leader(Paxos协议)
    3.Leader负责处理数据更新等操作
    4.一个更新操作成功,当且仅当大多数Server在内存中成功修改数据。
    
10.Zookeeper能帮我们做什么?
    ? Hadoop,使用Zookeeper的事件处理确保整个集群只有一个NameNode,存储配置信息等.
    ? HBase,使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等.

11.Zookeeper的安装和配置(集群模式)
    ? 创建myid文件,server1机器的内容为:1,server2机器的内容为:2,server3机器的内容为:3
    ? 在conf目录下创建一个配置文件zoo.cfg,
        tickTime=2000
        dataDir=/Users/zdandljb/zookeeper/data
        dataLogDir=/Users/zdandljb/zookeeper/dataLog
        clientPort=2181
        initLimit=5
        syncLimit=2
        server.1=server1:2888:3888
        server.2=server2:2888:3888
        server.3=server3:2888:3888
        
        
12. ? tickTime:发送心跳的间隔时间,单位:毫秒
    ? dataDir:zookeeper保存数据的目录。(zookeeper启动时的数据是放在内存中的,但是等到一定时间之后也会将数据保存到本地目录中)
    ? clientPort:客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求(默认是2181)。
    ? initLimit: 这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
    ? syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息(是否还活着以及信息同步),请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
    ? server.A=B:C:D:其 中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号

    
13.client复制增删改查请求,
   follower:具有投票功能
   leader: leader向follower提议,leader收到follower的投票回复,然后决定到底提议是否通过 ;然后同步信息,leader本身也具有投票权!
   

14.keepalived 主挂了之后再重启之后,leader领导权会抢回来!



15.因为在zoo.cfg配置信息中配置了集群的信息,所以它知道它的zookeeper集群是哪几台,所以启动了一台的服务之后,实际上还是没法运行的,此时没有leader,也没有follower!


16.用jps查看进程的时候,QuorunPeerMain有这个服务,不代表集群已经启动了,因为这时候还没有leader和follower状态,当leader挂了的时候,follower谁先发现,一般这家伙就会选自己为leader,然后就会征求其它follower的同意!


17.来的早不如来的巧,时机要比时间更重要,Timing more important than time!


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

    
    注意:observer:是不能投票的,将写请求转发给leader,并同步leader的状态,leader和follower都是可以投票的,票数必须超过一般才能选举出来,一般对于公司是用不到observer的!
         follower一般也不会太多,太多的话选举和每一次更新都会去找到所有的follower机器!也就是zookeeper集群也不会太大!
    
19.Zookeeper的读写机制
    ? Zookeeper是一个由多个server组成的集群
    ? 一个leader,多个follower
    ? 每个server保存一份数据副本
    ? 全局数据一致
    ? 分布式读写
    ? 更新请求转发,由leader实施



20.Zookeeper的保证
    ? 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
    ? 数据更新原子性,一次数据更新要么成功,要么失败
    ? 全局唯一数据视图, client无论连接到哪个server,数据视图都是一致的
    ? 实时性,在一定事件范围内, client能读到最新数据

    
21.为什么zookeeper要搭建偶数台?
   1.容错,(奇数台效果可以等同于偶数台,而且选举更节省时间)
   2.如果挂掉一般那么就选举不出leader了,防止脑裂!
   
   
   
22.注意:增删改的时候也需要投票,只要半数以上通过,那么就意味着这次投票成功,可以增删改!




23.zookeeper实际上是选自己,做到了自己是高可用的!



24.keepalived与zookeeper都可以做高可用,那这两者有什么区别呢?
   区别:1:
         nginx 的时候更倾向于keepalived,keepalived会主动的访问nginx来保持通信!  --------------->谁主动谁被动!
         hadoop大数据的高可用是用Zookeeper(HDFS的NameNode和Yarn中的Resourcemanager)!
        
         2.keepalived 自身当请求多了的时候,主keepalive受不了的时候,那就挂了!再去从,从机也会挂!就这么一直挂下去就完了!
           zookeeper 的每一个zkserver都可以响应请求,做到了负载均衡!

         3.我们之所以hadoop之后用到了zookeeper,是因为除了高可用用到了zookeeper,但是同时别忽略了zookeeper中还可以保存了其它的数据信息,例如Hbase的RegionServer的信息等等!
        
        
        
25.投票的时候实际上就是增删改,这些数据就是在内存中完成的!


26.选举leader的时候,防止脑裂(即使脑裂之后也只有一个leader),数据更新的时候都会用到超过半数,当半数以上的机器更新成功了,我们就commit一下!


27.选举leader和更新数据的时候,会从数据最新的那些机子中选出leader!


28.为什么zookeeper集群的数目,一般为奇数个?
    Leader选举算法采用了Paxos协议;
    Paxos核心思想:当多数Server写成功,则任务数据写成功
    如果有3个Server,则两个写成功即可;
    如果有4或5个Server,则三个写成功即可。
    Server数目一般为奇数(3、 5、 7)
    如果有3个Server,则最多允许1个Server挂掉;
    如果有4个Server,则同样最多允许1个Server挂掉
    由此,我们看出3台服务器和4台服务器的的容灾能力是一样的,所以为了节省服务器资源,一般我们采用奇数个数,作为服务器部署个数。


29.Zookeeper的数据模型
    ? 层次化的目录结构,命名符合常规文件系统规范
    ? 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
    ? 节点Znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点
    ? Znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本
    ? 客户端应用可以在节点上设置监视器
    ? 节点不支持部分读写,而是一次性完整读写
    
    
30:在mysql中建立索引实际上就是将索引加载到内存中,从内存中读数据就会快(存储在硬盘中的,MYSQL需要的时侯调入部分内容到内存。)!

31.命令行工具的一些简单操作如下:
    1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
    2. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
    3. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
    4. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
    5. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
    6. 删除文件: delete /zk 将刚才创建的 znode 删除
    7. 退出客户端: quit
    8. 帮助命令: help
    
32.Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等.

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


34.Zookeeper的节点
    ? Znode有两种类型,短暂的(ephemeral)和持久的(persistent)
    ? Znode的类型在创建时确定并且之后不能再修改
    ? 短暂znode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点
    ? 持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除
    ? Znode有四种形式的目录节点
    ? PERSISTENT、
    ? EPHEMERAL
    ? PERSISTENT_SEQUENTIAL、
    ? EPHEMERAL_SEQUENTIAL

    
35. Watcher 在 ZooKeeper 是一个核心功能, Watcher 可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目
    录节点上的 Watcher,从而每个客户端都很快知道它所关注的目录节点的状态发生变化,而做出相应的反应
    ? 可以设置观察的操作:exists,getChildren,getData
    ? 可以触发观察的操作:create,delete,setData


36.在NameNode的高可用的时候,zkfc会监控namenode的状态,并将状态信息写入到zookeeper内存数据库中的一个节点(znode节点)中,所以Namenode和Resourcemanager的高可用都是利用zookeeper的znode临时节点的一个特性!

37.分布式锁实际上是自己获得的,实际上Active NameNode靠zookeeper的分布式锁来实现的!

38.增删改请求都发给了leader,所以它能够保证顺序性!



39.zookeeper数据保存在内存,会定期落地磁盘 dataDir里面!

40.zookeeper为什么是奇数个?
   1.容错和偶数是一样的,所以没必要多一台
   2.防止脑裂
   
41.为什么要超过半数?


   3,5,7


   
42.CDH通过修改一处,在所有机器上的配置文件都改了就是通过zookeeper来实现的!


43.zookeeper的主产品是:
     1.做分布式数据一致性,(zookeeper集群本身高可用,里面可以存储hbase,storm的元数据信息!)
     2.其副产品是实现了高可用(就是用分布式锁实现的,保持一致性)!
    






























































































   




























   







0 0
原创粉丝点击