分享

zookeeper思考与总结2:zookeeper与hdfs对比

本帖最后由 pig2 于 2017-5-12 16:13 编辑
问题导读

1.zookeeper与hdfs有哪些地方相似?
2.storm中,zookeeper api主要操作在哪个文件中?
3.你认为zookeeper是什么?





zookeeper思考与总结1
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21686


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

zookeeper-tree.jpg
可以看作是一棵树,每个节点称做一个ZNode

2.zookeeper一般存储小量数据,zookeeper一般以K,M为单位。hdfs则是存储大数据,以G,T,P等为单位。

2.shell命令相似之处
进入zookeeper
[mw_shl_code=bash,true]zkCli.sh[/mw_shl_code]
或则指定server
[mw_shl_code=bash,true]zkCli.sh -server master:2181[/mw_shl_code]
master为hostname。
进入hdfs[mw_shl_code=bash,true]bin/start-dfs.sh [/mw_shl_code]
进入之后,二者都可以进行shell操作,二者操作有一些相似之处。比如
查看文件都是用
[mw_shl_code=bash,true]ls /[/mw_shl_code]
对于zookeeper,和hdfs都是一样的。

查看路径相关信息stat

[mw_shl_code=bash,true]hdfs dfs -stat /home/hadoop/input
[/mw_shl_code]输出:
2017-05-11 16:00:27
Exit Code:
Returns 0 on success and -1 on error.

[mw_shl_code=bash,true]stat /c/hfx/sw1[/mw_shl_code]
输出:
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协议
[mw_shl_code=bash,true](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]))[/mw_shl_code]

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



已有(2)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条