hadoop學習筆記:zookeeper學習(上)

  在前面的文章里我多次提到zookeeper對于分布式系統開發的重要性,因此對zookeeper的學習是非常必要的。本篇博文主要是講解zookeeper的安裝和zookeeper的一些基本的應用,同時我還會教大家如何安裝偽分布式,偽分布式不能在windows下實現,只能在linux下實現,我的偽分布式是通過電腦的虛擬機完成了,好了,不廢話了,具體內容如下:

  首先我們要下載一個zookeeper,下載地址是:

  http://www.apache.org/dyn/closer.cgi/zookeeper/

  一般我們會選擇一個stable版(穩定版)進行下載,我下載的版本是zookeeper-3.4.5。

  我筆記本的操作系統是windows7,windows操作系統可以作為zookeeper的開發平臺,但是不能作為zookeeper的生產平臺,首先我們在windows下安裝一個單機版的zookeeper。

  我們先解壓zookeeper的安裝包,解壓后的zookeeper安裝包我放置的路徑是:

  E:\zookeeper\zookeeper-3.4.5

  下圖是zookeeper的目錄結構:

  我們進入conf包,將zoo_sample.cfg文件復制一份,并將復制好的文件改名為zoo.cfg。打開新建的zoo.cfg文件,將里面的內容進行修改,修改后的文件內容如下:

#initLimit=10
#syncLimit=5
tickTime=2000
dataDir=E:/zookeeper/zookeeper-3.4.5/data
clientPort=2181

?  下面我來解釋下配置文件里的各個參數:

  initLimit和syncLimit是針對集群的參數,在我后面講解偽分布式安裝時候我會再講解。

  tickTime:該參數用來定義心跳的間隔時間,zookeeper的客戶端和服務端之間也有和web開發里類似的session的概念,而zookeeper里最小的session過期時間就是tickTime的兩倍。

  dataDir:英文注釋可以翻譯為存儲在內存中的數據庫快照功能,我們可以看看運行后dataDir所指向的文件存儲了什么樣的數據,如下圖所示:

?

  看來dataDir里還存儲了日志信息,dataDir不能存放在命名為tmp的文件里。

  clientPort:是監聽客戶端連接的端口號。

  接下來我們要將zookeeper的安裝信息配置到windows的環境變量里,我們在“我的電腦”上點擊右鍵,選擇屬性,再點擊高級系統設置,點擊環境變量按鈕,在系統變量這一欄,點擊新建,添加:

變量名:ZOOKEEPER_HOME
變量值:E:\zookeeper\zookeeper-3.4.5

?  還是在系統變量這一欄,找到path,點擊編輯path,在變量值里添加:% ZOOKEEPER_HOME %\bin; % ZOOKEEPER_HOME %\conf;

  Zookeeper使用java編寫的,因此安裝zookeeper之前一定要先安裝好jdk,并且jdk的版本要大于或等于1.6。

  這樣單機版的zookeeper就安裝好了,下面我們將運行zookeeper。

  首先我們打開windows的命令行工具,將文件夾轉到zookeeper安裝目錄的下的bin目錄,然后輸入zkServer命令,回車執行,那么zookeeper服務就啟動成功了。

  下面我們用客戶端連接zookeeper的服務端,我們再打開一個命令行工具,輸入命令:

zkCli -server localhost:2181

?  下面是相關測試,如下圖所示:

  偽分布式的安裝,zookeeper和hadoop一樣也可以進行偽分布式的安裝,下面我就講解如何進行偽分布式安裝。

  我開始嘗試在windows下安裝偽分布式,但是沒有成功,最后是在linux操作系統下才安裝好偽分布式,我們首先下載好zookeeper的安裝程序,然后新建三個配置文件分別是:

zoo1.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=E:/zookeeper/zookeeper-3.4.5/d_1
# the port at which the clients will connect
clientPort=2181
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
dataLogDir=E:/zookeeper/zookeeper-3.4.5/log1_2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

?zoo2.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=E:/zookeeper/zookeeper-3.4.5/d_2
# the port at which the clients will connect
clientPort=2182
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
dataLogDir=E:/zookeeper/zookeeper-3.4.5/logs_2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

?zoo3.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=E:/zookeeper/zookeeper-3.4.5/d_3
# the port at which the clients will connect
clientPort=2183
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
dataLogDir=E:/zookeeper/zookeeper-3.4.5/logs_3
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

?  這里我們把每個配置文件里的clientPort做了一定修改,讓每個文件之間的clientPort不一樣,dataDir屬性也做了同樣的調整,同時還添加了新配置內容,如下所示:

server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

