1. 程式人生 > >Hadoop學習筆記—14.ZooKeeper環境搭建

Hadoop學習筆記—14.ZooKeeper環境搭建

從字面上來看,ZooKeeper表示動物園管理員,這是一個十分奇妙的名字,我們又想起了Hadoop生態系統中,許多專案的Logo都採用了動物,比如Hadoop採用了大象的形象,所以我們可以猜測ZooKeeper就是對這些動物進行一些管理工作的。

一、ZooKeeper基礎介紹

1.1 動物園也要保障安全

  zookeeper是hadoop下面的一個子專案,用來協調跟hadoop相關的一些分散式的框架,如hadoop, hive, pig等, 其實他們都是動物,所以叫zookeeper ——“動物園管理員”。動物園裡當然有好多的動物,遊客可以根據動物園提供的嚮導圖到不同的場館觀賞各種型別的動物,而不是像走在原始叢林裡,心驚膽顫的被動物所觀賞。為了讓各種不同的動物呆在它們應該呆的地方,而不是相互串門,或是相互廝殺,就需要動物園管理員按照動物的各種習性加以分類和管理,這樣我們才能更加放心安全的觀賞動物。

1.2 程序內的協調方法

  在實際應用中,Zookeeper主要是針對大型分散式系統進行高可靠的協調。由這個定義我們知道zookeeper是個協調系統,作用的物件是分散式系統。說到協調,我們可以聯想到的現實生活中很多十字路口的交通協管,他們手握著小紅旗,指揮車輛和行人是不是可以通行。如果我們把車輛和行人比喻成執行在計算機中的單元(執行緒),那麼這個協管是幹什麼的?很多人都會想到,這不就是鎖麼?對,在一個併發的環境裡,我們為了避免多個執行單元對共享資料同時進行修改,造成資料損壞的情況出現,我們就必須依賴像鎖這樣的協調機制,讓有的執行緒可以先操作這些資源,然後其他執行緒等待。對於程序內的鎖來講,我們使用的各種語言平臺都已經給我們準備很多種選擇。例如在C#中,最常用的莫過於藉助語法糖lock構造同步塊:

  int Withdraw(int amount)
    {
        if (balance < 0)
        {
            throw new Exception("Negative Balance");
        }

        lock(thisLock)
        {
            if (balance >= amount)
            {
                Console.WriteLine("Balance before Withdrawal :  " + balance);
                Console.WriteLine(
"Amount to Withdraw : -" + amount); balance = balance - amount; Console.WriteLine("Balance after Withdrawal : " + balance); return amount; } else { return 0; } } }

1.3 分散式環境中的協調

  在程序內進行協調我們可以使用語言,平臺,作業系統等為我們提供的機制。那麼如果我們在一個分散式環境中呢?也就是我們的程式執行在不同的機器上,這些機器可能位於同一個機架,同一個機房又或不同的資料中心。在這樣的環境中,我們要實現協調該怎麼辦?那麼這就是分散式協調服務要乾的事情。

  於是,Google創造了Chubby,而ZooKeeper則是對於Chubby的一個開源實現。

        

Definition:ZooKeeper是一種為分散式應用所設計的高可用、高效能且一致的開源協調服務,它提供了一項基本服務:分散式鎖服務。由於ZooKeeper的開源特性,後來我們的開發者在分散式鎖的基礎上,摸索了出了其他的使用方法:配置維護、組服務、分散式訊息佇列分散式通知/協調等。

