天天看點

NoSQL綜述及Apache HBase基礎

NoSQL綜述

什麼是NoSQL:

NoSQL:not only SQL,非關系型資料庫

NoSQL是一個通用術語

指不遵循傳統RDBMS模型的資料庫

資料是非關系的,且不使用SQL作為主要查詢語言

解決資料庫的可伸縮性和可用性問題

不針對原子性或一緻性問題

為什麼我們要使用NoSQL:

網際網路的發展,傳統關系型資料庫存在瓶頸

高并發讀寫

高存儲量

高可用性

高擴充性

低成本

NoSQL和關系型資料庫對比

NoSQL綜述及Apache HBase基礎

NoSQL的特點

最終一緻性

應用程式增加了維護一緻性和處理事務等職責

備援資料存儲

NoSQL != 大資料

NoSQL産品是為了幫助解決大資料存儲問題

大資料不僅僅包含資料存儲的問題還有Hadoop、Kafka、Spark, etc

NoSQL基本概念

三大基石(CAP、BASE、 最終一緻性)

CAP:

資料庫最多支援3個中的2個

Consistency(一緻性),Availability(可用性),Partition Tolerance(分區容錯性)

NoSQL不保證“ACID”

提供“最終一緻性”

NoSQL綜述及Apache HBase基礎

BASE

Basically Availble(基本可用):保證核心可用

Soft-state(軟狀态):狀态可以有一段時間不同步

Eventual Consistency(最終一緻性):系統經過一定時間後,資料最終能夠達到一緻的狀态

核心思想是即使無法做到強一緻性,但應用可以選擇适合的方式達到最終一緻性

最終一緻性

最終結果保持一緻性,而不是時時一緻

如賬戶餘額,庫存量等資料需強一緻性

如catalog等資訊不需要強一緻性

Causal consistency(因果一緻性)

Read-your-writes consistency

Session consistency

Indexing(索引)

大多數NoSQL是按key進行索引

部分NoSQL允許二級索引

HBase使用HDFS,append-only

批處理寫入Logged

重新建立并排序檔案

Query(查詢)

沒有專門的查詢語言,通常使用腳本語言查詢

有些開始支援SQL查詢

有些可以使用MapReduce代碼查詢

*MapReduce

不是Hadoop的MapReduce,概念相關

可進行資料的處理查詢

Sharding(分片)

一種分區模式

可以複制分片

有利于災難恢複

Apache HBase 生态圈

HBase生态圈技術:

Lily – 基于HBase的CRM

OpenTSDB – HBase面向時間序列資料管理

Kylin – HBase上的OLAP

Phoenix – SQL操作HBase工具

Splice Machine – 基于HBase的OLTP

Apache Tephra – HBase事務支援

TiDB – 分布式SQL DB

Apache Omid - 優化事務管理

Yarn application timeline server v.2 遷移到HBase

Hive metadata存儲可以遷移到HBase

Ambari Metrics Server将使用HBase做資料存儲

HBase實體架構 - HMaster

HMaster的作用:

是HBase叢集的主節點,可以配置多個,用來實作HA

管理和配置設定Region

負責RegionServer的負載均衡

發現失效的RegionServer并重新配置設定其上的Region

HBase實體架構 - RegionServer

RegionServer負責管理維護Region:

一個RegionServer包含一個WAL、一個BlockCache (讀緩存)和多個Region

一個Region包含多個存儲區,每個存儲區對應一個列族

一個存儲區由多個StoreFile和MemStore組成

一個StoreFile對應于一個HFile和一個列族

HFile和WAL作為序列檔案儲存在HDFS上

Client與RegionServer互動

HBase實體架構 - Region和Table

單個Table(表)被分區成大小大緻相同的Region

Region是HBase叢集分布資料的最小機關

Region被配置設定給叢集中的RegionServer

一個Region隻能配置設定給一個RegionServer

HBase邏輯架構 - Row

Rowkey(行鍵)是唯一的并已排序

Schema可以定義何時插入記錄

每個Row都可以定義自己的列,即使其他Row不使用

相關列定義為列族

使用唯一時間戳維護多個Row版本

在不同版本中值類型可以不同

HBase資料全部以位元組存儲

HBase架構特點

強一緻性

自動擴充

當Region變大會自動分割

使用HDFS擴充資料并管理空間

寫恢複

使用WAL(Write Ahead Log)

與Hadoop內建

HBase shell常用指令

使用者權限:

user_permission [‘表名’…]

grant ‘使用者名’, ‘RWXCA’

表:

增:create ‘表名’,{NAME=>‘列簇名’},{NAME=>‘列簇名’}…

删:disable ‘表名’ + drop '表名’

改:snapshot ‘表名’,‘鏡像名’

clone_snapshot ‘鏡像名’,‘新表名’

delete_snapshot ‘鏡像名’

查:list

行:put的時候:put ‘表名’,‘行鍵’,‘列簇名:列名’,‘值’[,‘時間戳’]

可以單獨删除行,行內資料全部删除

列簇:

增:alter ‘表名’,NAME=>‘列簇名’

删:alter ‘表名’,NAME=>‘列簇名’,METHOD=>‘delete’

改:先加後删

查:get ‘表名’,‘行鍵(row)’,‘列簇名’

列:cell 值+時間戳