HDFS là gì? Kiến trúc của HDFS

HDFS là gì?

HDFS là viết tắt của Hadoop Distributed File System và nó là 1 mạng lưới hệ thống tàng trữ chính được dùng bởi Hadoop. Nó phân phối truy vấn hiệu suất cao đến tài liệu trên những cụm Hadoop. Nó thường ợc tiến hành trên những phần cứng ngân sách thấp. Các sever ngân sách thấp này rất dễ xảy ra lỗi phần cứng. Vì nguyên do này mà HDFS được thiết kế xây dựng để có năng lực chịu lỗi cao. Tốc độ truyền tài liệu giữa những nodes trong HDFS là rất cao, dẫn đến giảm thiểu rủi ro tiềm ẩn lỗi .
HDFS tạo những mảnh nhỏ hơn của tài liệu lớn và phân tán nó trên những nodes khác nhau. Nó cũng sao chép mỗi miếng tài liệu nhỏ hơn nhiều lần trên nhiều nodes khác nhau. Do đó khi bất kể node nào có tài liệu lỗi, mạng lưới hệ thống tự động hóa dùng tài liệu từ 1 node khác và liên tục giải quyết và xử lý. Đây là tính năng quan trọng của HDFS .

Kiến trúc của HDFS

Kiến trúc của HDFS là master / slave. Một HDFS cluster luôn gồm 1 NameNode. NameNode này là 1 master server và nó quản trị mạng lưới hệ thống tập tin cũng như kiểm soát và điều chỉnh truy vấn đến những tập tin khác nhau. Bổ sung cho NameNode có nhiều DataNodes. Luôn có 1 DataNode cho mỗi sever tài liệu. Trong HDFS, 1 tập tin lớn được chia thành 1 hoặc nhiều khối và những khối này được lưu trong 1 tập những DataNodes .

Tác vụ chính của NameNode là mở, đóng và đổi tên các tập tin, và thư mục và điều chỉnh truy cập đến hệ thống tập tin, trong khi tác vụ chính của DataNode là đọc và ghi vào hệ thống tập tin. DataNode cũng làm nhiệm vụ tạo, xóa, hoặc nhân rộng dữ liệu dựa trên chỉ dẫn từ NameNode.

Trong thực tiễn, NameNode và DataNode là ứng dụng được phong cách thiết kế để chạy trên sever, được viết bằng Java

hdfs_nguyen cong trinh

Namenode sẽ chịu trách nhiệm điều phối các thao tác truy cập (đọc/ghi dữ liệu) của client lên hệ thống HDFS. Và tất nhiên, do các DataNode là nơi thật sự lưu trữ các block của các file trên HDFS, nên chúng sẽ là nơi trực tiếp đáp ứng các thao tác truy cập này. Chẳng hạn như khi client của hệ thống muốn đọc một file trên hệ thống HDFS, client này sẽ thực hiện một request (thông qua RPC) đến Namenode để lấy các metadata của file cần đọc. Từ metadata này nó sẽ biết được danh sách các block của file và vị trí của các DataNode chứa các bản sao của từng block. Client sẽ truy cập vào các DataNode để thực hiện các request đọc các block.
Namenode thực hiện nhiệm vụ của nó thông qua một daemon tên namenode chạy trên port 8021. Mỗi DataNode server sẽ chạy một daemon datanode trên port 8022. Định kỳ, mỗi DataNode sẽ báo cáo cho NameNode biết về danh sách tất cả các block mà nó đang lưu trữ, NameNode sẽ dựa vào những thông tin này để cập nhật lại các metadata trong nó. Cứ sau mỗi lần cập nhật lại như vậy, metadata trên NameNode sẽ đạt được tình trạng thống nhất với dữ liệu trên các DataNode. Toàn bộ trạng thái của metadata khi đang ở tình trạng thống nhất này được gọi là một checkpoint. Metadata ở trạng thái checkpoint sẽ được dùng để nhân bản metadata dùng cho mục đích phục hồi lại NameNode nếu NameNode bị lỗi.

Đọc file trên HDFS

