Hadoop叢集之 ZooKeeper和Hbase環境搭建

享飛的魚發表於2018-05-28

1.ZooKeeper和Hbase的簡答介紹:

  1. ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。
  2. HBase是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲存一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop專案的子專案。HBase不同於一般的關聯式資料庫,它是一個適合於非結構化資料儲存的資料庫。
  3. 兩者聯絡:Hbase的執行依賴ZooKeeper。Hbase自身帶有一個預設的ZooKeeper,本文講解的是自己搭建ZooKeeper環境。

2.ZooKeeper環境搭建:

2.1軟體下載:

我使用的是zookeeper-3.4.5.tar.gz。下載改檔案後,將檔案解壓到/usr/local目錄下:

sudo mv zookeeper-3.4.5.tar.gz /usr/local
tar -xvzf  zookeeper-3.4.5.tar.gz12複製程式碼

2.2配置

進入zookeeper-3.4.5/conf/目錄:,拷貝zoo_sample.cfg生成一個新檔案zoo.cfg(zk預設讀取的檔案)。然後修改zoo.cfg中dataDir目錄地址,增加訪問地址和埠

cd zookeeper-3.4.6/conf/
cp zoo_sample.cfg zoo.cfg  
vim zoo.cfg 
###修改如下
dataDir=/usr/local/zookeeper-3.4.6/data    ----修改此目錄,可以任意
##新增如下內容
server.1=192.168.1.127:2887:3887  
server.2=192.168.1.1128:2888:3888 
server.3=192.168.1.129:2889:3889123456789複製程式碼

進入zookeeper-3.4.5目錄,建立剛才配置中增加的data目錄, 然後進入data目錄,建立myid檔案,輸入伺服器編號,比如在192.168.1.127上,myid檔案就儲存數字1,192.168.1.128上就儲存數字2,192.168.1.129上就儲存數字3.

mkdir data
cd data  
vim myid
11234複製程式碼

2.3拷貝資料到其他伺服器

1.複製zookeeper-3.4.5目錄到其他從伺服器

scp -r zookeeper-3.4.5 hadoop@192.168.1.128:~ 
scp -r zookeeper-3.4.5 hadoop@192.168.1.129:~ 
##注意在從伺服器將zookeeper-3.4.5移動到/usr/local  不要這部也是沒事的,只是為了保證叢集環境一致
mv zookeeper-3.4.5 /usr/local1234複製程式碼

2.複製完成,登入到其他伺服器,修改zookeeper-3.4.5/data/myid 檔案的內容,slave1伺服器就改成2,slave2伺服器就改成3

2.4啟動驗證:

在從master,slave1,slave2依次執行zkServer.sh start 來啟動 zookeeper,所有伺服器啟動完成後,就可以通過zkServer.sh status來檢視伺服器狀態。沒有報錯說明都正常了。輸入jps可以看到伺服器中多了一個QuorumPeerMain服務。

cd /zookeeper-3.4.6
sh bin/zkServer.sh start 
jps
輸出:
 QuorumPeerMain 
###狀態查詢
sh bin/zkServer.sh status  
leader---表示master
Mode: follower 表示是跟從123456789複製程式碼

到這裡zk環境搭建完畢

3.Hbase環境搭建

HBase叢集需要依賴於一個Zookeeper ensemble。HBase叢集中的所有節點以及要訪問HBase的客戶端都需要能夠訪問到該Zookeeper ensemble。HBase自帶了Zookeeper,但為了方便其他應用程式使用Zookeeper,最好使用單獨安裝的Zookeeper ensemble。

此外,Zookeeper ensemble一般配置為奇數個節點,並且Hadoop叢集、Zookeeper ensemble、

HBase叢集是三個互相獨立的叢集,並不需要部署在相同的物理節點上,他們之間是通過網

絡通訊的。

3.1軟體下載

我下載的是hbase-0.94.16.tar.gz,hbase的版本需要與hadoop對應,檢視是否對應只需要看hbase-0.94.1/lib/hadoop-core後面的版本號是否與hadoop的版本對應,如果不對應,可以將hadoop下hadoop-core檔案複製過來,但是不能保證不會有問題
解壓到/usr/local下

3.2配置

1.配置hbase-env.sh

該檔案在{HBASE_HOME}/conf目錄下。

vim conf/hbase-env.sh
export JAVA_HOME=/usr/java/jdk

export HBASE_CLASSPATH=/usr/local/hadoop/conf

export HBASE_MANAGES_ZK=false
1234567複製程式碼

其中,HBASE_CLASSPATH指向存放有Hadoop配置檔案的目錄,這樣HBase可以找到HDFS的配置資訊,由於本文Hadoop和HBase部署在相同的物理節點,所以就指向了Hadoop安

裝路徑下的conf目錄。HBASE_MANAGES_ZK=false指示HBase使用已有的Zookeeper而不是自帶的。

2.配置hbase-site.xml

