HBase là gì?

Introduction
HBase là 1 hệ cơ sở dữ liệu mã nguồn mở được xây dựng dựa trên BigTable được mô tả trong nghiên cứu: “BigTable: A Distributed Storage Systemystem for Structure Data”. HBase cung cấp khả năng lưu trữ dữ liệu lớn lên tới hàng tỷ dòng, hàng triệu cột khác nhau cũng như hàng petabytes dung lượng. HBase là 1 NoSQL điển hình bởi vậy các tables của HBase không có 1 schemas cố định và không có các quan hệ giữa các bảng, không cung cấp phép join giữa các bảng. Hadoop có khả năng mở rộng tốt và được thiết kế để mở rộng theo chiều ngang (Scale horizontally).
Hiện nay HBase đang là 1 trong các top-level project của tổ chức Apache Software Foundation và được cung cấp dưới giấy phép: Apache Lisence 2.0.
Data model
HBase được xây dựng dựa trên thiết kế của Google BigTable cho nên nó cũng có nhiều điểm giống với BigTable. Dữ liệu được lưu trong 1 table của HBase được xác định bởi các khóa: “Table, Rowkey, Column Families, Column, Timestamp”.

Hoặc ta có thể miêu tả kiến trúc của HBase dưới dạng:

Mỗi table bao gồm rất nhiều row, có thể lên tới hàng tỷ rows trong 1 table của HBase, các row được xác định với nhau bởi 1 khóa duy nhất “rowkey”, rowkey trong HBase có chức năng tương tự với Primary key trong các hệ cơ sở dữ liệu thông thường .Các row trong cùng 1 talbe luôn được sắp xếp theo thứ tự tự điển theo rowkey. Hình sau cho thấy cách mà HBase sắp xếp dữ liệu khi ta thêm các row với các rowkey khác nhau:

Trong khi trong nghiên cứu gốc BigTable chỉ miêu tả về single index, tuy nhiên trong HBase còn hỗ trợ Secondary IndexIndexes.
Mỗi row lại bao gồm nhiều columns khác nhau, các column này lại được gộp thành “column families”. Chúng giúp ta nhóm các dữ liệu có cùng điểm chung lại với nhau, phân nhóm các loại dữ liệu và thực hiện các chính sách áp dụng lên từng nhóm, ví dụ: nén… Tất cả các columns ở trong cùng 1 column families đều được lưu trữ cùng nhau ở trong storage file được gọi là HFile. Các column families này cần phải được khai báo khi ta tạo mới tables bên trong HBase và trong 1 table HBase không nên có quá nhiều column families, hiện tại HBase vẫn chưa hoạt động tốt với các table có nhiều hơn 2 hay  3 columns families.
Không giống như các hệ cơ sở dữ liệu quan hệ,  column trong HBase không cần thiết phải khởi tạo từ khi khởi tạo bảng mà ta có thể tạo mới column ngay trong quá trình hoạt động. Trong 1 table có thể có số lượng column lên tới hàng nghìn hoặc nhiều hơn. 1 column của Hbase được khai báo dưới dạng:”families: qualifier”, trong đó families là tên của columns families mà colums được nhóm vào trong đó, qualifier để xác định column.


Gía  trị của mỗi columns được gọi là cell, mỗi cells chứa nhiều cặp “version(timestamp, value)”. Trong đó timestamp là giá trị được sinh ra bởi hệ thống hoăc được xác định bởi người dùng. Các version khác nhau được phân biệt với nhau bởi timestamp, trong 1 cells có thể lưu trữ nhiều version của data ứng với thời gian được đưa vào hệ thống khác nhau. Các version này được sắp xếp theo thứ tự từ mới đến cũ. Bởi vậy ta sẽ đọc các version mới của data trước sau đó đọc đến các version cũ hơn của nó…Hình sau miêu tả 1 cách logic cách các version được sắp xếp trong mỗi rows:

Một điểm khác biệt nữa của HBase so với các hệ cơ sở dữ liệu thông thường khác là các giá trị “null” sẽ không được lưu trữ trong cơ sở dữ liệu HBase. Hình sau thể hiện sự khác nhau trong cách lưu trữ giữa 2 loại cơ sở dữ liệu:
          
Auto-sharding

Đơn vị lưu trữ cơ bản của HBase là region, việc phân chia tables thành các region đảm bảo khả năng phân tán và cân bảng tải của HBase. Mỗi region chứa 1 dải các row xếp liền nhau và chúng sẽ được tự động chia làm 2 nếu dữ liệu trong nó trở lên quá lớn.
Mỗi region nằm trong 1 RegionServer duy nhất, nhưng mỗi RegionServer lại có thể chứa cùng 1 lúc nhiều region khác nhau như hình sau:

Architect of HBase Cluster
Một HBase cluster có mô hình như sau:

Trong đó:
  • HMaster: thành phần phản lý hệ thống
  • Zookeeper: lưu trữ các metadata, region info.
  • HRegionServer: quản lý và lưu trữ các region.
  • HFile: lưu trữ dữ liệu của HBase.
  • HLog: lưu trữ các Log để có thể recovery lại quá trình ghi dữ liệu nếu có sự cố.
  • HDFS: distributed file system mà HBase sử dụng.
Khi có yêu cầu get hoặc scan:
  • Client kết nối tới Zookeeper để tìm địa chỉ của ROOT table.
  • Client sử dụng ROOT Table để tìm ra địa chỉ của META table chứa thông tin của region mà nó cần tìm.
  • Client sử dụng META table để tìm kiếm thông tin của region mà nó cần tìm

References:
Largs George: HBase- The Definitive Guide (2011)

SHARE THIS

0 comments: