Gộp lớn cục bộ

Một phần của tài liệu Thuật toán đánh chỉ mục ngược với mapreduce và ứng dụng trong việc đánh giá ý kiến của học sinh hòa bình trên mạng xã hội (Trang 26 - 31)

1.3. Hệ thống file phân tán

2.1.1. Gộp lớn cục bộ

Trong việc xử lý dữ liệu lớn, một phần quan trọng nhất của sự đồng bộ hóa là việc trao đổi các kết quả trung gian từ các tiến trình tạo ra nó đến các tiến trình sẽ sử dụng nó. Trong môi trường xử lý song song thì các kết quả trung gian này phải được truyền qua mạng. Hơn nữa, trong Hadoop các kết quả trung gian được ghi vào đĩa cục bộ trước khi được gửi qua mạng. Vì độ trễ của mạng và đĩa cao hơn nhiều so với các phép toán khác nên việc giảm số lượng các kết quả trung gian sẽ làm tăng tính hiệu quả của thuật toán. Trong MapReduce, việc gộp cục bộ các kết quả trung gian là một trong các cách giúp cho thuật toán nhanh hơn. Thông qua việc sử dụng Combiner và khả năng bảo toàn trạng thái giữa các đầu vào, ta có thể giảm một lượng lớn các cặp key-value dùng cho pha shuffle and sort giữa các Mapper và Reducer.

Hình 2.1. Bảo toàn trạng thái trong Hadoop

Hình mô tả việc tạo đối tượng và bản toàn trạng thái trong Hadoop, một đối tượng Mapper và Reducer được tạo ra tương ứng với một task, hàm Configure được chạy lúc khởi tạo đối tượng, hàm map/reduce chạy tương ứng với mỗi cặp key-value, hàm close được chạy khi hủy đối tượng. Trạng thái của đối tượng được bảo toàn qua các lần gọi hàm map/reduce.

2.1.1.1. Combiner và In-Mapper combining

Để minh họa các kỹ thuật khác nhau của hàm gộp cục bộ. Ta sử dụng ví dụ là chương trình Wordcount:

 Input: Tập các văn bản

 Output: Các từ và số lượng của chúng trong tập các văn bản

Hình 2.2. Tiến trình hoạt động của chương trình WordCount Chương trình Wordcount cơ bản:

Class MAPPER

Method MAP (docid a, doc d) For all term t in doc d do EMIT (term t, count 1) Class REDUCER

Method REDUCE (term t, counts [C1, C2, …]) Sum ← 0

For all count c in counts [C1, C2, …] do Sum ← Sum + c

EMIT (term t, count sum)

Mapper đưa lên các key-value trung gian ứng với mỗi từ nó tìm thấy với key là từ đó và value là 1, Reducer tổng các giá trị trung gian để đưa ra kết quả cuối cùng.

Word Count: Version 1 (Reducer vẫn giữ nguyên) Class MAPPER

Method MAP (docid a, doc d) H ← new ASSOCIATIVEARRAY For all term t in doc d do

H{t} ← H{t} + 1 >Đếm số lượng tổng cộng một tài liệu For all term t in H do EMIT (term t, count H{t})

Thuật toán này cải thiện hơn so với chương trình wordcount cơ bản, sử dụng một mảng kết hợp để đếm số lượng các từ trong một tài liệu sau đó mới đưa lên các từ và số lượng của các từ đó trong mảng. Dễ thấy cách này sẽ làm giảm đi số lượng các key- value trung gian.

Word Count: Version 2

Class MAPPER Method INITIALIZE

H ← new ASSOCIATIVEARRAY >bảo toàn trạng thái giữa các cặp key/value

Method MAP (docid a, doc d) For all term t in doc d do

H{t} ← H{t} + 1 >Đếm số lượng tổng cộng trên nhiều tài liệu Method CLOSE

For all term t in H do EMIT (term t, H{t})

Cũng với ý tưởng trên, thuật toán này dựa vào sự bảo toàn trạng thái của đối tượng Mapper để khởi tạo một mảng kết hợp bên ngoài hàm map, sau đó dùng mảng này để đếm số từ giữa nhiều tài liệu trong một map task. Đến khi tất cả hàm Map đã xử lý hết dữ liệu trung gian thì hàm CLOSE sẽ được gọi, lúc này ta gửi cặp key-value tương tứng với các phần tử trong mảng kết hợp. Với kĩ thuật này, ta đang sử dụng chức năng của hàm Combiner trực tiếp ở trong Mapper. Ta không cần phải chạy các Combiner khác, vì tất cả khả năng gộp cục bộ đã được chỉ rõ. Mẫu thiết kế này trong MapReduce thường được gọi là “In-Mapper Combining”. Có hai lợi ích khi sử dụng mẫu thiết kế này:

1. Thứ nhất, nó điều khiển được khi nào việc gộp cục bộ xảy ra và chính xác xảy ra như thế nào. Ngược lại, ý nghĩa của hàm Combiner không được chỉ rõ trong MapReduce. Ví dụ: Hadoop không bảo đảm hoặc Combiner được thực hiện bao nhiêu lần hoặc có thể không thực hiện lần nào. Combiner được xem là một tối ưu hóa trong execution framework, có thể sử dụng hoặc không, có thể được gọi không hoặc nhiều lần. Trong nhiều trường hợp, sự không chắc chắn này không chấp nhận được, chính vì thế nhiều lập trình viên tự viết hàm gộp trong Mapper.

2. Thứ hai, In-Mapper Combining sẽ hiệu quả hơn các Combiner thực sự.

