Trong bài viết này HTTL sẽ cùng các bạn nghiên cứu về một trong những thành phần quan trọng giúp nâng cao Hadoop là Mapreduce. Vậy MapReduce là gì? Mapreduce hoạt động như thế nào? Các hàm chính của nó là gì? Tất cả những kiến thức trên sẽ được tổng hợp trong bài viết dưới đây.
1. MapReduce là gì?
MapReduce là mô hình độc quyền được thiết kế bởi Google, nó có khả năng lập trình để xử lý các tập dữ liệu lớn song song và phân tán thuật toán trên mọt cụm máy tính. MapReduce đã trở thành một trong những thành ngữ tổng quát hóa trong thời gian gần đây.
MapReduce sẽ bao gồm những thủ tục 1 Map() và 1 Reduce(). Thủ tục Map() bao gồm lọc (filter) và phân loại (sort) trên dữ liệu khi thủ tục Reduce() thực hiện tổng hợp dữ liệu. Đây là mô hình dựa vào khái niệm biển đối của bản đồ và reduce chức năng lập trình theo hướng chức năng. Thư viện của thủ tục Map() và thủ tục Reduce() được viết bằng nhiều loại ngôn ngữ khác nhau. Tuy nhiên, thủ tục có thể cài đặt miễn phí và được sử dụng phổ biến nhất Apache Hadoop.
2. Các hàm chính của MapReduce
MapReduce bao gồm 2 hàm chính là Map() và Reduce(). Đây là 2 hàm đã được định nghĩa bởi người dùng và nó cũng là 2 giai đoạn liên tiếp trong quá trình xử lý dữ liệu MapReduce. Cụ thể, nhiệm vụ của từng hàm là:
- Hàm Map(): Nhận Input cho các cặp giá trị/ khóa và output là tập những cặp giá trị/khóa trung gian. Sau đó, chỉ cần bạn ghi vào đĩa cứng và tiến hành thông báo cho các hàm Reduce() trực tiếp nhận dữ liệu.
- Hàm Reduce(): có nhiệm vụ tiếp nhận từ khóa trung gian và những giá trị tương ứng với từ khóa đó. Sau đó, tiến hành ghép chúng lại để có thể tạo thành một tập từ khóa khác nhau. Các cặp khóa/giá trị này thường sẽ thông qua con trỏ vị trí để đưa vào các hàm reduce. Quá trình này giúp cho lập trình viên quản lý dễ dàng hơn một lượng danh sách cũng như phân bổ giá trị sao cho phù hợp với bộ nhớ hệ thống.
- Ở giữa Map và Reduce còn một bước trung gian đó chính là Shuffle. Sau khi Map hoàn thành công việc của mình thì Shuffle sẽ làm nhiệm vụ chính là thu thập cũng như tổng hợp khóa/giá trị trung gian đã được map sinh ra trước đó và chuyển qua cho Reduce tiếp tục xử lý.
3. Các ưu điểm nổi bật của MapReduce
Mapreduce được ưa chuộng bởi sở hữu nhiều ưu điểm vượt trội như:
- MapReduce xử lý dễ dàng mọi bài toán có lượng dữ liệu lớn nhờ khả năng tác vụ phân tích và tính toán phức tạp. Nó có thể xử lý nhanh chóng và cho ra kết quả dễ dàng chỉ trong khoảng thời gian ngắn.
- Mapreduce có thể chạy song song trên các máy có sự phân tán khác nhau. Với khả năng hoạt động độc lập kết hợp phân tán và xử lý các lỗi kỹ thuật để mang lại hiệu quả tối ưu cho toàn hệ thống.
- MapRedue thực hiện được trên nhiều nguồn ngôn ngữ lập trình khác nhau như: Java,C/ C++, Perl, Python, Ruby,… tương ứng với nó là những thư viện hỗ trợ.
- Mã độc trên Internet ngày càng nhiều nên việc xử lý những đoạn mã độc này cũng trở nên phức tạp và tốn thời gian. Chính vì vậy, các ứng dụng MapReduce dần hướng đến sự phát hiện các mã độc để có thể xử lý chúng. Nhờ vậy, hệ thống mới có thể vận hành trơn tru và bảo mật tối đa.
4. MapReduce hoạt động như thế nào?
4.1 Nguyên tắc hoạt động
Mapreduce hoạt động dựa vào nguyên tắc “Chia để trị”:
- Phân chia dữ liệu cần xử lý thành nhiều phần nhỏ khác nhau trước khi thực hiện
- Xử lý các vấn đề nhỏ theo phương thức song song trên các máy tính và phân tán hoạt động theo hướng độc lập
- Tiến hành tổng hợp kết quả thu được để đưa ra được kết quả sau cùng.
4.2. Các bước hoạt động
- Bước 1: Chuẩn bị các dữ liệu đầu vào để cho Map() xử lý
- Bước 2: Lập trình viên thực hiện các mã Map() để xử lý
- Bước 3: Tiến hành trộn các dữ liệu được xuất ra bởi Map() vào Reduce Processor
- Bước 4: Tiến hành thực hiện tiếp mã Reduce() để xử lý tiếp các dữ liệu cần thiết
- Bước 5: Thực hiện tạo dữ liệu xuất ra cuối cùng.
4.3. Luồng dữ liệu nền tảng
- Input Reader
- Map Function
- Partition Function
- Compare Function
- Reduce Function
- Output Writer
4.4. Ví dụ về hoạt động của MapReduce điển hình
- Theo sơ đồ phía trên, người dùng sẽ thực hiện nhập dữ liệu và các dữ liệu đều sẽ được chia nhỏ từ 16MB đến 64MB. Sau đó, hệ thống sẽ thực hiện khởi động việc sao chép trên clusters.
- Hầu hết các máy đều có khả năng thực hiện xử lý các dữ liệu bao gồm master và worker. Trong số đó, máy master sẽ có nhiệm vụ điều phối hoạt động bên trong quá trình thực hiện. Các máy worker sau khi nhận dữ liệu sẽ tiến hành những nhiệm vụ Map và Reduce. Khi worker đã hoàn thành công việc thì kết quả đầu ra sẽ xuất hiện các cặp khóa và giá trị trung gian, những cặp này sẽ được lưu tạm thời vào bộ nhớ đệm bên trong hệ thống.
- Nếu như Map thành công, các worker sẽ thực hiện các nhiệm vụ tiếp theo như là phân chia máy trung gian thành nhiều vùng khác nhau và lưu chúng xuống đĩa rồi trả kết quả ngược lại bao gồm vị trí lưu trữ cho máy master biết.
- Khi đã nhận được thông tin từ worker, các máy master sẽ có thể gán các giá trị trung gian và vị trí tệp dữ liệu cho máy thực hiện công việc Reduce. Hầu hết, các máy sẽ nhận nhiệm vụ xử lý hàm Reduce sau đó mới xử lý các key, giá trị để đưa ra kết quả cuối cùng.
- Sau khi quá trình MapReduce đã hoàn tất, các máy master sẽ được kích hoạt chức năng thông báo cho lập trình viên. Khi kết quả đầu ra đã được lưu trên hệ thống thì người dùng có thể sử dụng chúng cũng như quản lý và sao lưu dễ dàng hơn.
5. Ứng dụng MapReduce
MapReduce được ứng dụng trong thống kê hàng loạt những số liệu cụ thể như là:
- Thực hiện thống kê cho các từ khóa xuất hiện trong các tài liệu, văn bản, bài viết hoặc được cập nhật trên hệ thống website, fanpage,…
- Khi số lượng bài viết đã được thống kê thì tài liệu sẽ có chứa sẵn các từ khóa đó
- Có thể thống kê được câu lệnh match, pattern bên trong các tài liệu
- Thống kê được số lượng URLs xuất hiện bên trong một webpages
- Thống kê được số lượt truy cập của khách hàng sao cho tương ứng với các URLs
- Thống kê được tất cả từ khóa trên website, hostname,…
Trên đây là một số chia sẻ về Mapreduce cũng như những thông tin khác về MapReduce. Hy vọng rằng, bài viết này đã mang lại được cho bạn đọc những kiến thức hữu ích.