Mô hình giao dịch đang thay đổi đáng kể với CDH 5 / HBase 0,96. Đây là những gì bạn cần biết.
Apache HBase là một kho lưu trữ dữ liệu phân tán dựa trên một cây hợp nhất có cấu trúc nhật ký, vì vậy hiệu suất đọc tối ưu sẽ đến từ việc chỉ có một tệp cho mỗi cửa hàng (Họ cột). Tuy nhiên, lý tưởng đó không thể thực hiện được trong thời gian có nhiều bản ghi đến. Thay vào đó, HBase sẽ cố gắng kết hợp các HFiles để giảm số lượng đĩa tối đa cần thiết để đọc. Quá trình này được gọi là compaction .
Các giao dịch viên chọn một số tệp từ một cửa hàng duy nhất trong một khu vực và kết hợp chúng. Quá trình này bao gồm việc đọc các KeyValues trong các tệp đầu vào và ghi ra bất kỳ KeyValues nào không bị xóa, đang tồn tại trong thời gian tồn tại (TTL) và không vi phạm số lượng phiên bản. Sau đó, tệp kết hợp mới được tạo sẽ thay thế các tệp đầu vào trong vùng.
Giờ đây, bất cứ khi nào khách hàng yêu cầu dữ liệu, HBase sẽ biết dữ liệu từ các tệp đầu vào được lưu giữ trong một tệp liền kề trên đĩa - do đó chỉ cần một lần tìm kiếm, trong khi trước đây có thể yêu cầu một lần cho mỗi tệp. Tuy nhiên, IO đĩa không miễn phí và nếu không chú ý cẩn thận, việc ghi lại nhiều lần dữ liệu có thể dẫn đến một số đăng ký mạng và đĩa quá mức nghiêm trọng. Nói cách khác, compaction là giao dịch một số IO đĩa ngay bây giờ để sau này ít tìm kiếm hơn.
Trong bài đăng này, bạn sẽ tìm hiểu thêm về việc sử dụng và ý nghĩa của các giao dịch trong CDH 4, cũng như các thay đổi đối với mô hình nén trong CDH 5 (sẽ được dựa trên HBase 0.96).
Nén trong CDH 4
Bộ nén lý tưởng sẽ chọn các tệp sẽ giảm được nhiều lượt tìm kiếm nhất trong các lần đọc sắp tới đồng thời chọn các tệp sẽ cần ít IO nhất. Thật không may, vấn đề đó không thể giải quyết được nếu không có kiến thức về tương lai. Do đó, đó chỉ là một lý tưởng mà HBase nên phấn đấu chứ không phải là một điều gì đó thực sự có thể đạt được.
Thay vì lý tưởng bất khả thi, HBase sử dụng phương pháp phỏng đoán để thử và chọn tệp nào trong cửa hàng có khả năng là ứng cử viên tốt. Các tệp được chọn dựa trên trực giác rằng các tệp like phải được kết hợp với các tệp like - nghĩa là, các tệp có cùng kích thước nên được kết hợp với nhau.
Chính sách mặc định trong HBase 0.94 (vận chuyển trong CDH 4) xem qua danh sách các tệp HF, cố gắng tìm tệp đầu tiên có kích thước nhỏ hơn tổng tất cả các tệp được nhân với hbase.store.compaction.ratio. Khi tệp đó được tìm thấy, HFile và tất cả các tệp có id trình tự nhỏ hơn sẽ được chọn để nén.
Đối với trường hợp mặc định của tệp lớn nhất là tệp cũ nhất, phương pháp này hoạt động tốt:
Tuy nhiên, giả định này về mối tương quan giữa tuổi và kích thước của tệp bị lỗi trong một số trường hợp, dẫn đến thuật toán hiện tại chọn phụ tối ưu. Thay vào đó, các tệp được tải hàng loạt và đôi khi có thể sắp xếp rất khác so với các tệp HF được tạo thông thường hơn, vì vậy chúng tạo ra các ví dụ tuyệt vời:
Những thay đổi về nén trong CDH 5
Các giao dịch đã thay đổi theo những cách đáng kể gần đây. Đối với HBase 0.96 và CDH 5, thuật toán chọn tệp có thể được định cấu hình thông qua HBASE-7516— vì vậy, giờ đây có thể có các chính sách nén do người dùng cung cấp. Thay đổi này cho phép nhiều người dùng có kinh nghiệm hơn kiểm tra và lặp lại cách họ muốn chạy các giao dịch.
Thuật toán lựa chọn nén mặc định cũng được thay đổi thành ExploringCompactionPolicy. Chính sách này khác với mặc định cũ ở chỗ nó đảm bảo rằng mọi tệp trong một nén được đề xuất đều nằm trong tỷ lệ nhất định. Ngoài ra, nó không chỉ chọn tập hợp các tệp đầu tiên có kích thước trong tỷ lệ nén; thay vào đó, nó xem xét tất cả các tập hợp có thể không vi phạm bất kỳ quy tắc nào, sau đó chọn thứ gì đó có vẻ có tác động nhất với lượng IO dự kiến ít nhất. Để làm điều đó, ExploringCompactionPolicy chọn một nén sẽ loại bỏ hầu hết các tệp trong tỷ lệ và nếu có sự ràng buộc, ưu tiên sẽ được đưa ra cho tập hợp các tệp có kích thước nhỏ hơn:
Các thay đổi khác được lên kế hoạch cho các bản phát hành trong tương lai, bao gồm nén theo tầng, đầm sọc và đầm theo cấp.
Kết luận
Đối với một số trường hợp sử dụng, công việc này sẽ không có bất kỳ tác động nào. Đó là một điều tốt, vì các giao dịch đã được nghiên cứu khá kỹ lưỡng. Tuy nhiên, đối với những người dùng có lưu lượng truy cập tăng đột biến hoặc sử dụng tải hàng loạt, công việc này có thể mang lại những cải tiến lớn về thời gian chờ IO và độ trễ yêu cầu. Đối với một trường hợp sử dụng tải hàng loạt cụ thể, chúng tôi đã thấy IO đĩa giảm 90% do các giao dịch.
Dưới đây là kết quả từ một trường hợp thử nghiệm trong HBase’s PerfTestCompactionPolicies:
Hãy xem tác phẩm này trong CDH 5 (đang trong giai đoạn thử nghiệm tại thời điểm viết bài này) khi nó đến một cụm gần bạn.
Đọc thêm:
- Khám phá Chính sách nén
- https://hbase.apache.org/book/regions.arch.html#compaction.file.selection
- https://issues.apache.org/jira/browse/HBASE-7516
- https://issues.apache.org/jira/browse/HBASE-7678
- https://issues.apache.org/jira/browse/HBASE-7667
- https://issues.apache.org/jira/browse/HBASE-7055
- http://www.hbasecon.com/sessions/compaction-improvements-in-apache-hbase/