2 Cơ bản về MapReduce
2.6 Distributed File System (Hệ thống file phân tán)
Chúng ta đã tập trung nhiều vào việc xử lý dữ liệu lớn. Nhƣng một điều không kém phần quan trọng đó là: nếu không có dữ liệu thì chúng ta không có gì để xử lý cả. Trong tính toán hiệu năng cao (HPC – High-Performance Computing) và các kiến trúc cụm truyền thống, việc lƣu trữ đƣợc xem là một thành phần tách biệt với việc tính toán. Có nhiều cách cài đặt khác nhau, trong đó có Network-Attach Storage (NAS) và Storage Area Network (SAN) là đƣợc sử dụng thƣờng xuyên. Tuy nhiên với cách cài đặt nào đi nữa thì chu trình xử lý vẫn không thay đổi: các node tính toán lấy đầu vào từ nơi lƣu trữ, nạp dữ liệu vào bộ nhớ, xử lý dữ liệu và ghi kết quả ngƣợc trở lại.
Khi kích thƣớc dữ liệu càng tăng lên thì khả năng xử lý cũng phải tăng lên. Nhƣng khi khả năng xử lý tăng thì sự liên kết giữa node lƣu trữ và node xử lý lại trở thành một trở ngại. Lúc này để có hiệu năng cao thì cần phải có đƣờng truyền mạng tốc độ cao (vd: 10 gigabit Ethernet, InfiniBand) . Đây không phải là giải pháp hiệu quả về
27 kinh tế. Một cách khác đó là bỏ qua sự tách biệt giữa lƣu trữ và tính toán. Đây chính là ý tƣởng của hệ thống file phân tán bên dƣới MapReduce. Google File System (GFS) là cài đặt hệ thống file phân tán riêng của Google và Hadoop Distributed File System (HDFS) là một cài đặt mã nguồn mở của GFS.
Ý tƣởng chính là chia dữ liệu thành các khối và sao lƣu thành các khối đó trên đĩa của các node trong cluster (mặc định là 3). Các khối dữ liệu thƣờng có kích thƣớc mặc định là 64MB. Hệ thống file phân tán sử dụng kiến trúc master-slave, master duy trì không gian tên file (metadata, cấu trúc thƣ mục, ánh xạ file đến block, vị trí các block, quyền truy cập) và slave quản lý các khối dữ liệu cụ thể. Trong GFS, master đƣợc gọi là GFS Master và slave đƣợc gọi là GFS ChunkServer. Trong Hadoop, master đƣợc gọi là NameNode và slave đƣợc gọi là DataNode. Cả 2 hệ thống này hoạt động hầu nhƣ giống nhau, tuy nhiên, trong HDFS thì không có ghi thêm vào file và hiệu suất của HDFS cũng hơi chậm hơn so với GFS.
Kiến trúc của HDFS:
Hình 7. Kiến trúc của HDFS Nhiệm vụ của NameNode:
Namespace management (Quản lý không gian tên). NameNode chịu trách nhiệm duy trì không gian tên file, bao gồm metadata, cấu trúc thƣ mục, ánh xạ file đến block, vị trí của các block và quyền truy cập. Các dữ liệu này đƣợc nạp vào bộ nhớ để truy cập cho nhanh.
28
Coordinating file operations (Định vị các phép toán trên file). Namenode điều khiển các ứng dụng khách (clients) đến datanode để đọc và cấp phát các block thích hợp để ghi. Tất cả việc trao đổi diễn ra trực tiếp giữa client và datanode. Khi một file bị xóa, HDFS không lập tức thu lại không gian lƣu trữ, thay vào đó, các block sẽ đƣợc thu gom từ từ (lazily garbage collected).
Maintain overall health of the file system. (Duy trì sự hoạt động của hệ thống file). Định kì, namenode sẽ gửi các thông điệp báo hiệu (heartbeat messages) đến datanode để bảo đảm sự toàn vẹn của hệ thống. Nếu namenode thấy một block nào có số bản sao thập hơn yêu cầu, nó sẽ điều khiển để tạo ra các bản sao mới. Cuối cùng, namenode chịu trách nhiệm cân bằng hệ thống file. Trong các phép toán thông thƣờng, một datanode có thể sẽ chứa nhiều blocks hơn những cái khác, namenode sẽ cân bằng bằng cách chuyển các blocks từ các datanode có nhiều blocks đến các datanode có ít blocks hơn.
Thiết kế có một master của GFS và HDFS là một điểm yếu dễ thấy. Vì nếu master bị lỗi thì toàn bộ hệ thống và tất các MapReduce jobs sẽ bị dừng. Yếu điểm này đƣợc giảm bớt đi một phần nhờ vào bản chất của các phép toán của hệ thống file: không có dữ liệu đi qua NameNode và toàn bộ sự giao tiếp của clients và DataNode chỉ chứa metadata. Vì thế, NameNode cũng ko hẳn là một yếu điểm, trong hầu hết trƣờng hợp đều tránh đƣợc lỗi do tràn dữ liệu. Trong thực tế, điểm chết (Single Point Of Failure - SPOF) này ko phải là một hạn chế lớn – với việc theo dõi NameNode thƣờng xuyên thì thời gian bị lỗi sẽ không quá lâu trong các triển khai thƣơng mại. Hơn nữa, Hadoop cũng đƣợc thiết kế thêm một NameNode dự phòng (Secondary NameNode) để có thể chuyển đổi nhanh chóng khi NameNode bị lỗi.
Nhiệm vụ của DataNode:
DataNode có nhiệm vụ đọc và ghi các block của HDFS vào hệ thống file cục bộ. Khi muốn đọc hay ghi một file HDFS, file này sẽ đƣợc chia nhỏ thành các block và namenode sẽ cho client biết DataNode nào đang chứa block nào. Client truy cập trực tiếp đến DataNode để lấy block dữ liệu cần xử lý. Ngoài ra, các DataNode cũng giao tiếp với nhau để sao lƣu dữ liệu.
29
Hình 8. Vai trò của NameNode và DataNode trong HDFS
Hình 8 thể hiện vai trò của NameNode và DataNode. Trong hình này, ta có hai files: một tại /user/chuck/data1 và một tại /user/james/data2. File 1 có 3 block 1, 2, 3 và file 2 có 2 block 4 và 5. Nội dung của các file đƣợc lƣu trữ phân tán giữa các DataNode, mỗi block có 3 bản sao. Ví dụ, block 1 đƣợc sao lƣu trên 3 DataNode bên phải, điều này đảm bảo rằng nếu một DataNode bị lỗi thì vẫn có thể đọc đƣợc file trên các DataNode khác.
Các DataNode liên tục báo cáo lên NameNode. Sau khi khởi tạo, mỗi DataNode sẽ báo cáo lên NameNode các block nó đang lƣu trữ. Sau khi hoàn tất, DataNode sẽ tiếp tục liên lạc với NameNode để cung cấp thông tin về sự thay đổi dữ liệu cục bộ và nhận các chỉ thị để tạo, di chuyển hay xóa các block từ đĩa cục bộ.
Nhiệm vụ của Secondary NameNode:
Secondary NameNode (SNN) là một tiến trình nền (daemon) để hỗ trợ cho việc theo dõi trạng thái của HDFS cluster. Cũng nhƣ NameNode, mỗi cluster cũng có một SNN và thƣờng chạy trên một server riêng. Không có DataNode hoặc TaskTracker nào chạy trên server này. Điểm khác của SNN so với NameNode là nó không nhận và lƣu lại sự thay đổi thời gian thực của HDFS. Thay vào đó, nó liên hệ trực tiếp với NameNode để lƣu lại trạng thái của HDFS sau một khoảng thời gian do ngƣời dùng cấu hình.
30 Nhƣ đã nói ở trên, NameNode là một yếu điểm của Hadoop cluster và SNN giúp giảm thiểu thời gian lỗi và mất dữ liệu. Tuy nhiên, khi một NameNode gặp sự cố, thì cần có con ngƣời can thiệp và cấu hình lại cluster để SNN có thể trở thành NameNode.
31
Chƣơng 3: THIẾT KẾ THUẬT TOÁN CHO MAPREDUCE