Recent Posts

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”.
1
Hoặc ta có thể miêu tả kiến trúc của HBase dưới dạng:
2
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:
3
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.
4

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:
5
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:
          6
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:
7
Architect of HBase Cluster
Một HBase cluster có mô hình như sau:
8
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
HBase Lookup

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

Related Post:

  • Code C/C++: Tìm mọi đường đi từ giữa hai đỉnh của đồ thịTìm mọi đường đi từ giữa hai đỉnhMô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định mọi đường đi từ đỉnh D tới đỉnh C của đồ thị G.Ý tưởng thuật toán: sử dụng kỹ thuật tìm kiếm theo chiều sâu.Mô tả dữ liệu đầu vào và đầu ra của bài toán:Dữ liệu vào: đồ thị liên thông và cho trong tập tin Bai3.inp -  Dòng đầu ghi số n là số đỉnh của một đồ thị (0&l… Read More
  • Code C/C++: Đường đi Hamilton (bài toán đồ thị)Mô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định mọi đường đi từ đỉnh xuất phát đi qua tất cả các đỉnh mỗi đỉnh chỉ qua duy nhất 1 lần.Ý tưởng thuật toán: sử dụng kỹ thuật tìm kiếm theo chiều sâu bằng cách đánh dấu đỉnh đã đi qua trong quá trình tìm kiếm.Mô tả dữ liệu đầu vào và đầu ra của bài toán:Dữ liệu vào: cho trong tập tin Bai4.inp-  Dòng … Read More
  • Code C/C++: Thuật toán Prim tìm cây bao trùm tối thiểuMô tả bài toán: cho đồ thị vô hướng có trọng số G=(V,E) hãy tìm đường đi sao cho tất cả các đỉnh điều có đường đi với nhau và tổng trọng số của đường đi là nhỏ nhất.Ý tưởng thuật toán:Bước 1: xuất phát từ đỉnh k bất kỳ (thông thường chọn đỉnh đầu tiên) chọn một cạnh có trọng số nhỏ nhất liền kề với đỉnh k (min{A[k][j]}j=1..n) ta đánh dấu 2 đỉnh đi qua c… Read More
  • Code C/C++: Tìm đường đi Euler của đồ thị (bài toán tìm đường đi)Mô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định mọi đường đi qua tất cả các cạnh mỗi cạnh chỉ qua duy nhất 1 lần.Ý tưởng thuật toán:sử dụng kỹ thuật tìm kiếm theo chiều sâu bằng cách xóa cạnh đã đi qua trong quá trình tìm kiếm đường đi.Mô tả dữ liệu đầu vào và đầu ra của bài toán:Dữ liệu vào: cho trong tập tin Bai5.inp-  Dòng đầu ghi số n là số… Read More
  • Code C/C++: Đếm số thành phần liên thông của đồ thịMô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy đếm số thành phần liên thông của đồ thị G.Ý tưởng thuật toán:Bước 0: khởi tạo số thành phần liên thông bằng 0.Bước 1: xuất phát từ một đỉnh chưa được đánh dấu của đồ thị. Ta đánh dấu đỉnh xuất phát, tăng số thành phần liên thông lên 1 và chuyển sang bước 2.Bước 2: từ một đỉnh i đã đánh dấu, ta đánh dấu đỉnh j n… Read More
  • Code C/C++: Thuật toán Dijkstra tìm đường đi ngắn nhấtMô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định đường đi ngắn nhất từ đỉnh D tới đỉnh C của đồ thị G.Ý tưởng thuật toán: sử dụng thuật toán Dijkstra.Mô tả dữ liệu đầu vào và đầu ra của bài toán:Dữ liệu vào: đồ thị đã liên thông và cho trong tập tin Bai6.inp. -  Dòng đầu ghi số n là số đỉnh của một đồ thị (0<n<100)-  Dòng thứ hai lưu … Read More




Klik untuk melihat kode: :) =( :s :D :-D ^:D ^o^ 7:( :Q :p T_T @@, :-a :W *fck* x@