Hai cách để giữ các tệp được đồng bộ hóa giữa Alluxio và HDFS

An toàn thông tin - Ngày đăng : 16:10, 18/04/2019

Khi sử dụng Alluxio, điều quan trọng là giữ cho không gian tên Alluxio và không gian tên UFS nhất quán. Bài viết này mô tả hai cách để thực hiện đồng bộ hóa này.

Alluxio cung cấp một lớp truy cập dữ liệu phân tán giúp các ứng dụng như Spark hoặc Presto truy cập các UFS (Underlying File System- hệ thống cơ sở kiểm soát cách lưu trữ và truy xuất dữ liệu) khác nhau thông qua một giao diện lập trình ứng dụng trong không gian tên hệ thống tệp thống nhất.

Trong trường hợp người dùng chỉ tương tác với các tệp trong UFS thông qua Alluxio, vì Alluxio có kiến ​​thức về bất kỳ thay đổi nào mà khách hàng thực hiện đối với UFS nên nó sẽ giữ cho không gian tên Alluxio đồng bộ với không gian tên UFS (xem hình bên trái bên dưới).

Tuy nhiên, khi một tệp trong UFS bị thay đổi mà không thông qua Alluxio, không gian tên UFS và không gian tên Alluxio có thể có khả năng không đồng bộ với nhau. Khi điều này xảy ra, thao tác Đồng bộ siêu dữ liệu UFS (UFS Metadata Sync) được yêu cầu để đồng bộ hóa hai không gian tên (minh họa trong hình bên phải).

Image title

Trong Alluxio 2.0, có hai cách để đảm bảo đồng bộ siêu dữ liệu giữa Alluxio và UFS.

Đồng bộ hóa theo yêu cầu

Alluxio tự động lưu trữ thông tin siêu dữ liệu từ UFS để các hoạt động siêu dữ liệu tiếp theo như listStatus (hoặc ls) sẽ không cần phải truy cập vào UFS. Điều này làm giảm độ trễ của các hoạt động siêu dữ liệu này. Tuy nhiên, đôi khi siêu dữ liệu của UFS cơ sở có thể thay đổi mà không thông báo cho Alluxio. Khi điều đó xảy ra, bộ đệm này cần phải bị vô hiệu. Kể từ phiên bản 1.7.0, Alluxio đã cung cấp tùy chọn alluxio.user.file.metadata.sync.interval cho phép người dùng kiểm soát tần suất bộ đệm siêu dữ liệu được làm mới. Bất cứ khi nào máy khách đưa ra một hoạt động siêu dữ liệu, chẳng hạn như listStatus, nó có thể chỉ định khoảng -1, 0 hoặc giá trị thời gian. Khi được đặt thành -1, Alluxio không bao giờ lấy thông tin siêu dữ liệu từ UFS. Khi được đặt thành 0, nó luôn lấy thông tin siêu dữ liệu từ UFS. Khi được đặt thành giá trị thời gian, nó sẽ tìm nạp thông tin siêu dữ liệu từ UFS nếu trong khoảng thời gian được chỉ định nó chưa được thực hiện việc này.

Đây là một ví dụ.

$ alluxio fs ls -R -Dalluxio.user.file.metadata.sync.interval = 0 / dir

Đoạn mã có ý nghĩa rằng alluxio luôn lấy thông tin siêu dữ liệu từ UFS.

Một điều cần lưu ý là hệ thống Alluxio không bao giờ đồng bộ hóa với UFS trừ khi có yêu cầu của máy khách đối với UFS đó. Điều này có thể gây ra sự cố vì khi khách hàng truy cập vào UFS lần đầu tiên, chi phí truy cập thêm vào UFS có thể làm chậm yêu cầu khách hàng. Điều này đòi hỏi một cơ chế sẽ đồng bộ hóa không gian tên Alluxio và không gian tên UFS trong hoạt động nền hoặc đồng bộ hóa UFS chủ động.

Đồng bộ hóa chủ động

