Bài đăng này ban đầu được xuất bản qua blog.apache.org, chúng tôi tái xuất bản nó ở đây dưới dạng được sửa đổi một chút để thuận tiện cho bạn:
Thoạt nhìn, kiến trúc Apache HBase dường như tuân theo mô hình chủ / tớ trong đó chủ nhận tất cả các yêu cầu nhưng công việc thực sự được thực hiện bởi các nô lệ. Thực tế không phải như vậy, và trong bài viết này, tôi sẽ mô tả những tác vụ nào trên thực tế được xử lý bởi master và các nô lệ.
Vùng và Máy chủ Vùng
HBase là trình quản lý lưu trữ Hadoop cung cấp khả năng đọc và ghi ngẫu nhiên có độ trễ thấp trên HDFS và nó có thể xử lý hàng petabyte dữ liệu. Một trong những khả năng thú vị trong HBase là tính năng tự động mài, có nghĩa là các bảng được hệ thống phân phối động khi chúng trở nên quá lớn.
Đơn vị cơ bản của khả năng mở rộng theo chiều ngang trong HBase được gọi là Vùng . Các khu vực là một tập hợp con dữ liệu của bảng và chúng về cơ bản là một phạm vi các hàng được sắp xếp, liền kề nhau được lưu trữ cùng nhau.
Ban đầu, chỉ có một vùng cho một bảng. Như được hiển thị bên dưới, khi các vùng trở nên quá lớn sau khi thêm nhiều hàng hơn, vùng đó sẽ được chia thành hai ở phím giữa, tạo ra hai nửa gần bằng nhau.
Trong HBase, các nô lệ được gọi là Máy chủ Vùng . Mỗi Máy chủ Vùng chịu trách nhiệm cung cấp một tập hợp các vùng và một Vùng (tức là phạm vi hàng) chỉ có thể được phục vụ bởi một Máy chủ Vùng.
Kiến trúc HBase có hai dịch vụ chính: HMaster chịu trách nhiệm điều phối cụm và thực hiện các hoạt động quản trị và HRegionServer chịu trách nhiệm xử lý một tập hợp con dữ liệu của bảng.
HMaster, Phân công khu vực và Cân bằng
Như đã đề cập trước đây, HBase Master điều phối Cụm HBase và chịu trách nhiệm về các hoạt động quản trị.
Máy chủ Vùng có thể phục vụ một hoặc nhiều Vùng. Mỗi Vùng được gán cho Máy chủ Vùng khi khởi động và máy chủ có thể quyết định di chuyển Vùng từ Máy chủ Vùng này sang Máy chủ Vùng khác do kết quả của hoạt động cân bằng tải. Master cũng xử lý các lỗi Máy chủ Vùng bằng cách gán vùng cho Máy chủ Vùng khác.
Ánh xạ các Vùng và Máy chủ Vùng được lưu trong một bảng hệ thống gọi là META. Bằng cách đọc META, bạn có thể xác định khu vực nào chịu trách nhiệm cho khóa của bạn. Điều này có nghĩa là đối với các hoạt động đọc và ghi, máy chủ hoàn toàn không tham gia và máy khách có thể truy cập trực tiếp vào Máy chủ Vùng chịu trách nhiệm để cung cấp dữ liệu được yêu cầu.
Định vị Khóa Hàng:Máy chủ Khu vực nào chịu trách nhiệm?
Để đặt hoặc có được một hàng, khách hàng không phải liên hệ với cái chính, khách hàng có thể liên hệ trực tiếp với Máy chủ khu vực xử lý hàng được chỉ định hoặc trong trường hợp quét máy khách, có thể liên hệ trực tiếp với nhóm Máy chủ khu vực chịu trách nhiệm xử lý tập trong số các khóa:
Để xác định Máy chủ Vùng, máy khách thực hiện một truy vấn trên bảng META.
META là một bảng hệ thống được sử dụng để theo dõi các khu vực. Nó chứa tên máy chủ và số nhận dạng vùng bao gồm tên bảng và khóa-hàng bắt đầu. Bằng cách nhìn vào khóa bắt đầu và các ứng dụng khách có khóa khởi động khu vực tiếp theo có thể xác định phạm vi các hàng có trong một khu vực cụ thể.
Máy khách giữ một bộ nhớ cache cho các vị trí khu vực. Điều này tránh cho khách hàng chạm vào bảng META mỗi khi một hoạt động trên cùng một khu vực được phát hành. Trong trường hợp tách vùng hoặc di chuyển sang Máy chủ vùng khác (do chính sách cân bằng hoặc chỉ định), máy khách sẽ nhận được phản hồi là ngoại lệ và bộ đệm sẽ được làm mới bằng cách tìm nạp thông tin cập nhật từ bảng META:
Vì META là một bảng giống như những bảng khác, khách hàng phải xác định META nằm trên máy chủ nào. Các vị trí META được lưu trữ trong một nút ZooKeeper khi Master chỉ định và máy khách đọc trực tiếp nút đó để lấy địa chỉ của Máy chủ Vùng chứa META.
Thiết kế ban đầu của HBase dựa trên BigTable, với một bảng khác có tên -ROOT- chứa các vị trí META và Apache ZooKeeper trỏ đến bảng đó. HBase 0.96 đã loại bỏ sự sắp xếp đó chỉ có lợi cho ZooKeeper, vì không thể tách META và do đó bao gồm một vùng duy nhất.
API ứng dụng khách:Trách nhiệm chính và khu vực
API ứng dụng khách HBase Java có hai giao diện chính:
- HBaseAdmin cho phép tương tác với “lược đồ bảng” bằng cách tạo / xóa / sửa đổi bảng và nó cho phép tương tác với cụm bằng cách gán / bỏ chỉ định các vùng, hợp nhất các vùng với nhau, kêu gọi xóa, v.v. Giao diện này giao tiếp với Master.
- Có thể sử dụng cho phép máy khách thao tác dữ liệu của một bảng cụ thể bằng cách sử dụng get, put, delete và tất cả các thao tác dữ liệu khác. Giao diện này liên lạc trực tiếp với Máy chủ khu vực chịu trách nhiệm xử lý bộ khóa được yêu cầu.
Hai giao diện đó có các trách nhiệm riêng biệt:HBaseAdmin chỉ được sử dụng để thực thi các hoạt động quản trị và giao tiếp với Master trong khi HTable được sử dụng để thao tác dữ liệu và giao tiếp với các khu vực.
Kết luận
Như chúng ta đã thấy ở đây, có kiến trúc Master / Slave không có nghĩa là mỗi hoạt động đều đi qua master. Trên thực tế, để đọc và ghi dữ liệu, máy khách HBase đi trực tiếp đến Máy chủ khu vực cụ thể chịu trách nhiệm xử lý các khóa hàng cho tất cả các hoạt động dữ liệu (HTable). Master chỉ được sử dụng bởi máy khách cho các hoạt động tạo bảng, sửa đổi và xóa (HBaseAdmin).
Mặc dù có khái niệm về Master, nhưng ứng dụng khách HBase không phụ thuộc vào nó để thực hiện các hoạt động dữ liệu và cụm có thể tiếp tục cung cấp dữ liệu ngay cả khi master gặp sự cố.
Matteo Bertozzi là Kỹ sư phần mềm trong nhóm Nền tảng và là Người cam kết HBase.
Nếu bạn quan tâm đến HBase, hãy nhớ đăng ký HBaseCon 2013 (ngày 13 tháng 6, San Francisco) - SỰ kiện cộng đồng dành cho cộng tác viên, nhà phát triển, quản trị viên và người dùng HBase. Không gian có hạn!