Hbase學習筆記(安裝和基礎知識及操做)

參考書籍: Hadoop in action, 吳超沉思錄html

1.Hbase簡介

  1.面向列的分佈式數據庫java

  2. 以HDFS做爲文件系統node

  3. 利用MapReduce處理Hbase中海量數據shell

  4. ZookKeeper做爲協調工具數據庫

  5. sqoop提供Hbase到關係型數據庫中數據導入功能服務器

  6. Hive和pig提供高層語言支持如HSQLapp

 

  三種模式:單機模式,僞分佈式模式,分佈式模式負載均衡

      Hbase在單機模式下並不使用HDFS,直接將安裝文件解壓就能夠運行(須要修改hbase-site.xml文件),默認狀況下Hbase數據是存儲在跟目錄的tmp文件夾下, 使用start-hbase.sh和stop-hbase啓動和關閉分佈式

      僞分佈式和分佈式模式下須要使用HDFS文件系統工具

  

  關於服務器:

  HBase和Hadoop中有兩種類型的機器:

  master: HDFS的NameNode,MapReduce的JobTracker,HBase的Master

  slave: HDFS的DataNode,MapReduce的TaskTracker,HBase的RegionServer

 

  關於region:

   HBase中擴展和負載均衡的基本單位稱爲region,region本質上是按行鍵排序的連續存儲的區間,若是region太大,系統就會把它們動態劃分;相反,就會把多個region合併,減小存儲空間的數量

    一張表初始的時候只有一個region,用戶開始向表中插入數據時,系統會檢查這個region的大小,確保其不超過配置的最大值。若是超過了限制,系統會再中間鍵處將這個region拆分爲兩個大體相等的子region

   每個region只能由一臺region服務器加載,每一臺region服務器能夠同時加載多個region

   region拆分和服務至關於其餘系統提供的自動分區,當一個服務器出現故障後,該服務器上的region能夠快速恢復,並得到細粒度的負載均衡。

 

2. 僞分佈式安裝

    分佈式模式的運行須要依賴分佈式文件系統,由於此時必須保證HDFS已運行

   準備: 安裝Hadoop 詳細見上一篇日誌:hadoop分佈式安裝

   hbase版本:hbase-0.94.7-security.tar.gz

   安裝目錄 /usr/local

   步驟:

    1.  安裝 tar -zxvf hbase-0.94.7-security.tar.gz 

    2. 重命名: mv hbase-0.94.7-security hbase

    3. 配置環境變量hbase_home  (vi /etc/profile)

    4. 修改配置文件

 

1. hbase_home/conf/hbase_env.sh

    修改java_home export 
    JAVA_HOME=/usr/local/jdk/

    修改zookeeper(最後一行)
    export HBASE_MANAGES_ZK=true(使用Hbase託管的ZooKeeper)


2. hbase_home/conf/hbase-site.xml文件
    
    configuration 中加入:

<property>  
  <name>hbase.rootdir</name>  
  <value>hdfs://hadoop0:9000/hbase</value>
</property>
<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>
<property>
  <name>hbase.zookeeper.quorum</name>
  <value>hadoop0</value>
</property>
<property>
  <name>dfs.replication</name>   //指定Hlog和Hfile副本數,此參數值並不能大於HDFS節點數,若是datanode只有一臺則此參數應該設置爲1
  <value>1</value>
</property>

 

    5. 啓動hbase

      先啓動hdfs文件系統start-dfs.sh 或者hadoop(start-all.sh)

      啓用hbase (start-hbase.sh)  關閉:stop-hbase.sh

      jps查看進程 (HMaster,HRegionServer, HQuorumPeer)

      http://hadoop0:60010能夠查看管理界面,以下:

   

    6. 進程說明:

     HMaster: 管理Hbase table的DDL操做

          給region分配工做

     HResionServer: 原則上每一個slave對應一個HRegionServer

     HQuorumPeer: ZooKeeper的守護進程,此處咱們使用的是Hbase內置的ZooKeeper(在hbase-env.sh中有配置)

      

3. 分佈式安裝

   準備條件: hadoop分佈式環境已安裝,查看hadoop分佈式安裝

         hadoop0主機上hbase僞分佈已安裝完成

   安裝:

   1. scp -rp /usr/local/hbase hadoop1:/usr/local

   2. 在hadoop0上更改hbase_home/conf/regionservers  將localhost更改成hadoop1

      regionservers文件中列出了全部運行HBase的機器,配置相似於Hadopp的slaves文件,Hbase啓動的時候,會將次文件中列出的機器啓動,一樣關閉時會將他們關閉

      更改後在hadoop0和hadoop1兩臺機器中,Hbase Master及HDFS NameNode是運行在hadoop0上, RegionServer運行在Hadoop1上

   3. 

在hbase-site.xml 中

<property>
    <name>hbase.cluster.distributed</name> <value>true</value>
</property>
此處值設置爲true即爲分佈式,如果false,則是僞分佈式

<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop0,hadoop1</value>
</property>

全分佈式模式的Hbase集羣須要運行ZooKeeper實例,默認狀況下HBase自身維護着一組默認的ZooKeeper實例,能夠本身配置實例,這樣Hbase會更加健壯

