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


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

1.Hbase簡介

  1.面向列的分布式數據庫

  2. 以HDFS作為文件系統

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

  4. ZookKeeper作為協調工具

  5. sqoop提供Hbase到關系型數據庫中數據導入功能

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

 

  三種模式:單機模式,偽分布式模式,分布式模式

      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時,控制台會打印關於停止的信息,會周期性的打印 ".",關閉腳本需要幾分鍾完成,如果集群中機器數量很多,那么執行時間會更長

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM