2. DistributedFileSystem yêu cầu tạo file ở NameNode.NameNode kiểm tra quyền của client
và kiểm tra file mới có tồn tại hay không…
3. DistributedFileSystem return FSDataOutPutStream cho client để ghi dữ liệu.
FSDataOutputStream chứa DFSOutputStream, nó dùng để xử lý tương tác với NameNode
và DataNode. Khi client ghi dữ liệu, DFSOutputStream chia dữ liệu thành các packet và đẩy
nó vào hàng đợi DataQueue. DataStreamer sẽ nói với NameNode để phân bổ các block vào
các datanode để lưu trữ các bản sao.
4. Các DataNode tạo thành
pipeline, số datanode bằng số bản sao của file. DataStream gửi
packet tới DataNode đầu tiên
trong pipeline, datanode này sẽ chuyển tiếp packet lần lượt tới
các Datanode trong pipeline.
5. DFSOutputStream có Ack Queue để duy trì các packet chưa được xác nhận bởi các
DataNode. Packet ra khỏi ackqueue khi nhận được xác nhận từ tất cả các DataNode.
6. Client gọi close() để kết thúc ghi dữ liệu, các packet còn lại được đẩy vào pipeline.
7. Sau khi toàn bộ các packet được ghi vào các DataNode, thông báo hoàn thành ghi file.
Đó là toàn bộ những gì diễn ra ở đằng sau, còn đây là ví dụ một trong những lênh thao tác ghi trên
hdfs
hdfs dfs -put
Trong quá trình thực tế hầu như sẽ không làm việc trực tiếp với hệ thống file system của
hadoop(HDFS) bằng câu lệnh, mà ta thường đọc,
ghi qua spark, ví dụ
1 dataFrame
.write
.save
("
"
)
Read data
1. Để mở file, client gọi phương thức open ở FileSystemObject.
2.DistributedFileSystem gọi Name để lấy vị trí của blocks của file. NameNode trả về địa chỉ của
các DataNode chứa bản sao của block đó.