Apache ZooKeeper là một hệ thống máy khách / máy chủ để điều phối phân tán có giao diện tương tự như hệ thống tệp, trong đó mỗi nút (được gọi là znode ) có thể chứa dữ liệu và một tập hợp con. Mỗi znode có một tên và có thể được xác định bằng đường dẫn giống hệ thống tệp (ví dụ:/ root-znode / sub-znode / my-znode).
Trong Apache HBase, ZooKeeper điều phối, giao tiếp và chia sẻ trạng thái giữa Master và RegionServer. HBase có chính sách thiết kế chỉ sử dụng ZooKeeper cho dữ liệu tạm thời (nghĩa là cho sự điều phối và giao tiếp trạng thái). Do đó, nếu dữ liệu ZooKeeper của HBase bị xóa, chỉ các hoạt động tạm thời bị ảnh hưởng - dữ liệu có thể tiếp tục được ghi và đọc đến / từ HBase.
Trong bài đăng trên blog này, bạn sẽ có một chuyến tham quan ngắn về cách sử dụng HBase znodes. Phiên bản HBase được sử dụng để tham khảo ở đây là 0,94 (được vận chuyển bên trong CDH 4.2 và CDH 4.3), nhưng hầu hết các znodes đều có mặt trong các phiên bản trước và cũng có khả năng như vậy trong các phiên bản tương lai.
Đường dẫn znode gốc HBase có thể được định cấu hình bằng cách sử dụng hbase-site.xml và theo mặc định, vị trí là “/ hbase”. Tất cả các znode được tham chiếu bên dưới sẽ được đặt tiền tố bằng cách sử dụng vị trí mặc định / hbase và thuộc tính cấu hình cho phép bạn đổi tên znode cụ thể sẽ được liệt kê bên cạnh tên znode mặc định và được đánh dấu bằng kiểu in đậm.
ZooKeeper cung cấp một trình bao tương tác cho phép bạn khám phá trạng thái ZooKeeper - chạy nó bằng cách sử dụng hbase zkcli
và đi qua znode qua ls
, như trong một hệ thống tệp điển hình. Bạn cũng có thể lấy một số thông tin về nội dung znode bằng cách sử dụng get
lệnh.
$ hbase zkcli [zk: localhost:2181(CONNECTED) 0] ls / [hbase, zookeeper] [zk: localhost:2181(CONNECTED) 1] ls /hbase [splitlog, online-snapshot, unassigned, root-region-server, rs, backup-masters, draining, table, master, shutdown, hbaseid] [zk: localhost:2181(CONNECTED) 2] get /hbase/root-region-server 3008@u1310localhost,60020,1382107614265 dataLength = 44 numChildren = 0 ...
Hoạt động
Các znodes mà bạn thường thấy nhất là các znodes điều phối các hoạt động như Gán khu vực, Tách nhật ký và Chuyển đổi dự phòng chính hoặc theo dõi trạng thái cụm chẳng hạn như vị trí bảng ROOT, danh sách Máy chủ khu vực trực tuyến và danh sách các Khu vực chưa được chỉ định .
/ hbase (Zookeeper.znode.parent) | Znode gốc sẽ chứa tất cả các znode được HBase tạo / sử dụng |
/ hbase / hbaseid (Zookeeper.znode.clusterId) | Do Master khởi tạo với UUID xác định cụm. ID cũng được lưu trữ trên HDFS trong hdfs:/ |
/ hbase / root-region-server (zookeeper.znode.osystemerver) | Chứa vị trí của máy chủ lưu trữ vùng ROOT. Nó được khách hàng truy vấn để xác định Máy chủ khu vực chịu trách nhiệm ROOT và yêu cầu các vị trí META. (Vào năm 0.96, bảng ROOT đã bị xóa như một phần của HBASE-3171 và znode này được thay thế bằng / hbase / meta-region-server [zookeeper.znode.metaserver] chứa vị trí của máy chủ lưu trữ META.) |
/ hbase / rs (Zookeeper.znode.rs) | Khi khởi động, mỗi RegionServer sẽ tạo một znode con (ví dụ:/hbase/rs/m1.host) được cho là mô tả trạng thái “trực tuyến” của RegionServer. Thạc sĩ giám sát znode này để lấy danh sách Máy chủ Vùng “trực tuyến” và sử dụng danh sách đó trong quá trình Phân công / Cân bằng. |
/ hbase / chưa giao (Zookeeper.znode.unassigned) | Chứa znode con cho mỗi vùng chưa được gán (ví dụ:/ hbase / unassigned / |
/ hbase / master (Zookeeper.znode.master) | Cái "đang hoạt động" sẽ đăng ký địa chỉ của chính nó trong znode này khi khởi động, làm cho znode này trở thành nguồn trung thực để xác định máy chủ nào là Máy chủ. |
/ hbase / backup-master (Zookeeper.znode.backup.masters) | Mỗi Master không hoạt động sẽ tự đăng ký làm Master dự phòng bằng cách tạo một znode con (hbase / backup-master / m1.host). Znode này chủ yếu được sử dụng để theo dõi máy nào có sẵn để thay thế Master trong trường hợp hỏng hóc. |
/ hbase / tắt máy (Zookeeper.znode.state) | Mô tả trạng thái cụm, "Cụm có lên không?" Nó được tạo bởi Master khi khởi động và được Master xóa khi tắt máy. Nó được theo dõi bởi RegionServers. |
/ hbase / draining (Zookeeper.znode.draining.rs) | Được sử dụng để hủy truyền nhiều hơn một RegionServer cùng một lúc bằng cách tạo các znodes con có dạng serverName, port, startCode (ví dụ:/hbase/draining/m1.host,60020,1338936306752). Điều này cho phép bạn ngừng hoạt động nhiều Máy chủ Vùng mà không gặp rủi ro các vùng tạm thời được chuyển sang Máy chủ Vùng sẽ ngừng hoạt động sau này. Đọc phần này để tìm hiểu thêm về / hbase / draining. |
/ hbase / bảng (Zookeeper.znode.masterTableEnableDisable) | Được cái chủ sử dụng để theo dõi trạng thái bảng trong quá trình gán (ví dụ:trạng thái tắt / bật). |
/ hbase / splitlog (Zookeeper.znode.splitlog) | Được sử dụng bởi bộ tách nhật ký để theo dõi nhật ký đang chờ phát lại và nhiệm vụ của nó. (Đọc phần này để tìm hiểu thêm về cách tách nhật ký). |
Bảo mật
Danh sách kiểm soát truy cập (ACL) và bộ đồng xử lý của Nhà cung cấp mã thông báo thêm hai znodes nữa:một để đồng bộ hóa quyền truy cập vào các ACL của bảng và một để đồng bộ hóa khóa mã hóa mã thông báo trên các nút cụm.
/ hbase / acl (Zookeeper.znode.acl.parent) | Acl znode được sử dụng để đồng bộ hóa các thay đổi được thực hiện đối với bảng _acl_ bằng lệnh cấp / thu hồi. Mỗi bảng sẽ có một znode con (/ hbase / acl / tableName) chứa các ACL của bảng. (Đọc phần này để biết thêm thông tin về bộ điều khiển truy cập và tương tác ZooKeeper.) |
/ hbase / tokenauth (Zookeeper.znode.tokenauth.parent) | Nhà cung cấp mã thông báo thường được sử dụng để cho phép một công việc MapReduce truy cập vào cụm HBase. Khi người dùng yêu cầu mã thông báo mới, thông tin sẽ được lưu trữ trong znode phụ được tạo cho khóa (/ hbase / tokenauth / keys / key-id). |
Nhân rộng
Theo nguyên tắc chung, tất cả các znodes là tạm thời, có nghĩa là chúng đang mô tả trạng thái "tạm thời" - vì vậy, ngay cả khi bạn xóa mọi thứ khỏi ZooKeeper, HBase vẫn có thể tạo lại chúng. Mặc dù các znodes của Replication không mô tả trạng thái tạm thời, nhưng chúng có nghĩa là nguồn chân lý cho trạng thái sao chép, mô tả trạng thái sao chép của mỗi máy. (Đọc phần này để tìm hiểu thêm về sao chép).
/ hbase / sao chép (Zookeeper.znode.replication) | Znode gốc chứa tất cả thông tin trạng thái sao chép HBase |
/ hbase / sao chép / ngang hàng (Zookeeper.znode.replication.peers) | Mỗi người ngang hàng sẽ có một znode con (ví dụ:/ hbase / replication / peer / |
/ hbase / sao chép / ngang hàng / | Phản chiếu của znode / hbase / replication / ngang hàng, nhưng ở đây mỗi znode con (/ hbase / replication / peer-state / |
/ hbase / replication / state (Zookeeper.znode.replication.state) | Cho biết tính năng sao chép có được bật hay không. Sao chép có thể được kích hoạt bằng cách đặt cấu hình hbase.replication thành true, hoặc có thể được bật / tắt bằng cách sử dụng lệnh start / stop trong HBase shell. (Trong 0,96, znode này đã bị loại bỏ và znode trạng thái ngang hàng ở trên được sử dụng làm tham chiếu.) |
/ hbase / replication / rs (Zookeeper.znode.replication.rs) | Chứa danh sách Máy chủ Vùng trong cụm chính (/ hbase / replication / rs / |
Quy trình Chụp nhanh Trực tuyến
Ảnh chụp nhanh trực tuyến được điều phối bởi Master bằng cách sử dụng ZooKeeper để giao tiếp với các Máy chủ vùng bằng cách sử dụng giao dịch giống như cam kết hai giai đoạn. (Đọc phần này để biết thêm chi tiết về ảnh chụp nhanh.)
/ hbase / ảnh chụp nhanh trực tuyến / có được | Znode có được mô tả bước đầu tiên của một giao dịch chụp nhanh. Master sẽ tạo một znode con cho ảnh chụp nhanh (/ hbase / online-snapshot / thu được / |
/ hbase / ảnh chụp nhanh trực tuyến / đạt được | Khi mỗi RegionServer đã tham gia znode có được, Master sẽ tạo znode đã đạt được cho snapshot (/ hbase / online-snapshot / đạt / |
/ hbase / ảnh chụp nhanh trực tuyến / hủy bỏ | Nếu có điều gì đó không thành công ở phía Master hoặc phía RegionServer, znode hủy bỏ sẽ được tạo cho ảnh chụp nhanh cho mọi người biết rằng đã xảy ra sự cố với ảnh chụp nhanh và hủy bỏ công việc. |
Kết luận
Như bạn có thể thấy, ZooKeeper là một phần cơ bản của HBase. Tất cả các hoạt động yêu cầu phối hợp, chẳng hạn như gán khu vực, chuyển đổi dự phòng chính, sao chép và ảnh chụp nhanh, đều được xây dựng trên ZooKeeper. (Bạn có thể tìm hiểu thêm về lý do / cách bạn sử dụng ZooKeeper trong các ứng dụng của mình tại đây.)
Mặc dù hầu hết các znodes chỉ hữu ích với HBase, một số - chẳng hạn như danh sách Máy chủ Vùng (/ hbase / rs) hoặc danh sách Vùng chưa được chỉ định (/ hbase / chưa được gán) - có thể được sử dụng cho mục đích gỡ lỗi hoặc giám sát. Hoặc, như trong trường hợp với / hbase / draining, bạn có thể tương tác với họ để cho HBase biết bạn đang làm gì với cụm.
Matteo Bertozzi là Kỹ sư phần mềm tại Cloudera và là Người cam kết của dự án HBase.