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

一、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] 纯文本查看 复制代码

?

zkCli.sh

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

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

?

zkCli.sh -server master:2181

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

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

?

ls /

查看里面的存储内容

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

?

[zk: localhost:2181(CONNECTED) 1] ls /
[controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, config]

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

?

[zk: localhost:2181(CONNECTED) 2] ls /brokers/ids

命令为

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

?

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] 纯文本查看 复制代码

?

zkCli.sh

或则指定server

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

?

zkCli.sh -server master:2181

master为hostname。 进入hdfs

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

?

bin/start-dfs.sh

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

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

?

ls /

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

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

?

hdfs dfs -stat /home/hadoop/input

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

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

?

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] 纯文本查看 复制代码

?

(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协议中函数的"组合"。

原文发布于微信公众号 - about云(wwwaboutyuncom)

原文发表时间:2017-05-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏搞前端的李蚊子

Vue.js实现一个SPA登录页面的过程

技术栈 vue.js 主框架 vuex 状态管理 vue-router 路由管理 一般过程 在一般的登录过程中,一种前端方案是: 检查状态:进入页面时或者路...

1.1K12
来自专栏一个会写诗的程序员的博客

webpack 极简教程(前端自动化构建)

Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

1011
来自专栏老马寒门IT

08Vue.js快速入门-Vue综合实战项目

8.1. 前置知识学习 npm 学习 官方文档 推荐资料 npm入门 npm介绍 需要了解的知识点 package.json 文件相关配置选项 ...

4137
来自专栏GIS讲堂

Openlayers4中地图的导出

本文讲述Openlayers4中地图的导出,包括调用天地图切片跨域、Geoserver11 WMS跨域等。

3052
来自专栏wblearn

代码提示插件Spket

Spket是一个可以在Eclipse及MyEclipse中实现JavaScript代码自动提示、自动校验、自动纠错的插件。

1121
来自专栏更流畅、简洁的软件开发方式

【自然框架】稳定版beta1——源码下载,Demo说明

在线演示:http://demo.naturefw.com/ 开源协议   一直想说来着,可是总忘。开源协议采用 BSD开源协议。   一直在说开源,但只是把源...

2365
来自专栏黑泽君的专栏

通过数据库中的表,使用 MyEclipse2017的反向生成工具-->hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件

1、在MyEclipse中,Java视图下,新建一个普通的java project,新建该项目的目的是:用来接收反转引擎生成的实体类和对应的映射文件。

1592
来自专栏BIT泽清

React Native应用部署/马甲包热更新-CodePush最新集成总结(2018年最新)

React Native支持大家用React Native技术开发APP,并打包生成一个APP。在动态更新方面React Native只是提供了动态更新的基础,...

3500
来自专栏王小雷

React-Native-Android-Studio整合开发+环境配置+官方实例

linux下React Native开发环境搭建,使用Android-studio工具进行React Native整合开发。 参考React Native的...

5119
来自专栏更流畅、简洁的软件开发方式

如何动态加载js?

第三方的js文件,自己写的js文件,js越来越多了怎么办? 提出问题: 1、js文件太多了,每个页面都写<script src="...">太麻烦。 2、如果路...

3215

扫码关注云+社区

领取腾讯云代金券