zookeeper與java交互小結(jié):如何高效地使用API

zookeeper會話及超時處理1、zookeeper session也就是會話,用于維持客戶端與服務(wù)器之間的連接狀態(tài)。在ZooKeeper中,客戶端和服務(wù)端建立連接后...
zookeeper會話及超時處理
1、zookeeper session也就是會話,用于維持客戶端與服務(wù)器之間的連接狀態(tài)。在ZooKeeper中,客戶端和服務(wù)端建立連接后會創(chuàng)建一個session(會話),每一個session對應(yīng)一個全局唯一的會話ID(Session ID)。就像瀏覽器和Web服務(wù)器一樣,首次連接Web服務(wù)器的時候為了跟蹤客戶端,Web服務(wù)器會創(chuàng)建一個Session。
2、會話默認每兩Tick(zk的時鐘周期)后會過期,以確保連接的實時性。客戶端會自動處理連接故障,通過持續(xù)的請求保持活躍,并通過PING請求驗證連接的存活。監(jiān)聽機制是zk的單向通知,允許讀操作設(shè)置超時,確保數(shù)據(jù)獲取的實時性。
3、對于ZooKeeper來說,它的會話與服務(wù)端是通過心跳保持連接的,當(dāng)心跳超時客戶端會收到鏈接丟失的事件,通常來說這不是問題,因為ZK的客戶端對自動連接。但如果一直連接不上,服務(wù)端會在會話有效期之后,將會話置為過期。
4、一般包括數(shù)據(jù)節(jié)點創(chuàng)建與刪除、數(shù)據(jù)內(nèi)容更新和客戶端會話創(chuàng)建與失效等操作。對應(yīng)每一個事務(wù)請求,為了保證事務(wù)的順序一致性,ZooKeeper都會為其分配一個全局唯一的事務(wù)ID,用 ZXID 表示,通常是一個64位的數(shù)字。
5、PERSISTENT-持久節(jié)點 除非手動刪除,否則節(jié)點一直存在于 Zookeeper 上 (2)EPHEMERAL-臨時節(jié)點 臨時節(jié)點的生命周期與客戶端會話綁定,一旦客戶端會話失效(客戶端與zookeeper 連接斷開不一定會話失效),那么這個客戶端創(chuàng)建的所有臨時節(jié)點都會被移除。
6、Eureka可以很好應(yīng)對網(wǎng)絡(luò)故障導(dǎo)致部分碼芹梁節(jié)點失去聯(lián)系的情況,而不會想Zookeeper一樣,使得整個注冊系統(tǒng)癱瘓。兩者遵循的原則不一樣,Eureka保證的AP,Zookeeper保證的CP。
HBase訪問接口
HBase提供了多種訪問接口,以滿足不同場景的需求:Native Java API:這是最常見的高效方式,適用于與Hadoop MapReduce Job并行處理大批量HBase數(shù)據(jù)。 HBase Shell:作為命令行工具,適合于HBase的日常管理和操作。
在線訪問hbase表數(shù)據(jù)。pig是一種腳本語言,在hbase訪問接口中,適合處理大規(guī)模數(shù)據(jù),也適合做數(shù)據(jù)統(tǒng)計,可以用在需要在線訪問hbase表數(shù)據(jù)的場合。
NativeJavaAPI,最常規(guī)和高效的訪問方式,適合HadoopMapReduceJob并行批處理HBase表數(shù)據(jù)。HBaseShell,HBase的命令行工具,最簡單的接口,適合HBase管理使用。ThriftGateway,利用Thrift序列化技術(shù),支持C++,PHP,Python等多種語言,適合其他異構(gòu)系統(tǒng)在線訪問HBase表數(shù)據(jù)。
hbase的特點:高可靠性、高性能、面向列、可伸縮的。HBase – Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統(tǒng),利用HBase技術(shù)可在廉價PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲集群。HBase是Apache的Hadoop項目的子項目。
關(guān)于zookeeper,下列說法錯誤的是
1、關(guān)于zookeeper,下列說法錯誤的是不選舉Leader。
2、錯誤的說法是:Zookeeper只能用于分布式系統(tǒng)的協(xié)調(diào)服務(wù)。Zookeeper的基本功能與用途 首先要明確的是,Zookeeper的確經(jīng)常被用于分布式系統(tǒng)的協(xié)調(diào)服務(wù)。它可以幫助分布式系統(tǒng)實現(xiàn)諸如領(lǐng)導(dǎo)選舉、配置管理、命名服務(wù)、分布式同步等功能。然而,這并不意味著Zookeeper只能用于分布式系統(tǒng)的協(xié)調(diào)服務(wù)。
3、關(guān)于Zookeeper的說法錯誤的是:Zookeeper是一個分布式協(xié)調(diào)服務(wù)的收費框架。Zookeepe的定義 Zookeeper是一個分布式協(xié)調(diào)服務(wù),由雅虎研究員開發(fā),是Google的Chubby一個開源實現(xiàn)。
4、判斷)FusionInsight HD 的Streaming對于Zookeeper弱依賴,即使Zookeeper故障Streaming也可以正常提供服務(wù)。
5、ZooKeeper以樹形結(jié)構(gòu)保存數(shù)據(jù)。這很類似于文件系統(tǒng),但“文件夾”(譯者注:這里指非最底層的節(jié)點)又和文件很像。znode是ZooKeeper保存的實體。Node(節(jié)點)的說法很容易被混淆,所以為了避免混淆這里使用了znode。因為我們稍后還會使用,所以這里我們讓客戶端保持連接狀態(tài)。開啟一個新窗口,并創(chuàng)建一個zookeeperdemophp文件。
dubbo和zookeeper面試題
1、Zookeeper一個分布式的服務(wù)框架,是樹型的目錄服務(wù)的數(shù)據(jù)存儲,能做到集群管理數(shù)據(jù) ,這里能很好的作為Dubbo服務(wù)的注冊中心,Dubbo能與Zookeeper做到集群部署,當(dāng)提供者出現(xiàn)斷電等異常停機時,Zookeeper注冊中心能自動刪除提供者信息,當(dāng)提供者重啟時,能自動恢復(fù)注冊數(shù)據(jù),以及訂閱請求。
2、在Dubbo registry上配置相應(yīng)的用戶、密碼,服務(wù)就注冊不到Zookeeper上了,會報KeeperErrorCode = NoAuth錯誤。總結(jié):通過源碼的分析發(fā)現(xiàn)使用ZkclientZookeeperClient進行連接zookeeper和注冊服務(wù)是不會設(shè)置安全配置。將dubbo.registry.client由zkclient改為curator即可。
3、其實一個zookeeper集群能被多個應(yīng)用公用,因為不同的框架會在zookeeper上建不同的節(jié)點,互不影響。如dubbo會創(chuàng)建一個/dubbo節(jié)點,storm會創(chuàng)建一個/storm節(jié)點。
4、發(fā)布服務(wù)到遠程zk,dubbo是調(diào)用ServiceConfig.doExportUrlsFor1Protocol方法,在doExportUrlsFor1Protocol方法中,通過以下兩步獲取到host和port兩個值。服務(wù)注冊到zk上所用的ip,正是這個host,這個findConfigedHosts方法,入?yún)⒕桶╬rotocolConfig。
5、看了下相關(guān)源碼,如果是在Zookeeper上通過digest方式設(shè)置ACL,然后在dubbo上配置用戶、密碼,服務(wù)就注冊不到Zookeeper上了,會報KeeperErrorCode = NoAuth。看了下調(diào)用相關(guān)代碼,發(fā)現(xiàn)注冊服務(wù)時所傳的ACL如下圖,而配置在dubbo上的,沒有發(fā)現(xiàn)被使用的地方(如果注冊中心是Zookeeper的話)。
如何解決java接口訪問ZooKeeper時的connectionloss錯誤
1、我們在新建ZK連接后要等一段時間,保證連接成功后再訪問ZK。 網(wǎng)上比較贊同的解決方案:主要利用兩個Java類:(1)java.util.concurrent.CountDownLatch:一個同步輔助類,類似倒數(shù)計數(shù),直到計數(shù)器為0時才能對資源“解鎖”。未解鎖前等待該資源的進程只能被阻塞。
2、原因:是因為ZooKeeper建立連接時采用異步操作,連接操作后并不能保證ZK連接已成功。如果在ZK連接成功前的這個小時間窗口去訪問ZK,就會碰到如上錯誤。 解決思路 我們在新建ZK連接后要等一段時間,保證連接成功后再訪問ZK。
本文鏈接:http://www.resource-tj.com/qianduan/207087.html
上一篇:寬帶頻段如何設(shè)置好
下一篇:使用命令打開我的電腦