Đầu tiên, client sẽ mở file cần đọc bằng cách gửi yêu cầu đọc file đến NameNode. Sau đó NameNode sẽ thực hiện một số kiểm tra xem file được yêu cầu đọc có tồn tại không, hoặc file cần đọc có đang ở trạng thái “khoẻ mạnh” hay không. Nếu mọi thứ đều ổn, NameNode sẽ gửi danh sách các block (đại diện bởi Block ID) của file cùng với địa chỉ các DataNode chứa các bản sao của block này.
Tiếp theo, client sẽ mở các kết nối tới DataNode, thực hiện một RPC để yêu cầu nhận block cần đọc và đóng kết nối với DataNode. Lưu ý là với mỗi block ta có thể có nhiều DataNode lưu trữ các bản sao của block đó. Client sẽ chỉ đọc bản sao của block từ DataNode “gần” nhất.
Client sẽ thực hiện việc đọc các block lặp đi lăp lại cho đến khi block cuối cùng của file được đọc xong. Quá trình client đọc dữ liệu từ HDFS sẽ transparent với người dùng hoặc chương trình ứng dụng client, người dùng sẽ dùng một tập API của Hadoop để tương tác với HDFS, các API này che giấu đi quá trình liên lạc với NameNode và kết nối các DataNode để nhận dữ liệu.

Ghi file trên HDFS

Đầu tiên, client sẽ gửi yêu cầu đến NameNode tạo một file entry lên File System Namespace. File mới được tạo sẽ rỗng, tức chưa có một block nào. Sau đó, NameNode sẽ quyết định danh sách các DataNode sẽ chứa các bản sao của file cần gì và gửi lại cho client Client sẽ chia file cần gì ra thành các block, và với mỗi block client sẽ đóng gói thành một packet. Lưu ý là mỗi block sẽ được lưu ra thành nhiều bản sao trên các DataNode khác nhau (tuỳ vào chỉ số độ nhân bản của file).
Client gửi packet cho DataNode thứ nhất, DataNode thứ nhất sau khi nhận được packet sẽ tiến hành lưu lại bản sao thứ nhất của block. Tiếp theo DataNode thứ nhất sẽ gửi packet này cho DataNode thứ hai để lưu ra bản sao thứ hai của block. Tương tự
DataNode thứ hai sẽ gửi packet cho DataNode thứ ba. Cứ như vậy, các DataNode cũng lưu các bản sao của một block sẽ hình thành một ống dẫn dữ liệu data pipe.
Sau khi DataNode cuối cùng nhận thành được packet, nó sẽ gửi lại cho DataNode thứ hai một gói xác nhận rằng đã lưu thành công. Và gói thứ hai lại gửi gói xác nhận tình trạng thành công của hai DataNode về DataNode thứ nhất.
Client sẽ nhận được các báo cáo xác nhận từ DataNode thứ nhất cho tình trạng thành công của tất cả DataNode trên data pipe.
Nếu có bất kỳ một DataNode nào bị lỗi trong quá trình ghi dữ liệu, client sẽ tiến hành xác nhận lại các DataNode đã lưu thành công bản sao của block và thực hiện một hành vi ghi lại block lên trên DataNode bị lỗi.
Sau khi tất cả các block của file đều đã đươc ghi lên các DataNode, client sẽ thực hiên một thông điệp báo cho NameNode nhằm cập nhật lại danh sách các block của file vừa tạo. Thông tin Mapping từ Block ID sang danh sách các DataNode lưu trữ sẽ được NameNode tự động cập nhật bằng các định kỳ các DataNode sẽ gửi báo cáo cho NameNode danh sách các block mà nó quản lý.

++facebook của tôi : http://bit.ly/2gbTWGk
+++blog : http://bit.ly/2iEwW3Y
++ pinterest của tôi : http://bit.ly/2yXVriG
+++kênh học tập : http://bit.ly/2zM0S1v
++ instagram của tôi : http://bit.ly/2iFqGsW
+++ Tumblr : http://bit.ly/2zUrIp3
++ reddit : http://bit.ly/2zKuA7h
+++ google+ : http://bit.ly/2iCRIkz
Hãy sub(đăng ký ) kênh để ủng hộ tác giả nhé !

Chia sẻ:

Thích bài này:

Thích

Đang tải…