本章重點 :node
瞭解 HBase 概念、發展歷史shell
瞭解 HBase 基本特性數據庫
瞭解 HBase 在 Hadoop Ecosystem編程
HBase 是 Hadoop Database 高性能、面向列、可伸縮的分佈式存儲系統設計模式
HBase 是 一種 NoSql (Not only SQL) 存儲系統, 專門用來快速隨機讀寫大規模數據緩存
HBase 彌補了 Hadoop 只能離線批處理的不足,同時可以存儲小文件服務器
HBase 提供海量數據的隨機檢索, 並保證必定的性能數據結構
2008.01 HBase 列爲 Hadoop 的頂級項目架構
2008.10 HBase 0.89.20100621併發
......
HBase 0.98
HBase 1.0.0 里程碑
HBase 做爲典型的 NoSQL 數據庫, 能夠經過 行鍵 (Rowkey) 檢索數據, 僅支持單行事務, 主要用於存儲 非結構化 和 半結構化 的鬆散數據。
容量巨大
面向列
稀疏列
擴展性
高可靠性
高性能
面向列
列式數據庫優勢:
數據按列存儲, 即 每一列單獨存放
數據即索引
只訪問查詢涉及的列, 能夠大量下降系統 IO
每一列由線索來處理, 即查詢的併發處理性能高
數據類型一致, 數據特性類似, 能夠高效壓縮
列式數據庫缺點:
不適合掃描小量數據
不適合隨機的更新
批量更新狀況各異,有的優化的比較好的列式數據庫(好比Vertica)表現比較好,有些沒有針對更新的數據庫表現比較差。
不適合作含有刪除和更新的實時操做。
稀疏列
行式存儲, 大量未 NULL 的列,佔用存儲空間
HBase 列式存儲, 爲 空 的列並不佔用存儲空間, 所以表能夠設計的很是稀疏
擴展性
HBase 底層依賴 HDFS, 基因上擴展性就好.
HBase 的 Region 和 RegionServer 的概念對應到數據分區, 分區後數據能夠位於不一樣的機器, 因此 HBase 的核心架構也具有擴展性.
HBase 的擴展性是熱擴展, 能夠隨時添加或者減小節點
高可靠性
HBase 提供 WAL 和 Replication 機制.
協調服務 ZooKeeper 組件通過工業驗證的。
高性能
底層的 LSM 數據結構和 Rowkey 有序排列等架構, 具有寫高性能
Region 切分、主鍵索引 和 緩存機制使得 HBase 具備隨機讀高性能
Hadoop 框架兩大核心組件
HDFS
MapReduce
HBase 四大核心模塊
客戶端 Client
協調服務模塊 ZooKeeper
主節點 HMaster
Region節點 RegionServer
HBase架構圖
1). Client
整個 HBase 系統的入口, 使用 RPC 機制與 HMaster 和 RegionServer 通訊
管理類操做 : Client 與 HMaster 進行 RPC 通訊
數據讀寫操做 : Client 與 RegionServer 進行 RPC 交互
2). ZooKeeper
ZooKeeper Quorum(隊列) 負責管理 HBase 中 多 HMaster 的選舉, 保證HBase集羣中只有一個正常運行提供服務的 HMaster 節點。
還有 存儲HBase元數據信息、實時監控RegionServer、Region尋址入口等
3). 主節點 HMaster
HMaster 主要負責 Table 和 Region 的管理工做
管理用戶對 Table 的增、刪、改、查 操做。
管理 RegionServer 的負載均衡, 調整 Region 分佈。
在 Region 分裂後, 負責新 Region 的分配。
在 RegionServer 死機後, 負責失效 RegionServer 上的 Region 遷移
4). HRegionServer
HRegionServer 主要負責響應用戶 I/O 請求, 向 HDFS 文件系統中讀寫數據, 是 HBase 最核心的模塊。
HRegionServer 的組成結構
HBase社區信
應該怎樣設計模式來存儲複雜的數據以保證讀寫性能的均衡?
應該怎樣規劃數據的訪問方式來保證最大限度地發揮 HBase 集羣的威力?
Hive
Hive 是一種類 SQL 的引擎,而且運行 MapReduce 任務.
Hive 能夠用來進行統計查詢
HBase
HBase 能夠用來進行實時查詢
HBase 是一種在 Hadoop之上的 NoSQL 的 Key/vale 數據庫。
數據也能夠從Hive寫到HBase,設置再從HBase寫回Hive
本章重點 :
瞭解 HBase 架構組件
HBase 利用 MapReduce 來處理 HBase 中的海量數據
HBase 利用 HDFS 做爲文件存儲系統
HBase 利用 ZooKeeper 做爲協同服務 (爲HBase提供 服務和失敗恢復機制)
HBase 功能
HBase 主要用來存儲非結構化和半結構化的 鬆散數據
HBase 僅能經過 row key 和 row key 值 range 來檢索數據,僅支持單行事務(可經過 Hive 支持來實現多表鏈接等複雜操做)
HBase 依靠橫向擴展, 須要經過增長廉價服務器來 增長計算和存儲能力
HBase 的目的 是處理很是龐大的 table
Hadoop部件 | function |
---|---|
HDFS | 高可靠的底層存儲支持 |
MapReduce | 高性能的計算能力 |
Zookeeper | 穩定服務和failover機制 |
Pig&Hive | 高層語言支持,便於數據統計 |
Sqoop | 提供RDBMS數據導入,便於傳統數據庫向HBase遷移 |
方式 | 特色 | 場合 |
---|---|---|
Native Java API | 最常規和高效 | Hadoop MapReduce Job並行處理HBase表數據 |
HBase Shell | 最簡單接口 | HBase管理使用 |
Thrift Gateway | 利用Thrift序列化支持多種語言 | 異構系統在線訪問HBase表數據 |
Rest Gateway | 解除語言限制 | Rest風格Http API訪問 |
Pig | Pig Latin六十編程語言處理數據 | 數據統計 |
Hive | 簡單,SqlLike | 場合 |
HBase Table 的特色
大 (一個table能夠上億行)
面向列 (族) 的存儲和權限控制,列(族)獨立檢索;
稀疏 (對於未null的列,並不佔用空間)
數據類型單一 : HBase中的數據都是字符串,沒有類型。
HBase Table 介紹
Row Key: 行鍵,Table的主鍵,Table中的記錄按照Row Key排序
Timestamp: 時間戳,每次數據操做對應的時間戳,能夠看做是數據的version number
Column Family:列簇,Table在水平方向有一個或者多個Column Family組成,一個Column Family中能夠由任意多個Column組成,即Column Family支持動態擴展,無需預先定義Column的數量以及類型,全部Column均以二進制格式存儲,用戶須要自行進行類型轉換。
本章重點 :
瞭解 HBase集羣 的安裝、部署、啓動 和 中止
命令行方式對 HBase 進行 插入、查詢、刪除 數據等
注意
配置 HBase與Hadoop相似, 都是經過安裝包的 conf 目錄下的配置生效
修改一臺機器的配置文件後, 記得要同步到集羣中的全部節點
資源限制命令 : ulimit、 nproc (用戶打開的文件數、進程數等)
Hadoop 版本2.x, dfs.datanode.max.xcievers 同時處理文件個數參數設置
JDK、SSH、DNS、LoopbackIP、NTP、ulimit、zookeeper
單機模式
分佈式模式 (HDFS運行良好須要)
Edit conf/hbase-env.sh config
1. 文件告知 HBase Java 安裝路徑。 2. HBase 運行環境, Heap Size 有關 JVM 選項 3. 日誌文件保存目錄、進程優先級等
這是 HBase 默認的運行模式, 在單機模式中, HBase 使用本地文件系統, 而不是 HDFS, 全部的服務 和 ZooKeeper 都運行在一個 JVM 中。ZooKeeper 監聽一個端口, 這樣客戶端就能夠鏈接 HBase 了。
配置 JDK
HBase 安裝 (需修改 hbase-site.xml)
hbase.rootdir 表明 HBase 數據存放的位置 hbase.zookeeper.property.dataDir zk數據存放的位置
啓動 HBase
bin/start-hbase.sh bin/hbase shell
僞分佈式模式 (全部進程運行在一臺機器上)
編輯 conf/hbase-site.xml, 整個配置會覆蓋 HBase 的默認配置(hbase-default.xml)
配置 hbase.rootdir HBase在HDFS中使用的目錄位置。 <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
注意
須要將 localhost 設置成主機名, 其餘機器才能訪問它
啓動 HBase
bin/start-hbase.sh
HMaster...
RegionServer...
分佈式模式 整個服務分佈在各個節點上
http://node190:60010/
命令行工具鏈接到 HBase
[hdfs@node196 ~]$ hbase shell 16/03/02 14:03:16 INFO Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell Version 0.98.6-cdh5.3.6, rUnknown, Tue Jul 28 15:19:46 PDT 2015 hbase(main):001:0> hbase(main):018:0> list 'table' TABLE 0 row(s) in 0.0050 seconds => [] hbase(main):017:0> put 'test', 'row1', 'cf:a', 'value1' 0 row(s) in 0.0080 seconds hbase(main):017:0> put 'test', 'row2', 'cf:b', 'value2' 0 row(s) in 0.0080 seconds hbase(main):017:0> put 'test', 'row3', 'cf:c', 'value3' 0 row(s) in 0.0080 seconds hbase(main):019:0> get 'test', 'row1' COLUMN CELL cf:a timestamp=1456900507721, value=value1 1 row(s) in 0.0070 seconds hbase(main):021:0> scan 'test' ROW COLUMN+CELL row1 column=cf:a, timestamp=1456900507721, value=value1 row2 column=cf:b, timestamp=1456900829731, value=value2 row3 column=cf:c, timestamp=1456900535757, value=value3 3 row(s) in 0.0080 seconds
bin/stop-hbase.sh