3. Tình hình thực hiện chế độ báo cáo, kiểm trac ủa đề tài: Số
4.1.1.2. Quá trình ghi dữ liệu
• Client chia một file lớn thành các block[5]
• Với mỗi block, Client hỏi NameNode nên ghi vào đâu? NameNode sẽ tìm ra 3 DataNode để lưu 3 bản sao của 1 block. NameNode gửi cho client danh sách địa chỉ của 3 DataNode được sắp xếp tăng dần theo khoảng cách của DataNode với Client
• Client sẽ gửi dữ liệu kèm theo danh sách đó tới DataNode đầu tiên (tức điểm gần nhất với client) trong danh sách. Trong khi nhận dữ liệu DataNode đầu tiên tiếp tục forward dữ liệu cho DataNode kế tiếp. DataNode kế tiếp lặp lại hành động của DataNode đầu tiên, chuyển dữ liệu cho DataNode cuối cùng. DataNode cuối cùng biết mình là cuối cùng trong danh sách nên chỉ lưu dữ liệu mà không forward cho node khác
• Khi tất cả dữ liệu của 1 block được lưu trên đĩa cứng của tất cả các DataNode, các Datanode gửi thông báo hoàn thành tới NameNode
• Tiếp tục quá trình ghi với các block còn lại. Sau khi hoàn tất việc ghi các các block của file, client gửi yêu đóng file tới NameNode
• Kết thúc việc ghi file NameNode có địa chỉ của tất cả các Datanode chứa dữ liệu, các DataNode lưu trữ các block dữ liệu
54
Các dạng lỗi thường gặp:
• NameNode bị hỏng: toàn bộ cụm sẽ hỏng • DataNode bị hỏng
• Lỗi đường truyền
• Gói tin gửi đi trên đường truyền bị lỗi
Nhận biết lỗi khi ghi dữ liệu:
Nhận biết DataNode bị lỗi: Cứ mỗi 3 giây tất cả các datanode lại gửi 1 tín hiệu gọi là nhịp tim heartbeat tới NameNode để báo hiệu rằng Datanode vẫn còn sống. Nếu NameNode không nhận được thông báo trong vòng 10 phút có nghĩa là DataNode đã chết (trên thực tế có thể do DataNode chết hoặc đường truyền mạng bị lỗi nhưng NameNode vẫn coi cả 2 trường hợp là như nhau)
Nhận biết lỗi đường truyền: Khi dữ liệu được gửi, máy nhận sẽ trả lời một thông báo nhận ACK. Nếu không nhận được ACK sau một vài lần thử lại thì bên gửi sẽ hiểu rằng máy nhận bị chết hoặc đường truyền mạng bị lỗi
• Nhận biết lỗi gói tin: Checksum được gửi đi cùng với việc truyền dữ liệu. Bên nhận ngoài việc lưu dữ liệu còn lưu cả checksum
• Nhận biết ổ cứng bị hỏng: Định kỳ tất cả các DataNode phải gửi báo cáo về các block (blockreport) mà nó lưu trữ cho NameNode. Trước khi gửi Blockreport,
55
các DataNode phải kiểm tra checksum của block đó. DataNode chỉ gửi blockreport có checksum đúng, nếu checksum không đúng nghĩa là block bị lỗi. Ví dụ: DataNode gửi 4 blockreport cho NameNode, trong khi đó NameNode biết rằng DataNode có 5 block vì thế NameNode biết rằng có 1 block ở DataNode đó đã bị lỗi
Hình 6. Nhận biết DataNode bị hỏng
56