1.4 ZooKeeper的應用場景

  (1)統一命名服務

  有一組伺服器向客戶端提供某種服務(例如:使用LVS技術構建的Web網站叢集,就是由N臺伺服器組成的叢集,為使用者提供Web服務),我們希望客戶端每次請求服務端都可以找到服務端叢集中某一臺伺服器,這樣服務端就可以向客戶端提供客戶端所需的服務。對於這種場景,我們的程式中一定有一份這組伺服器的列表,每次客戶端請求時候,都是從這份列表裡讀取這份伺服器列表。那麼這分列表顯然不能儲存在一臺單節點的伺服器上,否則這個節點掛掉了,整個叢集都會發生故障,我們希望這份列表時高可用的。高可用的解決方案是:這份列表是分散式儲存的,它是由儲存這份列表的伺服器共同管理的,如果儲存列表裡的某臺伺服器壞掉了,其他伺服器馬上可以替代壞掉的伺服器,並且可以把壞掉的伺服器從列表裡刪除掉,讓故障伺服器退出整個叢集的執行,而這一切的操作又不會由故障的伺服器來操作,而是叢集里正常的伺服器來完成。這是一種主動的分散式資料結構,能夠在外部情況發生變化時候主動修改資料項狀態的資料機構。Zookeeper框架提供了這種服務。這種服務名字就是:統一命名服務,它和javaEE裡的JNDI服務很像。

  (2)分散式鎖服務

  當分散式系統操作資料,例如:讀取資料、分析資料、最後修改資料。在分散式系統裡這些操作可能會分散到叢集裡不同的節點上,那麼這時候就存在資料操作過程中一致性的問題,如果不一致,我們將會得到一個錯誤的運算結果,在單一程序的程式裡,一致性的問題很好解決,但是到了分散式系統就比較困難,因為分散式系統裡不同伺服器的運算都是在獨立的程序裡,運算的中間結果和過程還要通過網路進行傳遞,那麼想做到資料操作一致性要困難的多。Zookeeper提供了一個鎖服務解決了這樣的問題,能讓我們在做分散式資料運算時候,保證資料操作的一致性。

  (3)配置管理

  在分散式系統裡,我們會把一個服務應用分別部署到n臺伺服器上,這些伺服器的配置檔案是相同的(例如:我設計的分散式網站框架裡,服務端就有4臺伺服器,4臺伺服器上的程式都是一樣,配置檔案都是一樣),如果配置檔案的配置選項發生變化,那麼我們就得一個個去改這些配置檔案,如果我們需要改的伺服器比較少,這些操作還不是太麻煩,如果我們分散式的伺服器特別多,比如某些大型網際網路公司的hadoop叢集有數千臺伺服器,那麼更改配置選項就是一件麻煩而且危險的事情。這時候zookeeper就可以派上用場了,我們可以把zookeeper當成一個高可用的配置儲存器,把這樣的事情交給zookeeper進行管理,我們將叢集的配置檔案拷貝到zookeeper的檔案系統的某個節點上,然後用zookeeper監控所有分散式系統裡配置檔案的狀態,一旦發現有配置檔案發生了變化,每臺伺服器都會收到zookeeper的通知,讓每臺伺服器同步zookeeper裡的配置檔案,zookeeper服務也會保證同步操作原子性,確保每個伺服器的配置檔案都能被正確的更新。

  可以看出,zookeeper是一個典型的觀察者模式的應用。

  (4)叢集管理

  叢集管理是很困難的,在分散式系統里加入了zookeeper服務,能讓我們很容易的對叢集進行管理。叢集管理最麻煩的事情就是節點故障管理,zookeeper可以讓叢集選出一個健康的節點作為master,master節點會知道當前叢集的每臺伺服器的執行狀況,一旦某個節點發生故障,master會把這個情況通知給叢集其他伺服器,從而重新分配不同節點的計算任務。Zookeeper不僅可以發現故障,也會對有故障的伺服器進行甄別,看故障伺服器是什麼樣的故障,如果該故障可以修復,zookeeper可以自動修復或者告訴系統管理員錯誤的原因讓管理員迅速定位問題,修復節點的故障。大家也許還會有個疑問,master故障了,那怎麼辦了?zookeeper也考慮到了這點,zookeeper內部有一個“選舉領導者的演算法”,master可以動態選擇,當master故障時候,zookeeper能馬上選出新的master對叢集進行管理。

二、ZooKeeper叢集模式環境搭建

2.1 ZooKeeper叢集模式典型架構

  (1)典型架構圖如下所示:

  (2)本次試驗架構圖如下所示:

2.2 ZooKeeper叢集模式搭建步湊

注意:ZooKeeper伺服器叢集規模不小於3個節點,要求各伺服器之間系統時間要保持一致;

  (1)通過FTP工具上傳ZooKeeper安裝包,我這裡使用的是3.4.5版本:

  (2)解壓ZooKeeper安裝包,並將解壓後的資料夾名稱改為zookeeper:

  ①tar -zvxf zookeeper-3.4.5.tar.gz

  ②mv zookeeper-3.4.5 zookeeper

  (3)修改環境變數:vim /etc/profile

  增加一行:export ZOOKEEPER_HOME=/usr/local/zookeeper

  修改PATH:export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

  ③使配置生效:source /etc/profile

(4)進入zookeeper的conf目錄下,修改檔名:mv zoo_sample.cfg  zoo.cfg

