前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >zookeeper思考与总结1:在其它组件的作用及hdfs对比

zookeeper思考与总结1:在其它组件的作用及hdfs对比

作者头像
用户1410343
发布2018-03-26 15:24:32
1.1K0
发布2018-03-26 15:24:32
举报
文章被收录于专栏:about云

一、zookeeper在其它组件的作用

1.为什么会产生zookeeper zookeeper是模仿的谷歌的Chubby来解决分布式一致性的问题。2006年的时候Google出了Chubby,2009年3年以后Yahoo在Apache上推出了类似的产品ZooKeeper. ZooKeeper跟Chubby一样用来存放一些相互协作的信息(Coordination),这些信息比较小一般不会超过1M,在zookeeper中是以一种hierarchical tree的形式来存放,这些具体的Key/Value信息就store在tree node中。当有事件导致node数据,例如:变更,增加,删除时,Zookeeper就会调用 triggerWatch方法,判断当前的path来是否有对应的监听者(watcher),如果有watcher,会触发其process方法,执行process方法中的业务逻辑. 2.zookeeper的应用 zookeeper在kafka的作用 kafka将zookeeper做小型数据库这里我们进入zookeeper看下保存的kafka的相关信息 通过

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
zkCli.sh

上面命令,自动连接本地或则通过下面命令

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
zkCli.sh -server master:2181

指定服务器连接master。 进入后,我们通过下面命令

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
ls /

查看里面的存储内容

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 1] ls /
[controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, config]

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 2] ls /brokers/ids

命令为

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
ls /brokers/ids

zookeeper在hbase中的作用: 1.选举 我们知道hbase通过zookeeper选举master,也就是说zookeeper提高了hbase集群的稳定性。换句话说,没有zookeeper,hbase稳定性大大降低,甚至不能启动。 2.存储 详解:

hbase在启动的时候,hmaster启动时候会将hbase 系统表-ROOT- 加载到 zookeeper cluster,通过zookeeper cluster可以获取当前系统表.META.的存储所对应的regionserver信息。

HBase中的znode

/hbase是集群的根znode,ZookeeperWatcher初始化时创建.

还有诸如/hbase/root-region-server,/hbase/master,大家可以在创建zookeeper后,进入zookeeper查看

Zookeeper在storm充当的作用 Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeeper上面写状态信息来分配任务, supervisor,task通过从zookeeper中读状态来领取任务,同时supervisor, task也会定义发送心跳信息到zookeeper, 使得nimbus可以监控整个storm集群的状态,从而可以重启一些挂掉的task。 ZooKeeper 使得整个storm集群十分的健壮,任何一台工作机器挂掉都没有关系,只要重启然后从zookeeper上面重新获取状态信息就可以了。 下面一张图,说明了zookeeper的作用:保存了集群操作的状态

storm有哪些目录,这里简单列出来 Strom在Zookeeper中的目录结构 /assignments -> 任务分配信息 /storms -> 正在运行的topology的ID /supervisors -> 所有的Supervisors的心跳信息 /workerbeats -> 所有的Worker的心跳 /errors -> 产生的出错信息 更多可以网上查询。

二、zookeeper与hdfs对比

上文看到zookeeper在其它大数据组件中的作用。如果我们初学,应该也知道,zookeeper在很多地方用到。那么zookeeper与hdfs有哪些异同。 1.二者都是分布式存储 1.zookeeper可以在多台机器存储数据,hdfs同样也是。如下为ZooKeeper数据模型的结构

可以看作是一棵树,每个节点称做一个ZNode 2.zookeeper一般存储小量数据,zookeeper一般以K,M为单位。hdfs则是存储大数据,以G,T,P等为单位。 2.shell命令相似之处 进入zookeeper

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
zkCli.sh

或则指定server

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
zkCli.sh -server master:2181

master为hostname。 进入hdfs

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
bin/start-dfs.sh

进入之后,二者都可以进行shell操作,二者操作有一些相似之处。比如 查看文件都是用

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
ls /

对于zookeeper,和hdfs都是一样的。 查看路径相关信息stat

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
hdfs dfs -stat /home/hadoop/input

输出: 2017-05-11 16:00:27 Exit Code: Returns 0 on success and -1 on error.

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
stat /c/hfx/sw1

输出: cZxid = 0x2000007df ctime = Thu Mar 14 11:08:28 CST 2013 mZxid = 0x200000a87 mtime = Thu Mar 14 15:00:34 CST 2013 pZxid = 0x2000007df cversion = 0 dataVersion = 608 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0 要地说明cZxid表示创建该节点时候的zxid,mZxid表示当前的,zxid是用来为选举leader服务的 例如还有get命令,二者皆有。当然也有不同的地方,更多可查看 HDFS的常用操作--hdfs下的文件操作常用命令总结 ZooKeeper系列3:ZooKeeper命令、命令行工具及简单操作 3.都有相关api 有了api,我们就可以按照自己的想法编程。很多初学者由于没有认识到这个问题,所以会有“部署hbase,不安装zookeeper是否可以,部署storm,不安装zookeeper是否可以”。这样肯定是不可以的。因为hbase,storm,kafka中都使用了zookeeper相关api,来完成它们各自的事情。如果不理解,可以查看第一篇:zookeeper思考与总结1:zookeeper在其它组件的作用 相关api,这里以storm为例:cluster.clj文件中,有关于storm操作zookeeper的主要函数.文件位置在 apache-storm-1.1.0-src\apache-storm-1.1.0\storm-core\src\clj\org\apache\storm 文件中函数主要定义在命名空间backtype.storm.cluster. backtype.storm.cluster定义了两个重要protocol:ClusterState和StormClusterState。clojure中的protocol可以看成java中的接口,封装了一组方法。ClusterState协议中封装了一组与zookeeper进行交互的基础函数,如获取子节点函数,获取子节点数据函数等,ClusterState协议定义如下: ClusterState协议

[Bash shell] 纯文本查看 复制代码

?

代码语言:javascript
复制
(defprotocol ClusterState
 (set-ephemeral-node [this path data])
 (delete-node [this path])
 (create-sequential [this path data])
 ;; if node does not exist, create persistent with this data
 (set-data [this path data])
 (get-data [this path watch?])
 (get-version [this path watch?])
 (get-data-with-version [this path watch?])
 (get-children [this path watch?])
 (mkdirs [this path])
 (close [this])
 (register [this callback])
 (unregister [this id]))

StormClusterState协议封装了一组storm与zookeeper进行交互的函数,可以将StormClusterState协议中的函数看成ClusterState协议中函数的"组合"。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 about云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档