Hadoop là một nền tảng nguồn mở, được Dough Cutting tạo ra khi ông nghiên cứu về Nutch - một ứng dụng tìm kiếm. Hadoop được viết bằng Java, dùng hỗ trợ xây dựng, thực thi các ứng dụng tính toán phân tán theo mô hình MapReduce. Hadoop cluster là hệ thống máy tính đã được triển khai nền tảng Hadoop, một Hadoop cluster bao gồm hai thành phần cơ bản là kiến trúc MapReduce và hệ thống tập tin phân tán HDFS, trong đó:
Kiến trúc MapReducer gồm hai phần: TaskTracker - trực tiếp thực thi các tác vụ xử lý dữ liệu, JobTracker - quản lý và phân chia công việc cho các TaskTracker.
Hệ thống HDFS gồm hai phần: DataNode - nơi trực tiếp lưu trữ dữ liệu, mỗi DataNode chịu trách nhiệm lưu trữ một phần dữ liệu của hệ thống, NameNode - quản lý các DataNode, dẫn đường cho các yêu cầu truy xuất dữ liệu.
Kiến trúc của Hadoop cluster là kiến trúc Master-Slave, và cả hai thành phần MapReduce và HDFS đều tuân theo kiến trúc này:
Hình 1.8. Các thành phần của Hadoop cluster
Hadoop Distributed File System (HDFS):
HDFS là một hệ thống quản lý tập tin với kích thước rất lớn bằng mô hình phân tán. Tương tự các hệ thống trước nó, HDFS cũng đáp ứng được yêu cầu như độ tin cậy, khả năng mở rộng và hiệu suất hoạt động… Tuy nhiên, HDFS ra đời để đáp ứng các đòi hỏi về lưu trữ và xử lý một lượng lớn dữ liệu với các đặc thù riêng.
Các khái niệm trong HDFS:
Khối (Block): Tượng tự như cách thức quản lý ổ cứng của các hệ điều hành, block là cơ sở của HDFS, tập tin lưu trữ trong HDFS được chia nhỏ thành các block, kích thước mặc định là 64 MB. HDFS thiết kế block lớn, người dùng có quyền thay đổi giá trị để giảm thời gian duyệt tập tin nhưng vẫn đảm bảo tốc độ duyệt tối thiểu một block.
NameNode và DataNode: Một cụm HDFS có hai loại nút:
- NameNode: chịu trách nhiệm quản lý những thông tin về cấu trúc thư mục, file các metadata hệ thống. Lưu trữ vị trí của các block của tập tin trên DataNode.
- Các DataNode: chịu trách nhiệm lưu trữ và cập nhật vị trí của block định kỳ cho NameNode.
Kiến trúc HDFS: HDFS sử dụng cấu trúc cây để phân cấp file, thư mục. Các file là các node lá, mỗi file được chia thành các block có block ID để nhận diện. Mỗi block được lưu trữ thành nhiều bản (replica) nhằm đảm bảo an toàn dữ liệu. Trong một cụm, chỉ có một NameNode chịu trách nhiệm quản lý, nó cũng có các bản sao ở các cụm khác để đảm bảo cả cụm vẫn hoạt động nếu NameNode bị lỗi. Khi có yêu cầu lấy tập tin từ máy khách gửi đến NameNode, nó sẽ gửi danh sách block id và nơi lưu trữ chúng cho máy đó, từ danh sách đó máy khách gửi các yêu cầu đến các DataNode chứa các block đó để lấy chúng về, sau đó tổng hợp lại thành tập tin hoàn chỉnh.
Hoạt động của MapReduce trên Hadoop:
MapReduce trên Hadoop gồm hai thành phần: JobTracker là nơi quản lý, lập lịch các công việc cho hệ thống và phân phối cho các TaskTracker. Mỗi khi có yêu cầu thực thi một ứng dụng MapReduce, JobTracker sẽ tạo ra một JobClient và chép toàn bộ code thực thi cần thiết của job đó lên hệ thống tập tin phân tán HDFS, mỗi JobClient sẽ được gán một JobID duy nhất. Tiếp theo JobClient sẽ gửi một yêu cầu thực thi job lên JobTracker, JobTracker dựa theo yêu cầu của JobClient, sẽ gửi yêu cầu khởi tạo task kèm theo các thông tin phân công công việc đến các TaskTracker. Mỗi TaskTracker sẽ dựa vào thông tin phân công lần lượt thực hiện: Khởi tạo map task hoặc reduce task, chép toàn bộ code thực thi trên HDFS về, thực hiện công việc được phân công. Sau khi thực hiện xong, TaskTracker sẽ thông báo cho JobTracker và tự giải phóng.