(5)編輯zoo.cfg:vim zoo.cfg

  修改dataDir=/usr/local/zookeeper/data
  新增server.0=hadoop-master:2888:3888
      server.1=hadoop-slave1:2888:3888
      server.2=hadoop-slave2:2888:3888

  (6)建立data資料夾,並建立myid檔案:

  新建data資料夾:mkdir /usr/local/zookeeper/data

  新建myid檔案:vim myid,並設定第一臺server為0。

(7)複製zookeeper目錄至其餘兩臺伺服器中:

  ①scp /usr/local/zookeeper hadoop-slave1:/usr/local/

  scp /usr/local/zookeeper hadoop-slave2:/usr/local/

(8)複製環境變數配置檔案至其餘兩臺伺服器中:

  ①scp /etc/profile hadoop-slave1:/etc

  scp /etc/profile hadoop-slave2:/etc

  (9)在其餘兩臺伺服器中修改myid檔案:設定為1和2;

  (10)啟動ZooKeeper,分別在三個節點中執行命令:zkServer.sh start

  (11)檢驗ZooKeeper叢集節點角色狀態,分別在三個節點中執行命令:zkServer.sh status

Role:ZooKeeper中包含以下角色:

領導者(leader),負責進行投票的發起和決議,更新系統狀態; 學習者(learner),包括跟隨者(follower)和觀察者(observer),follower用於接受客戶端請求並想客戶端返回結果,在選主過程中參與投票;observer可以接受客戶端連線,將寫請求轉發給leader,但observer不參加投票過程,只同步leader的狀態,observer的目的是為了擴充套件系統,提高讀取速度;

三、ZooKeeper簡單測試

  搭建好叢集環境後,就可以進行簡單的讀寫一致性測試了,這裡我們通過進入zookeeper的bin目錄下的zkCli.sh來完成下面的操作:

  (1)在其中一個節點192.168.80.100上執行一個寫操作:create /MyTest test

  (2)在其他兩個節點上執行讀操作:get /MyTest

  TIP:可以在一個節點中通過zkCli.sh -server hadoop-slave1:2181來遠端登入

  (3)在其中一個節點192.168.80.101上執行一個修改操作:

  (4)在其他兩個節點上執行讀操作:

參考資料

作者:周旭龍

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。

相關推薦

Hadoop學習筆記14.ZooKeeper環境搭建

從字面上來看,ZooKeeper表示動物園管理員,這是一個十分奇妙的名字,我們又想起了Hadoop生態系統中,許多專案的Logo都採用了動物,比如Hadoop採用了大象的形象,所以我們可以猜測ZooKeeper就是對這些動物進行一些管理工作的。 一、ZooKeeper基礎介紹 1.1 動物園也要保障安全

ELK 學習筆記之 elasticsearch環境搭建

發現 匯總 tex 索引 零配置 1-1 nbsp 日誌分析 com ELK概述: ElasticSearch是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等 Logstash是一個

ODB學習筆記之基礎環境搭建

com x文件 應用 er關系 c++ sqli size err deb 一,簡介 ODB是應用於C++的一個開源、跨平臺、跨數據庫的對象關系映射(ORM)系統。 它可以讓你持久化C++對象到關系數據庫,而不必處理表、列或者SQL,無需手動編寫任何映射代碼。 ODB

Spring4學習筆記一:環境搭建與插件安裝

str nag j2e 容器 獲取 相關 market 至少 ips 一:環境搭建 1:開發環境:JDK安裝、Eclipse安裝 2:數據庫:Mysql、Sequel Pro(數據庫可視化操作工具) 3:web服務器:Tomcat下載,並且把tomcat配置到Eclip

學習筆記之——伺服器環境搭建

  本博文用於記錄一系列本人搭建環境過程中的參考教程 MobaXterm https://www.isharebest.com/mobaxterm.htm https://blog.csdn.net/juyin2015/article/details/79056687/

springSecurity的學習筆記--spring-Security環境搭建

   在閒暇時間進行了spirngSecurity的學習。 視訊是慕課網老師的 springSecurity打造企業級認證授權。   老師講的太好了,以我的水平唯有換個層次,才能更好的理解整個流程。 因為老師是站在架構師的角度,而我是學習者的角度。 

Struts2學習筆記系列之環境搭建

1.前言 一直在學習javaweb方面的知識,斷斷續續的學到了struts2,深感java框架的博大精深,自己的水平有限(菜雞),本著好記性不如爛筆頭的原則,打算把自己學到的東西寫一篇部落格,就當複習以及以後查詢的筆記資料了。 2.環境搭建 1.建立一個web工程

