一、簡介
HBase是一種構建在HDFS之上的分布式、面向列的存儲系統。在需要實時讀寫、隨機訪問超大規模數據集時,可以使用HBase。
盡管已經有許多數據存儲和訪問的策略和實現方法,但事實上大多數解決方案,特別是一些關系類型的,在構建時並沒有考慮超大規模和分布式的特點。許多商家通過復制和分區的方法來擴充數據庫使其突破單個節點的界限,但這些功能通常都是事后增加的,安裝和維護都和復雜。同時,也會影響RDBMS的特定功能,例如聯接、復雜的查詢、觸發器、視圖和外鍵約束這些操作在大型的RDBMS上的代價相當高,甚至根本無法實現。
hbase的特點是:
大:一個表可以有上億行,上百萬列。
面向列:面向列表(簇)的存儲和權限控制,列(簇)獨立檢索。
稀疏:對於為空(NULL)的列,並不占用存儲空間,因此,表可以設計的非常稀疏。
無模式:每一行都有一個可以排序的主鍵和任意多的列,列可以根據需要動態增加,同一張表中不同的行可以有截然不同的列。
數據多版本:每個單元中的數據可以有多個版本,默認情況下,版本號自動分配,版本號就是單元格插入時的時間戳。
數據類型單一:HBase中的數據都是字符串,沒有類型。
二、安裝
1.先啟動hadoop和zookeeper
2.下載hbase安裝包
http://archive.cloudera.com/cdh5/cdh/5/
選擇hbase1.2.0-cdh5.11.1即可
3.解壓,修改hbase-env.sh
指定java的安裝路徑
export JAVA_HOME=/home/hadoop/app/jdk
由於hbase自帶了ZK的jar包,如果用戶需要使用自定義的zk,需要改為false(一般都用自己的zookeeper集群)
export HBASE_MANAGES_ZK=false
4.修改hbase-site.xml文件
——》指定臨時目錄的存放位置,和hadoop.tmp.dir相似
<property >
<name>hbase.tmp.dir</name>
<value>/home/hadoop/app/hbase/data/tmp</value>
</property>
——》指定hbase數據文件存儲在hdfs上的路徑,就是RegionServer的共享目錄
<property >
<name>hbase.rootdir</name>
<value>hdfs://hadoop001:8020/hbase</value>
</property>
——》指定是否是分布式的,false就是單機,true就是分布式集群
<property >
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
——》指定zookeeper的地址實例
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop001,hadoop002,hadoop003</value>
</property>
——》修改regionservers文件,指定從節點機器
hadoop002,hadoop003
5.啟動
(注意不要再standby的namenode上啟動)
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver
或者直接
bin/start-hbase.sh
6.可能遇到的問題
hbase啟動錯誤org.apache.hadoop.hbase.TableExistsException: hbase:namespace
到zookeeper下,刪除hbase節點,重啟hbase即可