注意:使用默認的實例時,HBase將自動啓動或中止ZooKeeper,當使用獨立的ZooKeeper實例時,須要用戶手動啓動和中止ZooKeeper實例



 

   4. 啓動hbase, 同僞分佈式模式

      先啓動hdfs文件系統start-dfs.sh 或者hadoop(start-all.sh)

      啓用hbase (start-hbase.sh)  關閉:stop-hbase.sh

   5. jps查看,以下:

    hadoop0上進程:

     

   hadoop1上進程:

  

  同理可經過 hostname:60010訪問hbase管理界面,同分布式安裝部分

4. 數據模型

  1. Hbase數據庫採用了和Bigtable很是相似的數據類型,表格是稀疏的;

  1. row key 行鍵,table的主鍵

  2. timestamp 時間戳,數據操做時對應的時間戳,能夠當作數據的version number

  3. Column Family 列簇,每一個family能夠由任意多個column組成,列名是<族名>:<標籤>形式;一個表格的族名時固定的,除非使用管理員權限來改變表格的族名; 不過能夠在任什麼時候候添加新的標籤;

    eg:course對於表來講是一個有兩個列的列族(該列族由兩個列組成math和art);

 

rowkey

name

TimeStamp

course

math

art

wish

wish

t1

t2

t3

97

93

97

98

76

99

rain

rain

t4

100

90

 

     4.兩張特殊的表  -ROOT- 和 .META.

  做用以下:(即-ROOT-記錄.META.的region信息,.META.記錄用戶表的region信息)

  

 

  關係以下:

    

 

 

 

基本操做

  (注意操做後不要加分號)

  (常量不須要用引號引發來,在shell中輸入Object.constants命令能夠查看常量) 

  (表名和列名都須要加引號,不區分單雙引號) 

  Hbase shell,是Hbase的命令行工具,命令行中執行hbase shell便可進入hbase shell命令行 

  1) list  查看hbase中全部表

  2) 建立表: 

    create '表名','列簇1','列簇2'....

create 'student', 'name','grade','course'

  在管理界面中查看student

 

  3)describe 查看錶結構

    describe '表名'

 

   eg: describe 'student'

hbase(main):003:0> describe "student"
DESCRIPTION                                          ENABLED
 'student', {NAME => 'course', DATA_BLOCK_ENCODING = true
 > 'NONE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE
 => '0', VERSIONS => '3', COMPRESSION => 'NONE', MIN
 _VERSIONS => '0', TTL => '2147483647', KEEP_DELETED
 _CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY
 => 'false', ENCODE_ON_DISK => 'true', BLOCKCACHE =>
  'true'}, {NAME => 'grade', DATA_BLOCK_ENCODING =>
 'NONE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE =>
  '0', VERSIONS => '3', COMPRESSION => 'NONE', MIN_V
 ERSIONS => '0', TTL => '2147483647', KEEP_DELETED_C
 ELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY =>
  'false', ENCODE_ON_DISK => 'true', BLOCKCACHE => '
 true'}, {NAME => 'name', DATA_BLOCK_ENCODING => 'NO
 NE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0
 ', VERSIONS => '3', COMPRESSION => 'NONE', MIN_VERS
 IONS => '0', TTL => '2147483647', KEEP_DELETED_CELL
 S => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'f
 alse', ENCODE_ON_DISK => 'true', BLOCKCACHE => 'tru
 e'}

  

 

    4)插入數據和查看數據

   put '表名','行鍵名','列名','value','列名2','value2','family:列名1','value3'.......

put 'student','wish','name:','wish'

    查詢數據:

   get '表名','行名'

get 'student','wish'

 

 

  插入更多數據

hbase(main):004:0> put 'student','wish','course:English','100'


hbase(main):005:0> put 'student','wish','course:Chinese','60'


hbase(main):006:0> put 'student','rain','course:Chinese','100'


hbase(main):007:0> put 'student','rain','course:English','200'

 

  查看錶中數據: scan 'student'

 

  其餘get例子:

get 'student','wish','course'

get 'student','wish',['course']

get 'student','wish',['course','name']

 

 

  5)刪除數據 

delete 'student','wish','course:Math'

 

  6)刪除表

    需中止表的可用性,再刪除表   

disable 'student'drop 'student'

 

  7) 統計行數

  

count 'student'

 

   8)經常使用Hbase shell命令截圖

 

注意事項


 

 

1.關於Hadoop

  1.  目前的HBase只能依賴特定的Hadoop版本,HBae和Hadoop之間的RPC是版本話的,須要調用方與被調用方相互匹配,細微的差別可能致使通訊失敗

  2. 因爲Hadoop依賴於Hadoop,它要求Hadoop的JAR必須部署在HBase的lib目錄下。HBase使用的Hadoop版本必須與底層Hadoop集羣上使用的Hadoop版本一直,於是使用Hadoop集羣上運行的JAR替換HBase的lib目錄中依賴的Hadoop的JAR能夠

      避免版本不匹配的問題

  3. 集羣中全部的節點都要更新爲同樣的JAR,不然版本不匹配問題可能形成集羣沒法啓動或者假死現象

 

2.關於HBase Shell

  1.若是使用的分佈式模式,那麼在關閉Hadoop以前必定要確認HBase已經被正常關閉了

  2. 使用stop-hbase.sh關閉HBase時,控制檯會打印關於中止的信息,會週期性的打印 ".",關閉腳本須要幾分鐘完成,若是集羣中機器數量不少,那麼執行時間會更長

相關文章
相關標籤/搜索