Sunday, November 4, 2018

Introduction to HBase

What is HBase 

HBase is a column-oriented database management system (NoSQL) that runs on top of HDFS.

High consistency
Fast scan operation
相比较下,不是那么available... (e.g. Major Compaction)
适合海量数据存储(如果数据⽐较⼩,使⽤HBase, 性能会⼤⼤降低。)
不适合OLTA这种需要快速响应的逻辑事物。

Architecture Design Strategy 


HBase Structure 

Master-Slave模式,有3种⻆⾊。
  • Hmaster: A cluster has one active Hmaster
Hmaster 跑在NameNode上⾯,监测所有Region Server的状态,处理所有 metadata 的更改 (Create/delete/update table),分配region, 监测region server压⼒的状态,如果某个 region server压⼒⽐较⼤,会将其分割,分配到其他的region server上,从⽽实现 loading balancing。
Hmaster是⼀个轻量级的master, 因为不处理数据本身,只处理⼀些元数据。Hmaster在 ⼀个cluster中,只有⼀个active Hmaster, 但会有多个back up Hmaster, 这就有了 redundancy.
  • Region Server: Handles all I/O requests,⼀个cluster有多个Region Server. 
运⾏在Hadoop的Data Node上,存储实际的数据,得到很⾼的data locality, 处理所有的 I/O请求,⼀个Region Server可以处理1000个左右的region. 
Region
Table的⽔平分割的产物,default 1GB in size。⼀个region包含了⽔平分割的start key和end key, ⼀个 region最⼤可以有1GB的size, Hmaster会将⼀个Region分配给⼀个Region Server, ⼀个Region Server上也会有多个regions, 任何的读写数据都会直接由Region Server 来处理。
  • Zookeeper: 协调整个cluster. 
协调整个cluster, 选举Hmaster, 节点的注册。
Zookeeper存储了location of META(B-Tree), META holds每个 Region的位置信息。

Read/Write

Client⼀次读或者写的时候: ⾸先访问Zookeeper, 得到META的位置. Client请求META Table所在的Region Server, 得到读写那个Region真正的Region Server位置, 这个信息还会放到Client的cache中。 Client会去那个真正的Region上,去读或者写。以后的操作,Client不会去找 Zookeeper了,会使⽤⾃⼰的cache.

Region Server Components

WAL: Write ahead log, 位于HDFS,为了加快写操作,client只要把数据的操作写⼊WAL log后, 就算是写⼊成功。 可以用于 WAL recovery来恢复丢失的 Memstore
BlockCache: 读操作的Cache, 存储最新的读数据,现在⼀般是使⽤LRU算法。
Memstore: 写操作的Cache, 存储最新写⼊的数据。
HFile: Memstore满了后,将数据⼀次性写 ⼊HFile.(sequecial write)


Read :
⾸先在BlockCache中寻找。
之后再MemStore中寻找。
最后去HFile中寻找。

优化:减少HFile的数量
Minor Compaction, 将多个 HFile merge成稍⼤的HFile。
或者Major Compaction, 将多个HFile合并成⼀个⾮常⼤的 HFile, 需要⼤量的I/O, Region Server处于不可⽤的状态。

Data Model


An HBase column represents an attribute of an object

Row: ⼀⾏数据。
Column Family
Column

HBase allows for many attributes to be grouped together into what is known as column families, such that the elements of a column family are all stored together.
With HBase, you must predefine the table schema and specify the column families.

Versioning 

可以存多份不同版本的数据,适合回溯⼀些数据,HBase的读操作是针对最新版本的 value, 核⼼数据要存在最新的version中。

No comments:

Post a Comment

Most Recent Posts