Kafka學習筆記:Kafka環境搭建

Kafka環境搭建 Kafka單機環境搭建 安裝必需 jdk,這裡使用的是jdk1.8 scala,需要獨立安裝scala,這裡使用的是scala 2.11.8 zookeeper,Kafka會自帶zk,但是最好使用獨立的 安裝步驟 1.將Kafka的tar包上傳

【HTML5學習筆記一】環境搭建和需要掌握的技能

初學HTML5,特此寫一些學習筆記,記錄自己的成長。 一、開發環境     1.安裝JDK(現在暫時還沒用到,估計以後會用到)。     2.配置環境變數          2.1.新建JAVA_H

CNTK與深度強化學習筆記之一: 環境搭建和基本概念

如需轉載,請指明出處。 前言 深度強化學習是人工智慧當前的熱點,CNTK也是微軟力推的深度學習框架,2.x版本比之前有了長足的進步。目前國內將這兩者融合起來的文章還不多。因此寫作了這個學習筆記,希望能對大家有所幫助。 硬體,開發環境以及CNTK安裝 CN

深度學習框架Caffe學習筆記(1)-Caffe環境搭建

Caffe是由伯克利視覺和學習中心開發的基於C++/CUDA/Python實現的卷積神經網路,提供了面向命令列、Matlab、Python的繫結介面。 Caffe環境搭建 系統:Ubuntu16.04 首先安裝Caffe依賴包: $ sudo

MyBatis-Plus學習筆記(1):環境搭建以及基本的CRUD操作

MyBatis-Plus是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,使用MyBatis-Plus時,不會影響原來Mybatis方式的使用。 SpringBoot+MyBatis-Plus環境搭建 SQL指令碼: CREATE TABLE `tb_user` ( `id`

十五、Hadoop學習筆記————Zookeeper環境搭建

per ip地址 整數 zookeep keep ado ima leader選舉 環境搭建 linux中/opt一般用來存放應用/var目錄一般用來存放日誌 sample為樣例文件,復制一份zoo.cfg文件 配置zoo文件,id為服務器id(整數),host為

Hadoop學習筆記(二)----環境搭建之CentOS 7 配置與安裝Hadoop

# Load additional iptables modules (nat helpers) #   Default: -none- # Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which # are load

Hadoop學習筆記-Hadoop HDFS環境搭建

資源下載 1、JDK下載: 下載連結 2、hadoop: 下載連結 3、下載完成後驗證一下下載,將計算的MD5值與官網的進行對比已驗證安裝包的準確性: md5sum ./hadoop-2.6.*.tar.gz | tr "a-z" "A-Z"

Hadoop學習筆記—22.Hadoop2.x環境搭建與配置

自從2015年花了2個多月時間把Hadoop1.x的學習教程學習了一遍,對Hadoop這個神奇的小象有了一個初步的瞭解,還對每次學習的內容進行了總結,也形成了我的一個博文系列《Hadoop學習筆記系列》。其實,早在2014年Hadoop2.x版本就已經開始流行了起來,並且已經成為了現在的主流。當然,還有一些非

Hadoop學習筆記(一)----環境搭建之VMware虛擬機器安裝及建立CentOS

一、vmware安裝 準備好軟體包: 點選安裝vmware 下一步 下一步 下一步 下一步 下一步 點選安裝 安裝完畢: 點選桌面上的

十四、Hadoop學習筆記————Zookeeper概述

一致性 es2017 zookeepe 筆記 狀態 進入 keep 應用 嚴格 順序一致性:嚴格按照順序在zookeeper上執行 原子性:所有事物請求的結果,在整個集群的應用情況一致 單一視圖:無論從哪個服務器進入集群,看到的東西都是一致的 可靠性:服務端成功響應

安卓學習筆記 -- (安裝環境) Android Studio安裝配置、環境搭建詳細步驟及基本使用 Android Studio和SDK官方開發工具下載 Android Studio教程從入門到精通 Android開發-之第一個程式:HelloWorld!

1、下載Android Studio安裝配置、環境搭建詳細步驟及基本使用    https://www.cnblogs.com/yanglh6-jyx/p/Android_AS_Configuration.html https://blog.csdn.net/k491022087/ar

HBase+Hadoop+Zookeeper環境搭建的錯誤排查

確認hbase下的hbase-site.xml中的hbase.rootdir的埠和hadoop下的core-site.xml中的fs.defaultFS共用一個埠,否則在進入hbase shell的時候輸入list會報Can't get master address from Z