<configuration>

 <property>
   <name>hbase.rootdir</name>
   <value>hdfs://192.168.1.127:9000/hbase</value>
   <description>The directory shared by region servers.</description>
 </property>

 <property>
   <name>hbase.hregion.max.filesize</name>
   <value>1073741824</value>
   <description>
   Maximum HStoreFile size. If any one of a column families' HStoreFiles has
   grown to exceed this value, the hosting HRegion is split in two.
   Default: 256M.
   </description>
 </property>

 <property>
   <name>hbase.hregion.memstore.flush.size</name>
   <value>1073741824</value>
   <description>
   Memstore will be flushed to disk if size of the memstore
   exceeds this number of bytes.  Value is checked by a thread that runs
   every hbase.server.thread.wakefrequency.
   </description>
 </property>

 <property>
   <name>hbase.cluster.distributed</name>
   <value>true</value>
   <description>The mode the cluster will be in. Possible values are
     false: standalone and pseudo-distributed setups with managed Zookeeper
     true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
   </description>
 </property>

 <property>
     <name>hbase.zookeeper.property.clientPort</name>
     <value>2181</value>
     <description>Property from ZooKeeper's config zoo.cfg.
     The port at which the clients will connect.
     </description>
 </property>

 <property>
   <name>zookeeper.session.timeout</name>
   <value>120000</value>
 </property>

 <property>
   <name>hbase.zookeeper.property.tickTime</name>
   <value>6000</value>
 </property>
   <property>
     <name>hbase.zookeeper.quorum</name>
     <value>master,slave1,slave2</value>
     <description>Comma separated list of servers in the ZooKeeper Quorum.
     For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
     By default this is set to localhost for local and pseudo-distributed modes of operation. For a fully-distributed setup, this should be set to a full list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh this is the list of servers which we will start/stop ZooKeeper on.
     </description>
</property>

<property>
       <name>hbase.tmp.dir</name>
       <value>/usr/local/hbase/tmp</value>
</property>

</configuration>123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869複製程式碼

引數介紹:

1,hbase.rootdir:hbase所使用的檔案系統為HDFS,根目錄為hdfs://192.168.1.127:9000/hbase,該目錄應該由HBase自動建立,只需要指定到正確的HDFS NameNode上即可。

2,hbase.hregion.max.filesize:設定HStoreFile的大小,當 大於這個數時,就會split 成兩個檔案

3,hbase.hregion.memstore.flush.size:設定memstore的大小,當大於這個值時,寫入磁碟

4,hbase.cluster.distributed:指定hbase為分散式模式

5,hbase.zookeeper.property.clientPort:指定zk的連線埠

6,zookeeper.session.timeout:RegionServer與Zookeeper間的連線超時時間。當超時時間到後,ReigonServer會被Zookeeper從RS叢集清單中移除,HMaster收到移除通知後,會對這臺server負責的regions重新balance,讓其他存活的RegionServer接管.

7,hbase.zookeeper.property.tickTime:

8,hbase.zookeeper.quorum:預設值是 localhost,列出zookeepr的master,slave1,slave2

9,hbase.tmp.dir:指定HBase將後設資料存放路徑
123456789101112131415161718複製程式碼

3.配置regionservers 相當於hadoop的slave

vim conf/regionservers 
192.168.1.127
192.168.1.128123複製程式碼

3.3拷貝資料到其他伺服器

1.複製hbase目錄到其他從伺服器

scp -r hbase hadoop@192.168.1.128:~ 
scp -r hbase hadoop@192.168.1.129:~ 
##注意在從伺服器將hbase移動到/usr/local  不要這部也是沒事的,只是為了保證叢集環境一致
mv hbase /usr/local1234複製程式碼

3.4啟動驗證:

注意需要先啟動Hadoop

##啟動Hadoop
start-all.sh
##啟動Hbase
cd hbase
bin/start-hbase.sh
jps
輸出:HRegionServer 1234567複製程式碼

通過瀏覽器檢視:在瀏覽器中輸入 : http://192.168.1.127:60010/

##停止

bin/stop-hbase.sh
1234複製程式碼

3.5hbase簡答測試:

bin/hbase shell

HBase Shell; enter 'help<RETURN>' for list of supported commands.

Type "exit<RETURN>" to leave the HBase Shell

Version 0.94.12, r1524863, Fri Sep 20 04:44:41 UTC 2013

hbase(main):001:0>

##建立一個名為 small的表,這個表只有一個 column family 為 cf。可以列出所有的表來檢查建立情況,然後插入些值。

hbase(main):003:0> create 'small', 'cf'
0 row(s) in 1.2200 seconds
hbase(main):003:0> list
small
1 row(s) in 0.0550 seconds
hbase(main):004:0> put 'small', 'row1', 'cf:a', 'value1'
0 row(s) in 0.0560 seconds
hbase(main):005:0> put 'small', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0370 seconds
hbase(main):006:0> put 'small', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0450 seconds

##檢查插入情況.Scan這個表

hbase(main):005:0> scan 'small'

Get一行,操作如下

hbase(main):008:0> get 'small', 'row1'

disable 再 drop 這張表,可以清除你剛剛的操作

hbase(main):012:0> disable 'small'
0 row(s) in 1.0930 seconds
hbase(main):013:0> drop 'small'
0 row(s) in 0.0770 seconds

##匯出與匯入

bin/hbase org.apache.hadoop.hbase.mapreduce.Driver export small small

匯出的表,在hadoop檔案系統的當前使用者目錄下,small資料夾中。例如,匯出後在hadoop檔案系統中的目錄結構:

bin/hadoop dfs -ls

Found 1 items

drwxr-xr-x   - hadoop supergroup         /small複製程式碼


相關文章