Combiner làm giảm số lượng các key-value trung gian trong pha shuffle

and sort nhưng không làm giảm số lượng các key-value tạo ra trong pha map, việc này làm tạo ra nhiều việc tạo và hủy đối tượng. Ngược lại, trong In-Mapper Combining chỉ tạo các cặp key- value cần thiết cho pha shuffle and sort.

Tuy nhiên, trong mẫu In-Mapper Combining cũng có hạn chế. Nó làm mất đi ý tưởng ban đầu của MapReduce vì có bảo toàn trạng thái giữa các cặp key-value. Bảo toàn trạng thái giữa các dữ liệu đầu vào, có nghĩa thuật toán có thể phụ thuộc vào thứ tự của các cặp key-value, dẫn đến có thể xảy ra các lỗi về thứ tự. Thứ hai, khi dữ liệu quá lớn thì có thể làm cho dữ liệu trung gian không thể chứa đủ trong bộ nhớ dẫn đến vấn đề về bộ nhớ. Giải pháp là giới hạn kích thước của Block và thường xuyên hủy các cấu trúc dữ liệu không dùng tới trong bộ nhớ.

2.1.1.2. Sự chính xác của thuật toán trong Local Aggregation

Mặc dù Combiner có thể làm giảm thời gian chạy của chương trình nhưng cũng cần cẩn thận khi sử dụng chúng. Vì Combiner trong Hadoop được xem là các tối ưu phụ nên sự chính xác của thuật toán không thể phụ thuộc vào sự tính toán trên Combiner hoặc phụ thuộc vào nó. Trong các chương trình MapReduce, kiểu dữ liệu đầu vào trong Reducer phải cùng kiểu dữ liệu đầu ra của Mapper, vì thế kiểu dữ liệu đầu vào và đầu ra của Combiner phải cùng kiểu với dữ liệu đầu ra của Mapper. Trong trường hợp kiểu dữ liệu đầu vào và đầu ra của Reducer giống nhau thì Reducer có thể dùng như Combiner.

Ví dụ: Computing the Mean (Tính giá trị trung bình)

 Input: Tập dữ liệu với input key kiểu string và input value kiểu integer.

 Output: Giá trị trung bình ứng với mỗi key.

Class MAPPER

Method MAP (string t, integer r) EMIT (string t, integer r) Class REDUCER

Method REDUCE (string t, integers [r1, r2, …]) Sum ← 0 Cnt ← 0

For all integer r in integers [r1, r2, …]) do Sum ← Sum + r Cnt ← Cnt + 1 ravg ← Sum/Cnt

EMIT (string t, integer ravg)

Thuật toán này không thể sử dụng combiner như reducer vì trung bình của các giá trị trung bình cục bộ không bằng trung bình của toàn bộ các giá trị.

Ví dụ: ( (3+4)/2 + (8+9+10)/3)/2 = 6.25 (3 + 4 + 8 + 9 + 10)/5 = 6.8 Dễ thấy trong ví dụ trên, hai cách tính toán cho ra hai kết quả khác nhau.

Computing the Mean: Version 2 Class MAPPER

Method MAP (string t, integer r) EMIT (string t, integer r) Class COMBINER

Method COMBINE (string t, integers [r1, r2, …]) Sum ← 0 Cnt ← 0

For all integer r in integers [r1, r2, …]) do Sum ← Sum + r Cnt ← Cnt + 1

EMIT (string t, pair (Sum,Cnt) >Sum và Count riêng phần Class REDUCER

Method REDUCE (string t, pairs [ (s1,c1), (s2,c2), …]) Sum ← 0 Cnt ← 0

For all pair (s,c) in pairs [ (s1,c1), (s2,c2), …] do Sum ← Sum + s Cnt ← Cnt + c ravg ← Sum/Cnt

EMIT (string t, integer ravg)

Thuật toán này không chính xác vì sự khác nhau về kiểu dữ liệu của key-value giữa Combiner và Reducer (nếu Combiner không được gọi lần nào thì sẽ sai).

Computing the Mean: Version 3 Class MAPPER

Method MAP (string t, integer r) EMIT (string t, pair (r,1)) Class COMBINER

Method COMBINE (string t, pairs [ (s1,c1), (s2,c2), …])) Sum ← 0 Cnt ← 0

For all pair (s,c) in pairs [ (s1,c1), (s2,c2), …] do Sum ← Sum + s Cnt ← Cnt + c

EMIT (string t, pair (Sum,Cnt) >Sum và Count riêng phần Class REDUCER

Method REDUCE (string t, pairs [ (s1,c1), (s2,c2), …]) Sum ← 0 Cnt ← 0

For all pair (s,c) in pairs [ (s1,c1), (s2,c2), …] do Sum ← Sum + s Cnt ← Cnt + c ravg ← Sum/Cnt

EMIT (string t, integer ravg)

Thuật toán đúng vì kiểu dữ liệu của Combiner và Reducer giống nhau.

Computing the Mean: Version 4

Thuật toán sử dung In-Mapper combining Class MAPPER Method INITIALIZE

S ← new ASSOCIATIVEARRAY C ← new ASSOCIATIVEARRAY

Method MAP (string t, integer r) S{t} ← S{t} + r C{t} ← C{t} + 1

Method CLOSE For all term t in S do

EMIT (term t, pair (S{t}, C{t}))

Một phần của tài liệu Thuật toán đánh chỉ mục ngược với mapreduce và ứng dụng trong việc đánh giá ý kiến của học sinh hòa bình trên mạng xã hội (Trang 26 - 31)

Tải bản đầy đủ (PDF)

(77 trang)