?  這里localhost指的是組成zookeeper服務的機器IP的地址,2887是用于進行leader選舉的端口,3887是zookeeper集群里各個機器之間的通信接口。

  initLimit:是指follower連接并同步到leader的初始化連接,它是通過tickTime的倍數表示,例如我們上面的配置就是10倍的tickTime,當初始化連接時間超過設置的倍數時候則連接失敗。

  syncLimit:是指follower和leader之間發送消息時請求和應答的時間長度,如果follower在設置的時間范圍內不能喝leader通信,那么該follower將會被丟棄,它也是按tickTime的倍數進行設置的。

  dataLogDir:這個配置是指zookeeper運行的相關日志寫入的目錄,設定了配置,那么dataLog里日志的目錄將無效,專門的日志存放路徑,對zookeeper的性能和穩定性有好處。

  這里每一個配置文件都代表一個zookeeper服務器,下面我們啟動偽分布式的zookeeper集群。

  zkServer.sh start zoo1.cfgzkServer.sh start zoo2.cfgzkServer.sh start zoo3.cfg

?

?  下面我寫一個java程序,該程序作為客戶端調用zookeeper的服務,代碼如下:

package cn.com.test;import java.io.IOException;import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;public class zkClient {public static void main(String[] args) throws Exception{Watcher wh = new Watcher(){@Overridepublic void process(WatchedEvent event) {System.out.println(event.toString());}};ZooKeeper zk = new ZooKeeper("localhost:2181",30000,wh);System.out.println("=========創建節點===========");zk.create("/sharpxiajun", "znode1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);System.err.println("=============查看節點是否安裝成功===============");System.out.println(new String(zk.getData("/sharpxiajun", false, null)));System.out.println("=========修改節點的數據==========");zk.setData("/sharpxiajun", "sharpxiajun130901".getBytes(), -1);System.out.println("========查看修改的節點是否成功=========");System.out.println(new String(zk.getData("/sharpxiajun", false, null)));System.out.println("=======刪除節點==========");zk.delete("/sharpxiajun", -1);System.out.println("==========查看節點是否被刪除============");System.out.println("節點狀態:" + zk.exists("/sharpxiajun", false));zk.close();}}

?  執行結果如下:

log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
=========創建節點===========
WatchedEvent state:SyncConnected type:None path:null
=============查看節點是否安裝成功===============
znode1
=========修改節點的數據==========
========查看修改的節點是否成功=========
sharpxiajun130901
=======刪除節點==========
==========查看節點是否被刪除============
節點狀態:null

?  程序我今天不講解了,只是給大伙展示下使用zookeeper的方式,本文可能沒啥新穎的東西,但是本文是一個基礎,有了這個基礎我們才能真正操作zookeeper。

?

?

?

?

?

轉載于:https://www.cnblogs.com/sharpxiajun/p/3294581.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376436.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376436.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376436.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

戀愛Linux(Fedora20)2——安裝Java運行環境(JDK)

因為Fedora20自帶OpenJDK,所以我們先刪除掉自帶的: 1)查看當前的jdk情況 # rpm -qa|grep jdk 2)卸載openjdk # yum -y remove java java-1.7.0-openjdk* 3)下載JDK(我用的是這個,大家用什么版本可以自行選擇)。 http://download.csdn.net/det…

160 - 21 Cabeca

環境: Windows xp sp3 工具: exeinfope ollydbg 查殼: 拿到程序后查殼,發現程序無殼,為Delphi寫的。 程序長成這個樣 輸入: Name:GNUBD Serial:1234567 Serial:76543…

JS函數重載解決方案

JS的函數定義可以指定形式參數名稱,多多少少我們會以為js至少可以支持參數個數不同的方法重載,然而遺憾的是這僅僅是一個假象,js所有的參數都是以arguments傳遞過去的,這個參數類似于數組,在函數調用的時候&#xff0c…

JS中replace替換全部元素的解決辦法

JavaScript中replace() 方法如果直接用str.replace("-","!") 只會替換第一個匹配的字符. 然而我們大多數需要替換的是全部匹配的元素,而JavaScript又沒有java中的replaceAll的方法,這個時候就需要特殊處理了。 String repace(new R…

160 - 22 CarLitoZ.1

環境 Windows xp sp3 工具 exeinfope Ollydbg 查殼 無殼的VB程序 測試 輸入“1234567” 顯示這個: 直接OD載入字符串搜索。 00402D20 > \55 push ebp 00402D21 . 8BEC mov ebp,esp 00402D23 . 83EC 0C sub e…

實戰MEF(4):搜索范圍

在前面的文章中,幾乎每個示例我們都會接觸到擴展類的搜索位置,我們也不妨想一下,既然是自動擴展,它肯定會有一個或者多人可供查找的位置,不然MEF框架怎么知道哪里有擴展組件呢? 就像我們用導航系統去查找某…

Android應用程序請求SurfaceFlinger服務創建Surface的過程分析

文章轉載至CSDN社區羅升陽的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/7884628 前面我們已經學習過Android應用程序與SurfaceFlinger服務的連接過程了。連接上SurfaceFlinger服務之后,Android應用程序就可以請求…

Oracle面試題(基礎篇)

1. Oracle跟SQL Server 2005的區別? 宏觀上: 1). 最大的區別在于平臺,oracle可以運行在不同的平臺上,sql server只能運行在windows平臺上,由于windows平臺的穩定性和安全性影響了sql server的穩定性和安全性 2). oracl…

160 - 23 Chafe.1

環境 Windows xp sp3 工具 exeinfope ollydbg 查殼 用exeinfoe查殼 測試 可以從左下角狀態欄看出serial是無效的 直接OD載入字符串搜索 00401274 |. /75 17 jnz XChafe_1.0040128D 00401276 |. |6A 00 push 0x0 ; /Ti…

fis 詳細介紹(mac版) - 12-26沒有弄完 - 暫停

fis可以讓fe進入角色,而不必擔心底層的架構,性能得到優化。僅需三條命令,即可解決所有前端開發要求fis是nodejs寫的,發布在vpn(?)上下載 www.nodejs.org,并安裝nodejs,其中包括npm安裝fis: sudo…

用文件模擬CMOS保存數據

Hi3520D 芯片的內置CMOS最多只有5個字節可以用,但是我需要保存的數據有很多。 其中一個解決辦法是:可以把其他需要保存的數據放到一個配置文件中。每次寫的時候寫到配置文件,用的時候再從配置文件讀出數據即可。 用文件寫: 1 stat…

160 - 24 Chafe.2

環境: Windows xp sp3 工具 exeinfope OllyDBG 查殼 用exeinfope查殼,發現是沒有殼的。 測試 可以看出是從紅色框框里面的內容判斷serial是否有效 OD載入,字符串搜索可以得到: 004011EC . 55 pus…

十個利用矩陣乘法解決的經典題目

轉載自 Matrix67: The Aha Moments 好像目前還沒有這方面題目的總結。這幾天連續看到四個問這類題目的人,今天在這里簡單寫一下。這里我們不介紹其它有關矩陣的知識,只介紹矩陣乘法和相關性質。 不要以為數學中的矩陣也是黑色屏幕上不斷變化的綠色…

[C++]搞清楚類中構造與析構的順序

定義一個類對象時,首先根據初始化列表初始化類的成員(就算沒有顯式定義初始化列表,編譯器也會默認地初始化一次),然后運行構造函數。因此,類成員的構造函數必定先于類的構造函數運行。 class A { public:A(…

160 - 25 CodeZero.1

環境 Windows xp sp3 工具 exeinfope OllyDBG 查殼 無殼的VB程序 測試 運行程序后出現Nag窗口,所以這次的目標是除Nag窗口和找到serial 程序運行后彈出Nag窗口,并且等待5秒后按鈕的標題改成“Continue..”,點擊后才會彈出輸入seria…

WP8開發學習筆記動態修改啟動時導航的第一個頁面(如登錄前啟動頁為LoginPage,登錄后變為MainPage)...

很多時候我們需要在啟動程序的時候根據狀態改變初始導航頁面,比如程序在啟動的時候判斷用戶是否登錄, 如果未登錄則跳轉到LoginPage.xaml否則跳轉到MainPage界面。 這時候就要分析程序的啟動和導航的過程。 程序的啟動是App.xamlcs負責的。 App類的構造器…

6.數組和Hash表

當顯示多條結果時,存儲在變量中非常智能,變量類型會自動轉換為一個數組。 在下面的例子中,使用GetType()可以看到$a變量已經不是我們常見的string或int類型,而是Object類型,使用-is操作符來判斷是否是個數組&#xff0…

160 - 26 Colormaster

環境 Windows xp sp3 查殼 無殼的VB程序 測試: 輸入 Name:123456 Serial:12345 字符串搜索,找到判斷位置。 判斷Name的長度要大于等于5: 00402CBC . 33C9 xor ecx,ecx 00402CBE . 83F8 04 cmp eax,0x4 00…

Android 菜單(OptionMenu)大全 建立你自己的菜單

菜單是用戶界面中最常見的元素之一,使用非常頻繁,在Android中,菜單被分為如下三種,選項菜單(OptionsMenu)、上下文菜單(ContextMenu)和子菜單(SubMenu)&#…

160 - 27 Cosh.1

環境 Windows XP sp3 工具 exeinfope ollydbg 查殼 無殼的MFC程序 測試 彈出這個: 是一個CD-CHECK保護的程序。 字符串搜索,一下子就能來到這里: 0040121A . 68 9C304000 push Cosh_1.0040309C …