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