b) Kiến trúc của Hadoop
2.2. Mô hình kiến trúc của MapReduce
MapReduce là một framework cho việc xử lý song song hóa các bài toán trên bộ dữ liệu lớn sử dụng một lƣợng lớn các máy tính (nodes), gọi chung là một cụm máy tính (khi tất cả các node là trong cùng một mạng và sử dụng phần cứng tƣơng tự nhau) hay một mạng lƣới (khi các node đƣợc chia sẻ thông tin trên một hệ thống phân tán và sử dụng các phần cứng không đồng nhất). Các xử lý tính toán xảy ra trên các dữ liệu đƣợc lƣu trữ trên hệ thống tệp tin hay một cơ sở dữ liệu.
Mô hình lập trình MapReduce dựa trên 2 bƣớc rõ ràng trên mỗi ứng dụng:
Bƣớc “Map”: Nút chính (master node) lắm giữ thông tin đầu vào, chia dữ liệu thành các phần nhỏ hơn, và phân bổ chúng về các nút trạm (worker nodes). Một
worker node lại có thể thực hiện lại điều này lần nữa, điều đó có thể tạo lên một cây cấu trúc đa mức. Mỗi worker node sẽ xử lý bài toán nhỏ sau đó gửi kết quả về cho master node.
Bƣớc “Reduce”: master node tập hợp tất cả các kết quả từ các worker node
trả về, xử lý theo một cách nào đó để trả về kết quả cuối cùng theo yêu cầu bài toán.
22
MapReduce thao tác trên các cặp key-value. Theo lý thuyết, một MapReduce Job sẽ nắm giữ một tập dữ liệu đầu vào gồm các cặp key-value và tạo ra một tập kết quả đầu ra là các cặp key-value khác thông qua việc xử lý trong các hàm map
và reduce. Kết quả đầu ra sau khi thực hiện các hàm map (trong map task) sẽ đƣợc sử dụng làm đầu vào cho hàm reduce (trong reduce task). Sơ đồ sau đây sẽ minh họa cho tiến trình xử lý các cặp key-value đầu vào tạo ra các cặp key-value đầu ra ở mức cao:
Hình 2.4: Tiến trình xử lý các cặp key-value MapReduce
Mặc dù mỗi tập các cặp key-value là đồng nhất, nhƣng ở mỗi bƣớc các cặp key-value này không cần phải cùng kiểu dữ liệu. Ví dụ, các cặp dữ liệu đầu vào key-value của hàm Map có kiểu là (string, string) nhƣng kết quả đầu ra sau khi thực hiện map task có thể là các cặp key-value với kiểu dữ liệu tƣơng ứng là (string, integer) và sử dụng làm đầu vào của hàm reduce, và sau reduce task ta có thể thu đƣợc một tập các cặp key-value với kiểu là (integer, string).
Các giá trị key trong cặp key-value đầu ra của hàm map không cần phải duy nhất. Giữa quá trình xử lý của Map và Reduce, một bƣớc trộn đƣợc thực hiện, sắp xếp tất cả các giá trị đầu ra của hàm map có cùng key vào một tập đầu vào cho hàm reduce là (key, value-list), ở đó giá trị „value‟ là một danh sách các giá trị (đƣợc tính sau khi thực hiện hàm map) với cùng một key. Nhƣ vậy, đầu vào cho một reduce task trên thực tế là một tập các cặp (key, value-list).
23