Trong bài viết trước đó, chúng ta đã được giới thiệu với các kiến thức về BigData, công nghệ Hadoop, và MapReduce. Bài viết tiếp theo này sẽ mở rộng thêm về một phần quan trọng khác của Hadoop, đó là HDFS, đồng thời liên kết với những thông tin đã được chia sẻ trước đó.
Hadoop Distributed File System (HDFS) là gì? HDFS sở hữu những đặc điểm và cấu trúc nào? Tất cả những điều này sẽ được chúng ta khám phá trong bài viết này. Chúng ta sẽ tìm hiểu về định nghĩa chi tiết của HDFS, những đặc tính độc đáo mà nó mang lại, và cách mà nó tổ chức và lưu trữ dữ liệu. Bài viết sẽ đi sâu vào các khái niệm quan trọng của HDFS, giúp độc giả hiểu rõ hơn về cách hệ thống này hoạt động.
Chắc chắn rằng thông tin trong bài viết sẽ mang lại những hiểu biết mới mẻ và giá trị cho độc giả. Hãy tiếp tục theo dõi để khám phá thêm về Hadoop Distributed File System và cách nó đóng vai trò quan trọng trong việc quản lý và xử lý dữ liệu lớn.
Định nghĩa HDFS là gì?
Khái niệm HDFS là gì?
Thường, HDFS được triển khai trên phần cứng với chi phí hợp lý, bởi vì máy chủ có thể dễ dàng gặp phải các lỗi phần cứng. Điều này làm nảy sinh việc lập trình và xây dựng HDFS với mục tiêu chịu lỗi cao, nhằm giảm nguy cơ và hạn chế quá trình xảy ra lỗi.
HDFS chia nhỏ dữ liệu lớn thành các phần nhỏ hơn và phân tán chúng trên nhiều node khác nhau. Mỗi mảnh dữ liệu nhỏ được sao chép trên nhiều node, giúp hệ thống tự động chuyển sang sử dụng dữ liệu từ một node khác khi có lỗi xảy ra trên một node nào đó. Điều này đặc biệt quan trọng trong việc giữ cho hệ thống hoạt động mạnh mẽ và đồng thời giảm thiểu ảnh hưởng của lỗi.
Ưu điểm nổi bật của HDFS là gì?
- HDFS cho phép dữ liệu có thể phân tán: Điều này có thể hiểu như sau: Nếu như có một cụm Hadoop mà trong đó bao gồm 20 máy tính thì bạn chỉ cần đưa một file dữ liệu vào HDFS. Khi đó, thì file sẽ tự động được chia nhỏ thành nhiều phần rồi được lưu trữ ở 20 máy tính đó.
- HDFS cho phép tính toán và phân tán song song: Thay vì chỉ sử dụng một máy để xử lý công việc, thì với HDFS thì bạn có thể để các máy hoạt động song song để xử lý chung một công việc để tiết kiệm thời gian.
- HDFS cho phép nhân bản các file: Đặc điểm này sẽ giúp bạn đề phòng được các trường hợp một máy tính trong cụm Hadoop phát sinh sự cố thì dữ liệu sẽ được backup lại mà không bị mất.
- HDFS có thể mở rộng theo chiều dọc: Lúc này, bạn sẽ có nhiệm vụ nâng cấp cho các hệ thống bằng cách tăng cấu hình cho máy tính lên. Tính năng này còn được gọi là Scale Up hay Vertical scaling.
HDFS có những ưu điểm gì?
- HDFS sở hữu khả năng mở rộng hệ thống theo chiều ngang: Đặc điểm này có nghĩa rằng, bạn không cần phải nâng cấp cho phần cứng mà chỉ cần mua thêm một chiếc máy tính mới để chia sẻ với chiếc máy hiện tại là được.
HDFS có khả năng giải quyết những vấn đề nào?
Quá trình phân chia đều thực hiện trên hệ thống máy tính. Điều này sẽ giúp cho các Developer có thể quản lý dễ dàng hơn, giúp cho hệ thống giảm thiểu được thời gian truy xuất dữ liệu và đơn giản hóa quá trình quản lý cho tập tin.
Kiến trúc của HDFS là gì?
Bài viết dưới đây sẽ giải thích về kiến trúc của HDFS, đồng thời mô tả quá trình hoạt động của hệ thống này để mang lại hiểu biết sâu sắc hơn về cấu trúc và tác động của nó.
Hệ thống Hadoop Distributed File System (HDFS) được xây dựng theo mô hình master/slave, trong đó mỗi HDFS Cluster bao gồm một NameNode duy nhất. NameNode đóng vai trò là master server, đảm nhiệm quản lý toàn bộ hệ thống tập tin và kiểm soát các truy cập đến các tập tin trong hệ thống.
NameNode chủ yếu tập trung vào việc duy trì metadata của hệ thống, bao gồm thông tin về cấu trúc thư mục, tên tập tin và vị trí của các khối dữ liệu trên các DataNodes. Nó điều hướng các yêu cầu đọc và ghi từ các client và quản lý các hoạt động tạo, xóa, hay di chuyển tập tin.
Bổ sung vào NameNode, hệ thống có nhiều DataNodes. Mỗi DataNode là một máy chủ dữ liệu và chịu trách nhiệm lưu trữ các phần dữ liệu thực tế. Điều quan trọng là mỗi DataNode chỉ phục vụ cho một máy chủ dữ liệu, tăng tính đồng nhất và đảm bảo sự an toàn của dữ liệu.
Trong quá trình hoạt động của HDFS, một tập tin lớn sẽ được chia thành các khối nhỏ hơn, và mỗi khối sẽ được lưu trữ trên một hoặc nhiều DataNodes khác nhau. Điều này giúp tăng cường đồng thời hoá và khả năng chịu lỗi của hệ thống, vì mỗi DataNode chỉ cần duy trì một phần nhỏ của dữ liệu tổng thể.
Tóm lại, kiến trúc master/slave của HDFS cùng với sự phân tán của dữ liệu trên các DataNodes tạo nên một hệ thống mạnh mẽ, linh hoạt và có khả năng mở rộ để xử lý lượng dữ liệu lớn.
Kiến trúc của HDFS
NameNode có tác vụ chính là đóng, mở và đổi tên cho các tập tin, thư mục. Ngoài ra, nó còn điều chỉnh cho các truy cập đến hệ thống tập tin. Trong khi đó, DataNode có tác vụ là ghi, đọc vào hệ thống tập tin; nó còn có nhiệm vụ tạo, xóa, nhân rộng các dữ liệu dựa trên chỉ dẫn của NameNode.
Lưu ý: NameNode và DataNode đều là phần mềm được thiết kế nhằm mục đích chạy trên máy chủ và chúng được viết bằng Java.
Quá trình hoạt động của NameNode và DataNode như sau:
- NameNode: Có trách nhiệm điều phối cho các thao tác truy cập của client với hệ thống HDFS. Bởi vì các DataNode là nơi lưu trữ thật sự các block của các file trên HDFS nên chúng là nơi đáp ứng các truy cập này. NameNode sẽ thực hiện nhiệm vụ của nó thông qua daemon tên namemode chạy trên port 8021.
- DataNode: DataNode server sẽ chạy một daemon datanode trên port 8022, theo định kỳ thì mỗi DataNode sẽ có nhiệm vụ báo cáo cho Namenode biết được danh sách tất cả các block mà nó đang lưu trữ. Để NameNode có thể dựa vào nó để cập nhật lại các metadata trong nó.
Sau mỗi lần cập nhật, metadata trên NameNode sẽ được đồng bộ hóa với trạng thái thống nhất của dữ liệu trên các DataNode. Toàn bộ trạng thái metadata trên NameNode trong hệ thống sẽ được xem là checkpoint.
Mỗi metadata trong trạng thái checkpoint đều được lưu trữ để sao lưu metadata, nhằm khôi phục lại NameNode trong trường hợp xảy ra lỗi.
Trong quá trình đọc file trên HDFS, khi máy con client gửi yêu cầu đọc đến NameNode, NameNode sẽ kiểm tra sự tồn tại, tính toàn vẹn, và không bị nhiễm virus của file được yêu cầu. Nếu không có vấn đề nào, NameNode sẽ trả về danh sách các Block của file cùng với địa chỉ của các DataNode.
Sau đó, hệ thống thiết lập kết nối với các DataNode và sử dụng giao thức RPC để truy xuất dữ liệu cần đọc. Sau khi đọc xong, kết nối với DataNode sẽ được đóng lại.
Trong quá trình đọc, client sẽ liên tục đọc các block của file cho đến khi đọc đến block cuối cùng. Sau đó, lập trình viên sử dụng tập API của Hadoop để tương tác trực tiếp với HDFS. Các tập API này được thiết kế để ẩn đi sự phức tạp của việc kết nối với NameNode và DataNode, giúp người lập trình dễ dàng nhận được dữ liệu từ HDFS.
HDFS là một hệ thống quan trọng trong Hadoop
Quy trình ghi file trên HDFS tương tự như quá trình đọc file, tuy nhiên có một số bước khác biệt. Trong quá trình này, các client sẽ gửi một file entry đến NameNode, đại diện cho một tệp chưa có block nào bên trong. Các client sau đó tiến hành phân chia tệp dữ liệu thành các block, và mỗi block sẽ được đóng gói thành packet.
Sau đó, client sẽ gửi packet đến DataNode đầu tiên. Khi DataNode này lưu trữ xong, nó sẽ chuyển tiếp packet cho DataNode tiếp theo để sao lưu. Quá trình này lặp lại cho đến khi tất cả các DataNode cuối cùng đều nhận và sao lưu packet. Sau khi quá trình này hoàn tất, DataNode cuối cùng sẽ gửi thông báo cho client, xác nhận rằng dữ liệu đã được lưu trữ thành công.
Sau đó, client thực hiện hành động thông báo cho NameNode và cập nhật toàn bộ danh sách các block mà tệp đã ghi.