Bản phát hành xem trước Alluxio 2.0 hỗ trợ một tính năng mới, “Active UFS Sync”, đồng bộ hóa UFS chủ động. Tính năng này cho phép người dùng chỉ định một thư mục được đồng bộ hóa giữa không gian tên Alluxio và không gian tên UFS định kỳ theo một khoảng thời gian tùy chọn. Hiện tại, Active UFS Sync chỉ được hỗ trợ giữa Alluxio và HDFS 2.7 trở lên. Để sử dụng tính năng này, người dùng đang chạy Alluxio phải là người dùng quản trị viên HDFS để nhận được luồng sự kiện mà HDFS cung cấp.

Để bật đồng bộ hóa chủ động trên một thư mục, đặt lệnh Alluxio sau trên thư mục được HDFS hỗ trợ.

$ alluxio fs startSync / syncedDir

Bạn cũng có thể dừng đồng bộ hóa chủ động trên một thư mục bằng cách sử dụng lệnh sau.

$ alluxio fs stopSync / syncedDir

Lưu ý, danh sách các thư mục được đồng bộ hóa chủ động được ghi nhớ giữa các lần khởi động lại nâng cao. Bạn có thể kiểm tra thư mục nào đang được đồng bộ hóa chủ động bằng cách sử dụng lệnh getSyncPathList.

$ alluxio fs getSyncPathList

Tối ưu hóa

Có một vài tham số để tối ưu hóa đồng bộ UFS chủ động.

  • Khoảng thời gian đồng bộ hóa: Người dùng có thể kiểm soát khoảng thời gian đồng bộ hóa chủ động bằng cách thay đổi tùy chọn alluxio.master.activesync.interval, mặc định là 30 giây.
  • Khoảng thời gian “yên tĩnh”: Để tránh đồng bộ hóa khi thư mục đang được sửa đổi nhiều và bổ sung một khối lượng lớn công việc RPC vào UFS, Active UFS Sync cố gắng chỉ đồng bộ hóa khi UFS được coi là đang trong khoảng thời gian yên tĩnh. Khoảng thời gian yên tĩnh này được kiểm soát bởi alluxio.master.activesync.maxactivity. Hoạt động đồng bộ hóa sẽ dựa trên lịch sử trước đó, cụ thể: trung bình động hàm mũ của một số sự kiện trong một thư mục. Ví dụ: nếu một thư mục có 100, 10, 1 sự kiện trong ba khoảng thời gian vừa qua. Hoạt động của nó sẽ là `100/10 * 10 10/10 1 = 3`. Thuộc tính alluxio.master.activesync.maxactivity là số lượng hoạt động tối đa trong thư mục UFS được coi là “yên tĩnh”.
  • Tuy nhiên, nếu chúng ta chỉ đồng bộ hóa trong khoảng thời gian yên tĩnh, chúng ta có thể phải chờ một thời gian dài và siêu dữ liệu có thể trở nên cũ trong không gian tên Alluxio. Thuộc tính alluxio.master.activesync.maxage là số lượng khoảng thời gian tối đa chúng ta sẽ đợi trước khi không gian UFS và Alluxio được đồng bộ. Hệ thống đảm bảo rằng một thư mục được đồng bộ nếu nó đang trong khoảng thời gian "yên tĩnh" hoặc nó không được đồng bộ hóa trong một khoảng thời gian lớn hơn khoảng thời gian tối đa cho phép.

Kết luận

Khi sử dụng Alluxio, điều quan trọng là giữ không gian tên Alluxio và không gian tên UFS nhất quán. Bài viết này mô tả hai cách để thực hiện đồng bộ hóa này. Việc đồng bộ hóa có thể xảy ra khi có một yêu cầu gửi đến Alluxio (theo yêu cầu) hoặc xảy ra trong hoạt động nền (Active UFS Sync), mỗi ứng dụng có những ưu điểm riêng. Đồng bộ hóa siêu dữ liệu UFS theo yêu cầu chỉ xảy ra khi máy khách gọi Alluxio nên nó cho phép quản trị viên kiểm soát chính xác khi nào đồng bộ hóa xảy ra. Active UFS Sync diễn ra trong hoạt động nền, do vậy, nó yêu cầu cấp độ quản lý và cấu hình tối thiểu. Quản trị viên có thể lực chọn chiến lược phù hợp dựa trên nhu cầu của tổ chức.

Nguyễn Thùy Linh - Lâm Thị Nguyệt