HDFS là gì? Tổng quan về hệ thống Hadoop Distributed File System

Nguyễn Đình Tiến
Nguyễn Đình Tiến

7/9/20258 phút đọc

981
0
HDFS là gì? Tổng quan về hệ thống Hadoop Distributed File System

HADOOP DISTRIBUTES FILE SYSTEM

(HDFS)

I. Khái niệm

    HDFS là từ viết tắt của Hadoop Distributes File System, là một hệ thống lưu trữ dữ liệu phân tán được thiết kế chạy trên phần cứng thông thường để lưu trữ các tệp dữ liệu có kích thước lớn trên nhiều nút máy tính trong một mạng Hadoop. HDFS cũng tương tự như những hệ thống file phân tán khác. Tuy nhiên, sự khác biệt ở đây là HDFS có khả năng chịu lỗi cao (fault-tolerant) và được thiết kế để deploy trên các phần cứng rẻ tiền. HDFS cũng cung cấp khả năng truy cập high throughput từ ứng dụng và thích hợp với các ứng dụng có tập dữ liệu lớn. HDFS là một phần của nền tảng Hadoop và là một phần quan trọng của việc xử lý dữ liệu lớn.

II. Kiến trúc của HDFS

      HDFS được thiết kế để chịu được sự cố và có thể xử lý các tệp dữ liệu có kích thước rất lớn. HDFS lưu trữ dữ liệu dưới dạng các khối, mỗi khối có kích thước mặc định là 128MB, nhưng có thể tùy chỉnh kích thước theo nhu cầu sử dụng. Dữ liệu được phân tán trên nhiều nút máy tính trong một mạng Hadoop, giúp tăng tốc độ truy xuất dữ liệu và giảm thời gian xử lý.

 

      HDFS sử dụng kiến trúc Master/Slave, bao gồm hai thành phần chính là NameNode và DataNode. NameNode là trung tâm điều khiển của HDFS và lưu trữ thông tin về vị trí và trạng thái các khối dữ liệu. DataNode là các nút lưu trữ dữ liệu thực sự và phân tán dữ liệu trên các nút khác nhau.

       Một cụm HDFS bao gồm hai loại nút (Node) hoạt động theo mô hình nút chủ (Master) - nút thợ (Worker):

  • Một cụm HDFS có 1 NameNode (Master).
  • Một cụm HDFS có một hoặc nhiều các DataNode (Worker).

       NameNode quản lý các Namespace Filesystem. Nó quản lý một Filesystem Tree và các metadata cho tất cả file và thư mục trên tree. Thông tin này được lưu trữ trên đĩa vật lý dưới dạng không gian tên ảnh và nhật ký (edit log). NameNode còn quản lý thông tin các khối (block) của một tập tin được lưu trên những DataNodes nào.

       HDFS đưa ra một không gian tên cho phép dữ liệu được lưu trên tập tin. Trong đó một tập tin được chia ra thanh một hay nhiều khối (block) và các block được lưu trên một tập các DataNode. NameNode thực thi các hoạt động trên hệ thống quản trị không gian tên tập tin như mở, đóng đổi tên tập tin và thư mục. Các DataNode có tính năng xử lý các yêu cầu về đọc ghi từ máy khách. Ngoài ra các DataNode còn thực hiện việc tạo, xóa, lặp các khối theo sự hướng dẫn của DataNode 

III. Đọc và ghi dữ liệu trên HDFS

a. Đọc dữ liệu trên HDFS

    Với khối dữ liệu (block) ID và địa chỉ IP đích máy chủ (host) của Datanode, máy khách (client) có thể liên lạc với các DataNode còn lại để đọc các khối (block) cần thiết. Quá trình này lặp lại cho đến khi tất cả các khối trong file được đọc và máy khách đóng luồng đọc file trực tuyến.

 

b. Ghi dữ liệu trên HDFS

    Việc ghi dữ liệu sẽ phức tạp hơn việc đọc dữ liệu đối với hệ thống HDFS. Trong bên dưới, ban đầu, máy khách gửi yêu cầu đến tạo một file bằng việc sử dụng Hadoop FileSystem APIs. Một yêu cầu được gửi đến NameNode để tạo tập tin metadata nếu user có quyền tạo. Thông tin metadata cho tập tin mới đã được tạo, tuy nhiên lúc này chưa có một block nào liên kết với tập tin này. Một tiến trình trả về kết quả được gửi lại cho máy khách xác nhận yêu cầu tạo file đã hoàn thành và bắt dầu có thể ghi dữ liệu. Ở mức API, một đối tượng JAVA là stream sẽ trả về. Dữ liệu của máy khách sẽ ghi vào luồng này và được chia ra thành các gói, lưu trong queue của bộ nhớ. Một tiến trình riêng biệt sẽ liên hệ với NameNode để yêu câu một tập DataNode phục vụ cho việc sao lưu dữ liệu vào các khối (block). Máy khách sẽ tạo ra một kết nối trực tiếp đến DataNode đầu tiên trong danh sách. DataNode đầu tiên đó sẽ kết nối lần lượt đến các DataNode khác. Các gói dữ liệu được ghi dần vào các DataNode. Mỗi DataNode sẽ phản hồi dữ liệu ghi thành công hay không. Quá trình này kết thúc khi toàn bộ các gói dữ liệu đã được lưu tại các khối (block) của DataNode.

     Tuy nhiên, HDFS cũng có một số hạn chế. Vì mỗi tệp dữ liệu được chia thành các khối dữ liệu và lưu trữ trên các nút khác nhau, việc truy xuất dữ liệu trở nên chậm hơn so với việc truy xuất dữ trên đĩa cục bộ. Hơn nữa, HDFS không phù hợp cho các tác vụ yêu cầu truy xuất một phần của tệp dữ liệu, vì việc truy xuất phải được thực hiện trên toàn bộ khối dữ liệu.

 

IV. Một số câu lệnh cơ bản của HDFS

  • Liệt kê danh sách file HDFS 

hdfs dfs -ls

  • Tạo thư mục trong HDFS

hdfs dfs -mkdir <tên thư mục>

  • Sao chép một tệp tin

hdfs dfs -copyFromLocal <tên tện tin>

  • Xóa một tệp tin/thư mục

Hdfs dfs -rm <đường dẫn tệp tin>

 

V. Lợi ích của việc sử dụng HDFS

  • Tiết kiệm chi phí cho việc lưu trữ dữ liệu lớn: có thể lưu trữ dữ liệu megabytes đến petabytes, ở dạng có cấu trúc hay không có cấu trúc
  • Dữ liệu có độ tin cậy cao và có khả năng khắc phục lỗi: Dữ liệu lưu trữ trong HDFS được nhân bản thành nhiều phiên bản và được lưu tại các DataNode khác nhau, khi có 1 máy bị lỗi thì vẫn còn dữ liệu được lưu tại DataNode khác
  • Tính chính xác cao: Dữ liệu lưu trữ trong HDFS thường xuyên được kiểm tra bằng mã checksum được tính trong quá trình ghi file, nếu có lỗi xảy ra sẽ được khôi phục bằng các bản sao
  • Khả năng mở rộng: có thể tăng hàng trăm node trong một cluster
  • Có throughput cao: tốc độ xử lý truy nhập dữ liệu cao
  • Data Locality: xử lý dữ liệu tại chỗ