Khái niệm thuật toán song song Tính toán song song hay xử lý song song: là quá trình xử lý thông tin trong đó nhấn mạnh việc nhiều đơn vị dữ liệu được xử lý đồng thời bởi một hay nhiều b
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG
TIN TP HỒ CHÍ MINH
BÁO CÁO TIỂU LUẬN TÍNH TOÁN LƯỚI
Đề tài:
KỸ THUẬT TÍNH TOÁN SONG SONG DÙNG MAP-REDUCE VỚI HADOOP FRAMEWORK
GVHD: PGS-TS Nguyễn Phi Khứ HVTH: Nguyễn Hồng Thái LỚP: CH-CNTTQM K6
Mã HV: CH1101040
1
Trang 2Tp HCM, tháng 07 năm 2013
Nhận xét của giáo viên:
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
………….……
Trang 3LỜI NÓI ĐẦU
Tính toán song song là một lĩnh vực đã được phát triển từ lâu của ngành khoa học máy tính, và hiện tại vẫn đang là một ngành rất phát triển Mục đích của nó là giảm thiểu thời gian thực thi của những bài toán lớn Thế giới đang bước vào kỷ nguyên của heavy process in big-data, do vậy, việc tìm hiểu nghiên cứu về những vấn đề song song hoá là rất quan trọng
Một trong những kỹ thuật song song hoá phổ biến hiện nay, đang được sử dụng trong các hệ thống lớn như Facebook, Google, … là Map-Reduce Về cơ bản thì mô hìnhg này được thực hiện bằng 2 thao tác: Xử lí dữ liệu thô trong hàm Map và tính toán
để cho ra kết quả cuối cùng trong hàm Reduce Điều thú vị là các hàm này có thể thực hiện một cách song song
Apache đã xây dựng framework Hadoop để hiện thực Map-Reduce Bên cạnh việc cung cấp các thư viện để người dùng viết các hàm Map và Reduce, Hadoop còn cung cấp
cơ chế để quản lí các tiến trình đang được song song hoá Ngoài ra Hadoop còn cung cấp
hệ thống lưu trữ mới (HDFS: Hadoop Distributed file system), nhằm mục đích tối ưu hoá việc streaming dữ liệu từ hard disk lên memory cũng như streaming qua mạng (Đa phần các bài toán lớn thì cần phải tính tới việc memory không đủ đáp ứng, nên việc tối ưu cách dùng hard disk là rất quan trọng)
Em xin chân thành cảm ơn thầy Nguyễn Phi Khứ, giảng viên bộ môn “Tính toán lưới”, trường đại học CNTT TPHCM, đã tận tình giảng dạy để em có thể hoàn thành đề tài này
Học viên thực hiện:
Nguyễn Hồng Thái
Trang 4Mục lục:
I Tổng quan về tính toán song song 1
1 Khái niệm thuật toán song song 1
2 Các mức độ song song 2
3 Phân loại các kiến trúc song song 2
4 Đánh giá độ phức tạp của thuật toán song song 3
II Kỹ thuật Map-Reduce (MR) 6
1 Định nghĩa Map-Reduce: 6
2 Quy trình xử lý 6
3 Ứng dụng thực tế 9
III Demo ứng dụng: (Trong file đính kèm) 9
IV Kết luận: 9
1 Ưu điểm: 9
2 Hạn chế 10
3 Hướng phát triển 10
4 Tài liệu tham khảo: 10
Trang 5Đ án ti u lu n: Tính toán l ồ án tiểu luận: Tính toán lưới ểu luận: Tính toán lưới ận: Tính toán lưới ưới i
I Tổng quan về tính toán song song
1 Khái niệm thuật toán song song
Tính toán song song hay xử lý song song: là quá trình xử lý thông tin trong đó nhấn mạnh việc nhiều đơn vị dữ liệu được xử lý đồng thời bởi một hay nhiều bộ xử lý
để giải quyết một bài toán
Siêu máy tính: là những máy tính đa năng thông thường có tốc độ tính toán vô cùng lớn Chúng chia làm hai loại:
- Máy tính song song dựa trên bộ vi xử lý : được thiết kế với rất nhiều bộ xử lý có tốc độ vừa phải
- Siêu máy tính truyền thống (supercomputer) : ít bộ xử lý hơn nhưng tốc độ của mỗi bộ xử lý đó lại cực cao
Song song về dữ liệu (data parallelism): Là cơ chế sử dụng nhiều đơn vị xử lý thực hiện cùng một thao tác trên nhiều đơn vị dữ liệu
Song song điều khiển (control parallelism) : là cơ chế trong đó nhiều thao tác khác nhau tác động lên nhiều đơn vị dữ liệu khác nhau một cách đồng thời
Dây chuyền (pipeline) : là cơ chế chia công việc thành nhiều chặng nối tiếp, mỗi chặng được thực hiện bởi một bộ phận khác nhau Đầu ra của bộ phận này là đầu vào của bộ phận tiếp theo
Tăng tốc : tăng tốc của thuật toán song song là tỉ số giữa thời gian thực hiện trong tình huống xấu nhất của thuật toán tuần tự tốt nhất và thời gian thực hiện cũng công việc đó của thuật toán song song
1
-Tăng tốc =
Thời gian thực hiện trong tình huống xấu nhất theo thuật toán tuần tự nhanh nhất
Thời gian thực hiện trong tình huống xấu nhất của thuật toán song song đang xét
Trang 6Đ án ti u lu n: PT&TK H th ng theo UML ồ án tiểu luận: Tính toán lưới ểu luận: Tính toán lưới ận: Tính toán lưới ệ thống theo UML ống theo UML
2 Các mức độ song song
Giả sử có 10 công việc từng đôi một khác nhau thì ta giao cho 10 máy làm, ta có mức song song cao nhất, và chúng ta gọi là mức chương trình song song Mỗi công việc ta lại chia thành các công đoạn (Task) và có thể thực hiện song song, ta gọi mức
độ song song này là mức song song chương trình con Mỗi chương trình cũng như chương trình con lại có hàng loạt câu lệnh, ta có mức độ song song câu lệnh, trong câu lệnh lại có hành loạt thao tác (operation) => mức độ song song thao tác
3 Phân loại các kiến trúc song song
Một trong những phân loại hay được nhắc tới là của Flynn – 1972 Michael Flynn phân các kiến trúc máy tính thành bốn loại dựa trên tương tác giữa lệnh và dữ liệu :
- SIMD(single instruction stream, single data stream) Đây chính là kiến trúc tuần
tự Von Neuman, trong đó tại mỗi thời điểm chỉ một lệnh được thực hiện
- MISD (multiple instruction stream, single data stream) Kiến trúc này cho phép một vài lệnh cùng thao tác trên một dữ liệu
2
Trang 7-Đ án ti u lu n: Tính toán l ồ án tiểu luận: Tính toán lưới ểu luận: Tính toán lưới ận: Tính toán lưới ưới i
- SIMD (single instruction stream, multiple data stream) Cho phép một lệnh được thực hiện đồng thời trên các dữ liệu khác nhau
- MIMD (multiple instruction stream, multiple data stream) Cho phép nhiều lệnh khác nhau có thể đồng thời xử lý nhiều dữ liệu khác nhau trong cùng một thời điểm
4 Đánh giá độ phức tạp của thuật toán song song
Trong thuật toán tuần tự chúng ta chỉ quan tâm tới độ phức tạp về thời gian và không gian, nhưng trong thuật toán song song thường có thêm một số đại lượng đo lường khác Hơn nữa, độ phức tạp thời gian của thuật toán song song không chỉ đơn giản là việc đếm số câu lệnh cơ bản như trong thuật toán tuần tự mà thay vào đó nó phụ thuộc vào các phép toán cơ bản này có thể được thực hiện trên P (P > 1) bộ xử lý như thế nào Bên cạnh độ phức tạp thời gian độ phức tạp về số bộ xử lý cũng là một đại lượng quan trọng trong phân tích thuật toán song song Thiết kế thuật toán song song hiệu quả bao gồm việc lựa chọn cấu trúc dữ liệu phù hợp, phân bố bộ xử lý và cuối cùng là thực hiện thuật toán Ba đại lượng này tác động lẫn nhau như một tổ chức tính toán
4.1 Song song giới hạn và song song không giới hạn
Độ phức tạp thời gian của thuật toán song song cũng là một hàm của kích thước
dữ liệu đầu vào – n Độ phức tạp thời gian là đại lượng quan trọng nhất của thuật toán
song song bởi vì động cơ chính của song song là nhằm tăng tốc thời gian tính toán
Độ phức tạp thời gian tồi nhất (hay đơn giản là độ phức tạp thời gian) của thuật
toán song song giải quyết bài toán P n với kích thước đầu vào n là một hàm f(n) cho thời
gian lớn nhất từ lúc bắt đầu thực hiện thuật toán trên một hay nhiều bộ xử lý đến lúc kết thúc thuật toán bởi một hay nhiều bộ xử lý với bất kỳ bộ dữ liệu nào
Các thuật toán song song được thực hiện trên một tập các bộ xử lý nên đòi hỏi việc truyền dữ liệu giữa chúng Vì thế nó bao hàm hai hoạt động khác nhau Một hoạt động là tính toán (như các phép toán số học hay logic) được thực hiện một cách cục bộ trên một bộ xử lý, hoạt động khác là gửi dữ liệu giữa các bộ xử lý Trong thuật toán
3
Trang 8-Đ án ti u lu n: PT&TK H th ng theo UML ồ án tiểu luận: Tính toán lưới ểu luận: Tính toán lưới ận: Tính toán lưới ệ thống theo UML ống theo UML song song một bước cơ bản là một tập các hoạt động cơ bản có thể được thực hiện một cách đồng thời bởi một tập các bộ xử lý – độ phức tạp thời gian của một bước cơ bản là hằng số hay O(1) Độ phức tạp thời gian của thuật toán song song được xác định bởi việc đếm số bước cơ bản và số bước chuyển giao dữ liệu, trong đó thời gian chuyển giao dữ liệu tại mỗi bước phụ thuộc vào mô hình liên kết giữa các bộ xử lý Một số tài liệu còn gọi độ phức tạp thời gian của thuật toán song song là độ sâu
Độ phức tạp thời gian của thuật toán song song phụ thuộc vào mô hình tính toán song song được sử dụng một cách tốt nhất trên số lượng bộ xử lý Vì thế, khi đưa ra độ phức tạp thời gian của thuật toán song song cần thiết đưa ra số lượng lớn nhất bộ xử lý
cần sử dụng như một hàm của kích thước dữ liệu đầu vào n, và gọi là độ phức tạp số bộ
xử lý của thuật toán Việc tổng hợp và phân tích một thuật toán song song dưới mô hình có P bộ xử lý (P là một số nguyên cố định và P > 1) được gọi là mô hình song song có giới hạn Ngược lại, mô hình song song không giới hạn là khi mà chúng ta có
và được phép tùy ý sử dụng một số lượng bộ xử lý không giới hạn
Thuật toán song song thực hiện trên mô hình P bộ xử lý được gọi là P-song
song Nếu thuật toán P-song song cho bài toán kích thước n đòi hỏi t(n) bước song
song thì được gọi là P-có thể tính toán trong thời gian t Chúng ta giả sử rằng một thuật
toán song song A giải quyết bài toán kích thước n với P bộ xử lý.Nếu tồn tại đa thức F sao cho n , P F(n) , thì số lượng bộ xử lý được gọi là cận đa thức, ngược lại thì
không có cận đa thức
Thuật toán song song có giới hạn là thích hợp trong thực tế Tuy nhiên, các thuật toán song song không giới hạn có một sự quan tâm lớn về mặt lý thuyết, vì chúng đưa ra các giới hạn cho tính toán song song Bằng trực giác điều đó có nghĩa là chúng
ta giả sử tồn tại một số lượng vô hạn bộ xử lý( nghĩa là thuật toán có thể sử dụng tùy ý
số lượng bộ xử lý), và cũng không có giới hạn về truyền thông và truy cập bộ nhớ, thì thời gian tính toán không thể giảm dưới một giới hạn nào đó
Thực tế số lượng bộ xử lý là có giới hạn, nên thuật toán trên mô hình song song không giới hạn chỉ có thể sử dụng trong thực tế nếu chúng được chuyển thành thuật toán P-song song Có hai phương pháp đưa ra các phép chuyển đổi này : phân tách bài toán hoặc là phân tách thuật toán Ta có thuật toán song song A giải bài toán Pn kích
4
Trang 9-Đ án ti u lu n: Tính toán l ồ án tiểu luận: Tính toán lưới ểu luận: Tính toán lưới ận: Tính toán lưới ưới i
thước đầu vào n trong thời gian t1(n) sử dụng p1(n) bộ xử lý Giờ ta đi thiết kế thuật
toán mới B giải bài toán Pn trong thời gian t2(n) sử dụng p2(n) bộ xử lý, trong đó p2(n) < p1(n) Cách thứ nhất phân tách bài toán thành các bài toán nhỏ hơn với kích thước m
(m < n), mỗi bài toán được giải bởi thuật toán ban đầu với số lượng bộ xử lý nhỏ hơn –
p2(m) Cách thứ hai là phân tách một thuật toán, mỗi bước của nó được phân tách thành các bước nhỏ hơn theo một cách nào đó sao cho chúng được thực hiện với một số lượng bộ xử lý nhỏ hơn
4.2 Cận trên và cận dưới
Thuật toán song song nhanh nhất được biết để giải quyết bài toán cho ta cận trên của tính toán đó Nếu một ai đó thiết kế ra một thuật toán nhanh hơn thuật toán nhanh nhất trước đó để giải quyết cùng một bài toán thì chúng ta nói rằng cận trên mới đã được thiết lập cho việc tính toán lời giải của bài toán đó Cận dưới xác định độ phức tạp của bài toán, nghĩa là nó đưa ra lượng thời gian tối thiểu để giải quyết bài toán sử dụng một thuật toán song song tùy ý
4.3 Chi phí, tăng tốc, và hiệu quả của thuật toán song song
Tăng tốc và hiệu suất : xét bài toán với thuật toán tuần tự tốt nhất có thời gian
Ts, thuật toán song song Tp ; số bộ xử lý là P Khi đó:
Tăng tốc = Ts/Tp Hiệu suất = Ts/(PTp) Tăng tốc luôn nhỏ hơn số bộ xử lý, cố gắng đạt tới bằng nên hiệu suất đạt cùng lắm là 1
4.4 Độ phức tạp của bài toán
Dưới đây là mô hình phân lớp độ phức tạp của bài toán
5
Trang 10-Đ án ti u lu n: PT&TK H th ng theo UML ồ án tiểu luận: Tính toán lưới ểu luận: Tính toán lưới ận: Tính toán lưới ệ thống theo UML ống theo UML
Nói chung xử lý song song không có tác dụng cho việc giải quyết các bài toán
NP Một bài toán thực hiện trong 400 tỷ thế kỷ trên một bộ xử lý sẽ mất 400 thế kỷ nếu chúng ta thực hiện song song hóa một cách hoàn hảo và thực hiện trên 1 tỷ bộ xử lý Vì thế, xử lý song song được sử dụng chính cho việc tăng tốc thời gian thực hiện của bài toán P
II Kỹ thuật Map-Reduce (MR)
1 Định nghĩa Map-Reduce:
MapReduce (MR) là quy trình giúp xử lý tập hợp dữ liệu siêu lớn đặt tại các máy tính phân tán, có thể xử lý được dữ liệu không cấu trúc (dữ liệu lưu trữ dạng tệp tin hệ thống) và dữ liệu cấu trúc (dữ liệu quan hệ 2 chiều) Trong MR, các máy tính chứa dữ liệu đơn lẻ được gọi là các nút (node)
MR định nghĩa dữ liệu (cấu trúc và không cấu trúc) dưới dạng cặp khóa/giá trị (key/ value) Ví dụ, key có thể là tên của tập tin (file) và value nội dung của tập tin, hoặc key
là địa chỉ URL và value là nội dung của URL,… Việc định nghĩa dữ liệu thành cặp key/value này linh hoạt hơn các bảng dữ liệu quan hệ 2 chiều truyền thống (quan hệ cha – con hay còn gọi là khóa chính – khóa phụ)
2 Quy trình xử lý
6
Trang 11-Đ án ti u lu n: Tính toán l ồ án tiểu luận: Tính toán lưới ểu luận: Tính toán lưới ận: Tính toán lưới ưới i
MapReduce được xây dựng từ mô hình lập trình hàm và lập trình song song Tăng tốc
độ thực thi xử lý dữ liệu là mục đích quan trọng nhất của MR Quy trình này gồm 2 phần:
- Map: Đầu vào là nút chủ (master node) và sau đó chia nhỏ nó ra thành các vấn đề bé hơn Gọi là các split 0, split 1, split 2, …
- Reduce: Từ các đầu ra trung gian sẽ tổng hợp lại để đưa ra các kết quả cuối cùng cho vấn đề master
Một ví dụ về hàm Map:
def map (key, value):
list = []
for x in value:
if test:
list.append( (key, x) )
return list
Một ví dụ về hàm Reduce:
7
Trang 12-Đ án ti u lu n: PT&TK H th ng theo UML ồ án tiểu luận: Tính toán lưới ểu luận: Tính toán lưới ận: Tính toán lưới ệ thống theo UML ống theo UML
def reduce (key, listOgValues):
result = 0
for x in listOgValues:
result += x
return (key, result)
Để xử lý khối dữ liệu bao gồm rất nhiều cặp (key, value), lập trình viên viết hai hàm map và reduce Hàm map có đầu vào là một cặp (k1, v1) và đầu ra là một danh sách các cặp (k2, v2) Như vập hàm Map có thể được viết theo dạng: map(k1,v1) => list(k2,v2) Và hàm reduce có dạng reduce(k2, list (v2)) => list(v3)
(1): Thư viện MR mà chương trình người dùng (User Program) sử dụng chia các tập tin đầu vào (dữ liệu cần xử lý) thành các phần nhỏ Dung lượng mỗi phần từ 16 megabytes đến 64 megabytes (MB) Và sau đó sao chép chương trình thành các tiến trình song song chạy trên các máy tính phân tán chứa dữ liệu
(2): Chương trình điều khiển Master sẽ gán mỗi phần dữ liệu cho một hàm Map và một hàm Reduce
(3) – (4): worker là phần được gán một hàm Map và Reduce để xử lý, nó sẽ đọc dữ liệu, phân tích cặp key/value ở đầu vào và phân tích thành các cặp trung gian khác được lưu tại vùng nhớ đệm
(5): Định kỳ, các cặp dữ liệu trung gian sẽ được đẩy đến các worker tương ứng (do master điều khiển) để hàm reduce xử lý Các thuật toán sắp xếp, so sánh, phân vùng dữ liệu sẽ được sử dụng tại giai đoạn này Các tập dữ liệu trung gian có cùng key sẽ được sắp xếp cùng một nhóm
(6): Khi tất cả các tác vụ Map và Reduce đã hoàn tất thì sẽ cho ra kết quả cuối cùng của quy trình MR
Với MR, rất nhiều máy tính trung gian có thể sử dụng để xử lý dữ liệu mà trước kia không thể
MR cho phép lập trình viên dễ dàng sử dụng thư viện định tuyến MR để lập trình song song chính xác và hiệu quả, không phải bận tâm đến việc trao đổi dữ liệu giữa các cluster khác nhau vì sự độc lập dữ liệu khá cao; không phải theo dõi xử lý lỗi, các tác vụ…
Hiện nay đã có một số mô hình MR trên các ngôn ngữ Java, C++, Python, Perl, Ruby
và C Lập trình viên có thể lựa chọn ngôn ngữ và thư viện MR để xây dựng ứng dụng của mình Thường các cài đặt MR đòi hỏi phải chạy trên một hệ thống tệp tin phân tán thích hợp, ví dụ như Google File System (GFS), Amazon S3,…
8