Bài viết được sự cho phép của tác giả Kiên Nguyễn
Ngày nay, xử lý dữ liệu lớn đã trở thành bài toán tiếp xúc hằng ngày đối với Kỹ sư phần mềm, Distributed Data Processing dựa trên MapReduce mà một kỹ thuật được sử dụng để giải quyết những bài toán đó.
Thông qua kiến trúc và cách xử lý của MapReduce. Dữ liệu lên tới hàng Petabyte cũng có thể xử lý linh hoạt và nhanh chóng.
Còn chần chừ gì nữa mà không tìm hiểu xem ta có thể thực hiện như thế nào?. Bắt dầu thôi!
1. Distributed Data Processing
Processing đối với data được đề cập trong bài viết này là đề cập tới dữ liệu lớn (large data). Con số lên tới petabytes.
Ngoài ra, process cũng bao gồm các vấn đề khó nhắn như: Search LIKE, trả về tất cả dữ liệu có chứa dòng chữ “hello”. Sẽ không có gì để bàn nếu ta đang muốn giữ cho peformance ở mức tốt cho dù dữ liệu rất lớn. Bằng cách sử dụng hệ cơ sở dữ liệu phân tán (Distributed Database) kết hợp với kiến trúc MapReduce
Bắt đầu với MapReduce, vậy MapReduce là gì?
1.1 MapReduce = Map + Reduce.
Map, written by the user, takes an input pair and produces a set of intermediate key/value pairs. The MapReduce library groups together all intermediate values associated with the same intermediate key I and passes them to the Reduce function
Map, thường được viết bởi user, nhận đầu vào là một cặp key value, tạo ra một tập hợp các key-value trun gian. Thư viện MapReduce sẽ gom tất cả các cặp key value trung gian cùng với khóa tạm I và gửi chúng tới Reduce function
Túm váy lại thì Map sẽ tạo ra các cặp key-value, nó là input cho Reduce, khi đã có danh sách key-value trung gian, ta sẽ gọi Reduce function.
The Reduce function, also written by the user, accepts an intermediate key I and a set of values for that key. It merges together these values to form a possibly smaller set of values. The intermediate values are supplied to the user’s reduce function via an iterator. This allows us to handle lists of values that are too large totinmemory
Reduce function, cũng được viết bởi user, nhận vào khóa tạm I và danh sách giá trị cho khóa đó. Merge chúng lại với nhau để tạo thành một tập giá trị có thể nhỏ hơn. Các giá trị trung gian được tạo ra thông qua quá trình lặp (interator). Điều này cho phép chúng ta xử lý danh sách các giá trị quá lớn để vừa trong bộ nhớ
Đọc hơi khó hiểu, tuy nhiên chỉ cần nhớ đơn giản rằng MapReduce cho phép lặp các giá trị tuần tự trong MapReduce, đem ra xử lí. Quá trình xử lí này là tuần tự cho từng phần tử. Trường hợp dữ liệu cực lớn, không cần phải có toàn bộ dữ liệu mới thực hiện xử lý (data processing)
2. MapReduce Architecture
Với lượng dữ liệu khổng lồ, nếu muốn xử lí dữ liệu theo hướng thông thường như lưu trên disk, ram, thực hiện tuần tự là điều không khả thi. Chính vì vậy, ta cần một kiến trúc mới, xử lí tuần tự như MapReduce. Lúc này Distributed Data Processing cho dữ liệu lớn trở nên khả thi hơn bao giờ hết.
Bài toán thực tế cho thấy ta có:
- Documents: file cần xử lý với dung lượng khổng lồ, cỡ Petabyte
- Master: thực hiện tính toán phân chia cho các worker trên system. Dựa vào tài nguyên thì mỗi worker sẽ có khả năng xử lý nhất định, (MB/s)
- Worker: Xử lí nội dung file theo yêu cầu từ phía master, sức mạnh của các worker là ngang bằng nhau.
Áp dụng nguyên lý và ý tưởng từ Distributed Storage và Distributed Database, ta sẽ chia Documents thành các phần nhỏ. Mỗi phần sẽ vừa đủ để một Worker có thể xử lí
Trường hợp mỗi Worker có thể xử lý 256MB, ta sẽ chia document thành 4000 phần nhỏ. Nếu có 1000 workers, mỗi worker sẽ chịu trách nhiệm xử lý cho 4 Splits.
Lúc này, vai trò của master trở thành người giám sát, ghi lại tiến trình của từng worker. Phân phối Splits nếu worker đã không còn gì để mà xúc.
Để đảm bảo tính phân tán và stateless của mỗi worker, splits không phân chia tuần tự tới từng worker
3. Handle khi MapReduce fail
Trong quá trình processing data, không thể tránh khỏi các trường hợp bị fail. Lúc này, khi một worker bị fail, master sẽ ghi nhận và đổi trạng thái của worker thành failed
Any map task or reduce task in progress on a failed worker is also reset to idle and becomes eligible for rescheduling
Bất kì Map task hay reduce task đang có trạng thái in progress hay failed đều sẽ reset về trạng thái idle và có thể rescheduling lại
Về phía master
If the master task dies,a new copy can be started from the last check pointed state. However, given that there is only a single master, its failure is unlikely ;therefore our current implementation aborts the MapReduce computation if the master fails. Client scan check for this condition and retry the MapReduce operation if they desir
Nếu master tiêu, một bản copy khác có thể bắt đầu lại từ trạng thái kiểm tra cuối cùng. Tuy nhiên, do chỉ có một master duy nhất, nên việc thất bại ở master thường không xảy ra. Do đó, trường hợp master fail, ta đơn giản hủy bỏ tính toán của MapReduce hiện tại, phía client có thể kiểm tra điều kiện này và thử lại ở MapReduce nào bị fail
4. Tham khảo
- Distributed data processing – Wikipedia
- A Distributed Data Management Using MapReduce
- MapReduce for Distributed Computing
Thank you for your focus – Have a best friend – Happy coding!
Bài viết gốc được đăng tải tại kieblog.vn
Có thể bạn quan tâm:
- Làm sao để fetch dữ liệu bằng React Hook?
- Vì sao SQL tốt hơn NoSQL? (Phần 2)
- Hadoop là gì? Kiến trúc của Hadoop
Xem thêm Việc làm Developer hấp dẫn trên TopDev