

HDFS là một trong những thành phần quan trọng của Apache Hadoop, được sử dụng để lưu trữ lượng dữ liệu lớn trên nhiều máy tính thay vì phụ thuộc vào một máy chủ duy nhất. Nhờ khả năng phân tán dữ liệu, sao chép và chịu lỗi, HDFS phù hợp với các hệ thống Big Data cần xử lý tập dữ liệu có quy mô lớn.
HDFS (Hadoop Distributed File System) là hệ thống tệp phân tán của Apache Hadoop. HDFS cho phép một file lớn được chia thành nhiều khối dữ liệu, sau đó phân phối các khối này đến nhiều máy chủ khác nhau trong một cluster.
Thay vì lưu toàn bộ dữ liệu trên một ổ đĩa hoặc máy chủ duy nhất, HDFS sử dụng nhiều node để tạo thành một hệ thống lưu trữ chung.
HDFS được thiết kế với một số mục tiêu chính:
HDFS đặc biệt phù hợp với các workload đọc hoặc xử lý tuần tự lượng dữ liệu lớn. Ngược lại, đây không phải hệ thống được thiết kế cho các tác vụ yêu cầu truy cập ngẫu nhiên với độ trễ cực thấp.

Một máy chủ luôn có giới hạn về dung lượng ổ đĩa, khả năng xử lý và hiệu suất I/O. Khi lượng dữ liệu tăng từ vài TB lên hàng trăm TB hoặc PB, việc tiếp tục mở rộng một máy chủ trở nên khó khăn và tốn kém.
HDFS giải quyết vấn đề bằng cách scale-out.
Thay vì liên tục nâng cấp một máy chủ mạnh hơn, hệ thống có thể bổ sung thêm các máy vào cluster. Dữ liệu sau đó được phân phối giữa các node.
Ví dụ, thay vì lưu một tập dữ liệu 100 TB trên một máy chủ, HDFS có thể phân phối dữ liệu đó trên hàng chục máy khác nhau.
Cách tiếp cận này vừa tăng khả năng lưu trữ vừa giảm rủi ro phụ thuộc vào một thiết bị duy nhất.
HDFS sử dụng kiến trúc director/worker với hai thành phần chính là NameNode và DataNode.
Có thể hiểu đơn giản:
Khi một file được đưa vào HDFS, file sẽ được chia thành nhiều block rồi phân phối tới các DataNode trong cluster.
NameNode đóng vai trò quản lý trung tâm của HDFS.
NameNode không trực tiếp lưu dữ liệu của người dùng mà chủ yếu quản lý metadata, bao gồm:
NameNode cũng quản lý file system namespace, tức cấu trúc file và thư mục của HDFS. Nhờ đó, hệ thống có thể thực hiện các thao tác như mở, đóng hoặc đổi tên file và thư mục.
Dữ liệu thực tế không cần đi qua NameNode mà được lưu trực tiếp trên các DataNode.
DataNode là các node chịu trách nhiệm lưu trữ dữ liệu trong HDFS.
Mỗi DataNode lưu các block trên hệ thống file cục bộ của máy và xử lý các tác vụ như:
Thông thường, một cluster có nhiều DataNode. Các DataNode có thể chạy trên phần cứng phổ thông (commodity hardware), giúp hệ thống dễ dàng mở rộng khi lượng dữ liệu tăng.
Quá trình hoạt động của HDFS có thể hình dung qua 4 bước chính.
Khi một file được đưa vào HDFS, hệ thống chia file thành nhiều block.
Theo bản gốc, kích thước block mặc định trong Hadoop 2.x là 128 MB. Việc sử dụng block lớn giúp giảm seek time và giảm lượng metadata mà hệ thống phải quản lý.
Các block sau đó được phân phối tới nhiều DataNode trong cluster.
Ví dụ, một file được chia thành 3 block:
NameNode ghi lại vị trí của các block để biết dữ liệu của từng file đang nằm ở đâu.
HDFS có thể tạo thêm các bản sao (replica) của block và lưu chúng trên những DataNode khác.
Ví dụ, Block 1 nằm trên DataNode A có thể có thêm bản sao trên DataNode B và DataNode C.
Số lượng bản sao được xác định bởi replication factor. Giá trị này có thể được thiết lập khi file được tạo và thay đổi sau đó.
Nhờ cơ chế replication, nếu một DataNode gặp sự cố, HDFS vẫn có thể sử dụng bản sao của block nằm trên DataNode khác.
Các DataNode thường xuyên gửi thông tin về trạng thái của mình cho NameNode thông qua:
Nếu một DataNode ngừng gửi tín hiệu, HDFS có thể tiếp tục hoạt động với các DataNode còn lại.

Để tăng độ tin cậy, HDFS có thể lưu các replica của block tại nhiều vị trí khác nhau trong cluster.
NameNode sử dụng Hadoop Rack Awareness để xác định DataNode thuộc rack nào. Thông tin này giúp HDFS phân phối dữ liệu giữa các rack, hạn chế nguy cơ mất dữ liệu nếu toàn bộ một rack gặp sự cố.
Cách tổ chức này cũng cho phép hệ thống tận dụng băng thông từ nhiều rack khi đọc dữ liệu.
Tóm lại, cách HDFS hoạt động có thể hiểu theo một luồng đơn giản:
File → chia thành block → phân phối tới DataNode → tạo replica → NameNode quản lý vị trí và theo dõi các DataNode.
Nhờ kiến trúc này, HDFS có thể lưu trữ dữ liệu lớn trên nhiều máy, hỗ trợ xử lý phân tán và duy trì khả năng hoạt động khi một số node gặp sự cố.
HDFS mang lại nhiều lợi ích khi triển khai hệ thống xử lý dữ liệu lớn.
HDFS cũng không phù hợp với mọi loại ứng dụng. Một số hạn chế đáng chú ý gồm:
Vì vậy, HDFS phù hợp hơn với lưu trữ và xử lý dữ liệu lớn theo batch thay vì các hệ thống giao dịch nhỏ hoặc ứng dụng yêu cầu độ trễ thấp.

Một số trường hợp sử dụng HDFS phổ biến gồm:
Ví dụ, một doanh nghiệp có thể thu thập hàng TB log mỗi ngày từ website, ứng dụng và hệ thống máy chủ. HDFS có thể được sử dụng để phân phối các log này trên nhiều node trước khi dữ liệu được xử lý bởi các công cụ phân tích.
HDFS là viết tắt của Hadoop Distributed File System, tức hệ thống tệp phân tán của Hadoop.
Không. HDFS là hệ thống lưu trữ file phân tán, không phải hệ quản trị cơ sở dữ liệu.
NameNode chủ yếu quản lý metadata và thông tin vị trí block. Nội dung dữ liệu thực tế được lưu trên các DataNode.
Không. HDFS là distributed file system thường được triển khai như một phần của Hadoop cluster. Cloud Storage hiện đại thường sử dụng kiến trúc Object Storage với cách quản lý và truy cập dữ liệu khác.
HDFS là hệ thống tệp phân tán của Apache Hadoop, cho phép chia dữ liệu thành các block và lưu chúng trên nhiều DataNode trong một cluster. Nhờ replication, khả năng scale-out và chịu lỗi, HDFS trở thành một nền tảng lưu trữ quan trọng cho nhiều hệ thống Big Data. Tuy nhiên, với các kiến trúc cloud hiện đại, doanh nghiệp cũng nên cân nhắc Object Storage khi cần lưu trữ dữ liệu quy mô lớn, linh hoạt và dễ mở rộng.
