Tiếp theo loạt bài viết về Hadoop, trong bài viết này mình sẽ cùng các bạn tìm hiểu kĩ hơn về HDFS, một cấu trúc lưu trữ file mà theo mình là rất hay và có tính ứng dụng cao trong hệ thống phân tán. Chúng ta sẽ cùng tìm hiểu theo những thông tin dưới đây. 1, HDFS là gì ?HDFS là viết tắt của Hadoop Distributed Files System được hiểu nôm na là hệ thống lưu trữ file phân tán của Hadoop. 2, Kiến trúc của HDFS ?Đối với 1 client bên ngoài, HDFS chỉ như một hệ thống file có cấu trúc thứ bậc truyền thống. File có thể được tạo, xóa, di chuyển, đổi tên… Nhưng để đạt được các mục tiêu của mình, HDFS sử dụng kiến trúc master/slave được xây dựng từ các node đặc biệt sau:
File lưu trữ trong HDFS được chia thành các block (khối), mỗi block được nhân bản ra nhiều DataNode khác nhau. Kích thước của block (mặc định là 64MB) và số lượng nhân bản được xác định bởi client khi file được tạo ra. Mọi thao tác với file được điều khiển bỏi NameNode, mọi giao tiếp HDFS giữ các Node đều thông qua giao thức TCP/IP. 3, NameNodeNameNode thực chất là một tiến trình chạy trên một máy chủ riêng biệt trong một cụm máy HDFS. Nó có trách nhiệm quản lí tên miền không gian hệ thống tập tin và kiểm soát truy cập của client bên ngoài. NameNode thiết lập bản đồ các khối tập tin được nhân bản trên các DataNode, thông thường với hệ thống nhân bản là 3, một nhân bản sẽ được lưu trên một Node khác nhưng cùng rack và nhân bản còn lại sẽ được lưu trên một Node khác trên rack khác. Các thao tác I/O thực chất không đi qua NameNode và chỉ có các siêu dữ liệu chỉ ra thông tin của file và các block của nó trên DataNode. Khi Client gửi yêu cầu tạo file, NameNode phản hồi với IP của DataNode sẽ nhận khối block, và NameNode sẽ thông báo cho các DataNode xác định khác sẽ nhận nhân bản của block đó. NameNode lưu mọi thông tin về hệ thống tệp tin trong file FsImage. Tệp tin này cùng với bản ghi về tất cả các thao tác trong hệ thống (hay còn gọi là EditLog) được lưu trong hệ thống file của hệ điều hành mà NameNode được cài đặt. File FsImage và EditLog cũng được nhân bản để đề phòng trường hợp xảy ra lỗi trên NameNode. 4, DataNode.DataNode cũng là một tiến trình cài đặt trên một máy riêng biệt trong cụm máy HDFS (nếu chỉ có 1 máy thì DataNode và NameNode cùng được cài trên máy đó). Một cụm máy Hadoop có một NameNode duy nhất nhưng có thể có hàng ngàn DataNode. Các DataNode thường được sắp xếp vào rack và kết nối thông qua switch. Hadoop giả định rằng băng thông trong nội bộ các rack sẽ lớn hơn băng thông giữa các rack với nhau (kiểu trong cùng rack thì tương tác với nhau nhanh hơn). DataNode đáp ứng yêu cầu đọc ghi dữ liệu từ client và các lệnh tạo, xóa, nhân bản Block từ NameNode. NameNode thường xuyên gửi 1 bản tin kiểm tra định kỳ (heartbeat message) đến các DataNode để xác định DataNode còn sử dụng được không. Nếu DataNode không có phản hồi, NameNode sẽ tiến hành khôi phục nhân bản các block ở DataNode đó trên các DataNode khác còn hoạt động. 5, Nhân bản dữ liệu.HDFS được thiết kế để lưu trữ các file cực lớn một cách tin cậy trên nhiều máy trong một cụm máy chủ lớn. Nó chia file thành một chuỗi các block, tất cả các block có kích thước bằng nhau trừ block cuối cùng. Các block này được nhân bản để chống lỗi theo hệ thóng nhân bản được cấu hình. Các file trong HDFS được ghi một lần duy nhất và không thể thay đổi. NameNode thực hiện mọi thao tác đều dựa vào các nhân bản của block. Nó định kỳ nhận heartbeat từ các DataNode để xác định tính sẵn sàng của DataNode và báo cáo BlockReport về các block được lưu trên DataNode đó. a, Phương thức nhân bản.Phương pháp nhân bản của HDFS dựa trên kĩ thuật Hadoop Rack Awareness. Trong hầu hết các trường hợp với hệ số nhân bản là 3, HDFS đặt một nhân bản ở một DataNode khác cùng rack, và một ở một DataNode khác khác rack. Tỉ lệ toàn bộ 1 rack bị fail thấp hơn nhiều so với 1 Node bị fail. Khi DataNode bị fail, NameNode sẽ khôi phục các block bị mất cân bằng cách nhân bản trên các DataNodes trên cùng rack để có tốc độ cao nhất (băng thông lớn hơn). Nếu toàn bộ rack bị fail thì vẫn có nhân bản của block trên các rack khác. b, Lựa chọn nhân bảnĐể giảm thiểu việc tiêu thụ băng thông và độ trễ đọc dữ liệu, HDFS cố gắng tìm nhân bản mà gần nhất với NameNode. Nếu tồn tại một nhân bản trên cùng rack với NamdeNode yêu cầu, nhân bản đó sẽ được ưu tiên chọn để thỏa mãn yêu cầu. Nếu HDFS trải rộng trên Data Center, những nhân bản trên cùng Data Center sẽ được ưu tiên hơn các nhân bản ở Data Center khác. 6, Khả năng chống lỗi.Mục tiêu chính của HDFS là lưu trữ dữ liệu một cách tin cậy ngay khi có lỗi xảy ra. Có 3 loại lỗi thường gặp: NameNode bị lỗi, DataNode bị lỗi và phân mảnh mạng.
7, Thu hồi vùng nhớ
Đến đây là kết thúc những chia sẻ của mình về HDFS, trong phần tiếp theo của loại bài này, mình và các bạn sẽ cùng tìm hiểu về thuật toán xương sống của Hadoop là Map-Reduce. Hãy đón chờ ở part3 nhé. |