[TOC]
# HBASE簡介及安裝
## 1 hbase數據庫介紹
### 1、簡介
> hbase是bigtable的開源java版本。是建立在hdfs之上,提供高可靠性、高性能、列存儲、可伸縮、實時讀寫nosql的數據庫系統。
> 它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索數據,僅支持單行事務(可通過hive支持來實現多表join等復雜操作)。
> 主要用來存儲結構化和半結構化的松散數據。
> Hbase查詢數據功能很簡單,不支持join等復雜操作,不支持復雜的事務(行級的事務)
> Hbase中支持的數據類型:byte[]
> 與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。
> HBase中的表一般有這樣的特點:
1. 大:一個表可以有上十億行,上百萬列
2. 面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索。
3. 稀疏:對于為空(null)的列,并不占用存儲空間,因此,表可以設計的非常稀疏。
### 2、表結構邏輯視圖
> HBase以表的形式存儲數據。表有行和列組成。列劃分為若干個列族(column family)

### 3、Row Key
> 與nosql數據庫們一樣,row key是用來檢索記錄的主鍵。訪問hbase table中的行,只有三種方式:
1. 通過單個row key訪問
2. 通過row key的range
3. 全表掃描
> Row key行鍵 (Row key)可以是任意字符串(最大長度是 64KB,實際應用中長度一般為 10-100bytes),在hbase內部,row key保存為字節數組。
> Hbase會對表中的數據按照rowkey排序(字典順序)
> 存儲時,數據按照Row key的字典序(byte order)排序存儲。設計key時,要充分排序存儲這個特性,將經常一起讀取的行存儲放到一起。(位置相關性)
> 注意:
~~~
字典序對int排序的結果是
1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行鍵必須用0作左填充。
~~~
> 行的一次讀寫是原子操作 (不論一次讀寫多少列)。這個設計決策能夠使用戶很容易的理解程序在對同一個行進行并發更新操作時的行為。
### 4、列族
> hbase表中的每個列,都歸屬與某個列族。列族是表的schema的一部分(而列不是),必須在使用表之前定義。
> 列名都以列族作為前綴。
> 例如
~~~
courses:history ,
courses:math 都屬于 courses 這個列族。
~~~
> 訪問控制、磁盤和內存的使用統計都是在列族層面進行的。
> 列族越多,在取一行數據時所要參與IO、搜尋的文件就越多,所以,如果沒有必要,不要設置太多的列族
### 5、時間戳
> HBase中通過row和columns確定的為一個存貯單元稱為cell。每個 cell都保存著同一份數據的多個版本。版本通過時間戳來索引。時間戳的類型是 64位整型。時間戳可以由hbase(在數據寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程序要避免數據版本沖突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的數據按照時間倒序排序,即最新的數據排在最前面。
> 為了避免數據存在過多版本造成的的管理 (包括存貯和索引)負擔,hbase提供了兩種數據版本回收方式:
1. 保存數據的最后n個版本
2. 保存最近一段時間內的版本(設置數據的生命周期TTL)。
> 用戶可以針對每個列族進行設置。
### 6、Cell
> 由{row key, column( =<family> + <label>), version} 唯一確定的單元。
> cell中的數據是沒有類型的,全部是字節碼形式存貯。
## 2 hbase集群結構

REGION:是HBASE中對表進行切割的單元
* HMASTER:HBASE的主節點,負責整個集群的狀態感知,負載分配、負責用戶表的元數據管理(可以配置多個用來實現HA)
* REGION-SERVER:HBASE中真正負責管理region的服務器,也就是負責為客戶端進行表數據讀寫的服務器
* ZOOKEEPER:整個HBASE中的主從節點協調,主節點之間的選舉,集群節點之間的上下線感知……都是通過zookeeper來實現
## 3 hbase集群搭建
> ----先部署一個zookeeper集群
### 1 上傳hbase安裝包
### 2 解壓
### 3 配置hbase集群,要修改3個文件
> 注意:要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
1) 修改hbase-env.sh
~~~
export JAVA_HOME=/usr/java/jdk1.7.0_55
//告訴hbase使用外部的zk
export HBASE_MANAGES_ZK=false
~~~
2) 修改 hbase-site.xml
~~~
<configuration>
<!-- 指定hbase在HDFS上存儲的路徑 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://ns1/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多個用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>weekend05:2181,weekend06:2181,weekend07:2181</value>
</property>
</configuration>
~~~
3) 修改 regionservers
~~~
weekend03
weekend04
weekend05
weekend06
~~~
3) 修改 backup-masters來指定備用的主節點【不需要】
~~~
[root@mini1 conf]# vi backup-masters
mini2
~~~
4) 拷貝hbase到其他節點
~~~
scp -r /weekend/hbase-0.96.2-hadoop2/ weekend02:/weekend/
scp -r /weekend/hbase-0.96.2-hadoop2/ weekend03:/weekend/
scp -r /weekend/hbase-0.96.2-hadoop2/ weekend04:/weekend/
scp -r /weekend/hbase-0.96.2-hadoop2/ weekend05:/weekend/
scp -r /weekend/hbase-0.96.2-hadoop2/ weekend06:/weekend/
~~~
### 4 將配置好的HBase拷貝到每一個節點并同步時間。
### 5 啟動所有的hbase進程
~~~
首先啟動zk集群
./zkServer.sh start
啟動hdfs集群
start-dfs.sh
啟動hbase,在主節點上運行:
start-hbase.sh
~~~
### 6 通過瀏覽器訪問hbase管理頁面
~~~
192.168.1.201:60010 /16010
~~~
### 7 為保證集群的可靠性,要啟動多個HMaster
~~~
hbase-daemon.sh start master
~~~
- hadoop
- linux基礎
- Linux入門
- Linux進階
- shell
- Zookeeper
- Zookeeper簡介及部署
- Zookeeper使用及API
- Redis
- Redis簡介安裝部署
- Redis使用及API
- Java高級增強
- Java多線程增強
- Maven簡介及搭建
- Hive
- Hive簡介及安裝
- Hive操作
- HIve常用函數
- Hive數據類型
- Flume
- Flume簡介及安裝
- flume 攔截器(interceptor)
- azkaban
- azKaban簡介及安裝
- Sqoop
- Sqoop簡介及安裝
- HDFS
- HDFS原理
- HDFS操作API
- MAPREDUCE原理
- MAPREDUCE圖片資源
- MAPREDUCE加強
- HBASE
- HBASE簡介及安裝
- HBASE操作及API
- HBASE內部原理
- Storm
- Storm簡介及安裝
- Storm原理
- kafka
- kafka簡介及安裝
- kafka常用操作及API
- kafka原理
- kafka配置詳解
- Scala
- Scala簡介及安裝
- Scala基礎語法
- Scala實戰