1. Trang chủ
  2. » Luận Văn - Báo Cáo

XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa

87 1,8K 11

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 87
Dung lượng 3,5 MB

Nội dung

Đánh giá dựa trên một lượng lớn dữ liệu đã tạo ra cái nhìn sâu sắc hơn và mở ra những cơ hội hấp dẫn mới trong thương mại điện tử, khoa học và các ứng dụng tính toán.. MapReduce là một m

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG KHOA CÔNG NGHỆ THÔNG TIN

Nha Trang, tháng 6 năm 2011

LUẬN VĂN TỐT NGHIỆP

Trang 2

1

TÓM TẮT

Sự phát triển nhanh chóng của công nghệ thông tin đã tạo ra một lượng dữ liệu lớn

và đặt ra những thách thức trong việc xử lý chúng Đánh giá dựa trên một lượng lớn

dữ liệu đã tạo ra cái nhìn sâu sắc hơn và mở ra những cơ hội hấp dẫn mới trong thương mại điện tử, khoa học và các ứng dụng tính toán Xử lý lượng dữ liệu lớn cho các công việc trên cần phải có những cụm máy tính lớn Chính vì thế, mô hình xử lý phân tán đang trở nên quan trọng trong sự phát triển của công nghệ thông tin hiện nay MapReduce là một mô hình lập trình để biểu diễn các tính toán phân tán trên tập

dữ liệu lớn và là bộ khung thực thi (execution framework) để xử lý dữ liệu lớn trên các cụm máy chủ bình thường (clusters of commodity servers) Mô hình lập trình MapReduce cung cấp một mức trừu tượng dễ hiểu cho việc thiết kế các thuật toán có thể mở rộng, trong khi bộ khung thực thi xử lý trong suốt các chi tiết ở mức hệ thống,

từ việc lập lịch đến việc xử lý lỗi

MapReduce được Google phát triển đầu tiên và được sử dụng rộng rãi thông qua cài đặt mã nguồn mở Hadoop – được phát triển bởi Yahoo (nay là một dự án Apache) Hiện nay Mapreduce được nhiều công ty ứng dụng như: Google, Yahoo, Amazone,… cũng như được các nhóm nghiên cứu quan tâm phát triển

Một vài ví dụ về dữ liệu lớn: Google xử lý 20 PB một ngày (2008), Facebook có 2.5 PB dữ liệu người dùng và tăng thêm 15 TB/ngày (4/2009) , eBay có 6.5 PB dữ liệu người dùng và tăng thêm 50 TB/ngày (5/2009)

Trong nghiên cứu khoa học, các tập dữ liệu hàng Petabyte cũng đang trở nên bình thường Ví dụ: Viện Large Hadron Collider (LHC) gần Geneva mô phỏng vụ nổ Big Bang, khi hoạt động sẽ tạo ra 15 PB/ năm Các nhà thiên văn học Chile đang tạo chiếc camera 3.2 Gigapixel, khi hoạt động sẽ tạo ra khoảng nửa Petabyte dữ liệu ảnh trong một tháng

Xử lý dữ liệu lớn nằm ngoài khả năng của của một máy và đòi hỏi phải có các cụm máy tính – có nghĩa các bài toán dữ liệu lớn chính là việc tổ chức tính toán trên hàng chục, trăm hay cả nghìn máy tính Đó chính là những gì MapReduce làm

Khóa luận này sẽ giới thiệu tổng quát về tính toán đám mây, cơ bản về MapReduce và thiết kế thuật toán trong MapReduce, một cài đặt mã nguồn mở của MapReduce là Hadoop Đồng thời khóa luận cũng giới thiệu về phần mềm mã nguồn

mở Lucene, Solr và Nutch và minh họa hoạt động của MapReduce thông qua ứng dụng tìm kiếm truyện tranh

Trang 3

2

LỜI CẢM ƠN

Trước hết tôi xin bày tỏ lòng cảm ơn đến quý thầy cô thuộc khoa Công nghệ thông tin trường Đại học Nha Trang đã tận tình dạy dỗ và truyền đạt cho tôi nhiều kiến thức quý báu trong suốt bốn năm qua

Đặc biệt, tôi xin tỏ lòng biết ơn xâu sắc đến thầy Huỳnh Tuấn Anh, người đã trực tiếp gợi ý, hướng dẫn và tận tình truyền đạt nhiều kinh nghiệm để tôi có thể thực hiện

và hoàn thành đề tài này

Tôi cũng xin gửi tất cả lòng biết ơn sâu sắc đến cha mẹ, cùng toàn thể gia đình, những người nuôi dạy tôi trưởng thành như ngày hôm nay, đồng thời cũng giúp đỡ, chăm sóc tôi trong suốt quá trình thực hiện đề tài

Cuối cùng, tôi xin cảm ơn những người bạn đã luôn động viên và cổ vũ để tôi có thể hoàn thành tốt đề tài này

Trang 4

3

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

Trang 5

4

NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN

Trang 6

5

MỤC LỤC

Nội dung:

1 Giới thiệu 11

1.1 Cloud Computing 11

Định nghĩa 11

1.1.1 Các đặc trưng của tính toán đám mây 12

1.1.2 Các mô hình dịch vụ của tính toán đám mây 13

1.1.3 Các lợi ích của tính toán đám mây 17

1.1.4 Ảnh hưởng của sự phát triển các dịch vụ đám mây đến MapReduce17 1.1.5 1.2 Các ý tưởng của MapReduce 18

1.3 Sự quan trọng của MapReduce 19

2 Cơ bản về MapReduce 20

2.1 Nguồn gốc từ Functional Programming 21

2.2 Cấu trúc dữ liệu trong MapReduce 22

2.3 Mapper và Reducer – hai thành phần cơ bản trong MapReduce 22

2.4 Partitioner và Combiner 24

2.5 The execution framework (Bộ khung thực thi) 25

2.6 Distributed File System (Hệ thống file phân tán) 26

3 Thiết kế thuật toán cho MapReduce 31

3.1 Local Aggregation 32

Combiner và In-Mapper combining 33

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

3.1.2 3.2 Secondary Sorting 38

3.3 Thuật toán MapReduce trong xử lý dữ liệu quan hệ 39

Phép chiếu: 39

3.3.1 Phép chọn: 39

3.3.2 Phép gộp (Group by ) 40

3.3.3 Phép kết nối quan hệ (Relational Join) 40

3.3.4 4 Apache Hadoop 42

Trang 7

6

4.1 Giới thiệu 42

4.2 MapReduce Job 42

JobTracker 42

4.2.1 TaskTracker 42

4.2.2 4.3 Các hàm API cơ bản của Hadoop 45

4.4 Các kiểu dữ liệu và định dạng trong Hadoop 45

Các kiểu dữ liệu 45

4.4.1 Các định dạng đầu vào (input formats) 45

4.4.2 Các định dạng đầu ra (output formats) 48

4.4.3 4.5 Ứng dụng đếm từ (Wordcount) viết trong Hadoop 49

4.6 Các chương trình xây dựng trên nền Hadoop 51

4.7 Hadoop và CSDL quan hệ 52

5 Mã nguồn mở Lucene, Solr và Nutch 53

5.1 Mã nguồn mở Lucene 53

5.2 Mã nguồn mở Solr 55

5.3 Mã nguồn mở Nutch 55

5.4 MapReduce trong Nutch: 57

Cấu trúc dữ liệu chính trong Nutch 57

5.4.1 Các thuật toán MapReduce trong Nutch 58

5.4.2 6 Giới thiệu ứng dụng tìm kiếm truyện tranh 62

6.1 Tóm tắt: 62

6.2 Cơ sở lý thuyết 63

Phân tích dữ liệu text và lấy thông tin (Information Retrieval) 63

6.2.1 Các cách tiếp cận Text mining 70

6.2.2 6.3 Sơ đồ hoạt động 71

Giai đoạn thu thập dữ liệu 72

6.3.1 Giai đoạn tạo tài liệu và đánh chỉ mục 74

6.3.2 Giai đoạn tìm kiếm 75

6.3.3 6.4 Các plugin được viết thêm cho ứng dụng tìm kiếm truyện tranh 76

Plugin parse-htmlformangasearch 76 6.4.1

Trang 8

7

Plugin index-mangasearch 76

6.4.2 6.5 Trang web tìm kiếm 77

AJAX Solr 77

6.5.1 Các tính năng chính 77

6.5.2 7 Tổng kết 79

7.1 Kết quả đạt được 79

7.2 Những hạn chế 79

7.3 Hướng phát triển 79

8 Phụ lục 80

8.1 Hướng dẫn cài đặt và sử dụng Hadoop trên Windows 80

8.2 Hướng dẫn cài đặt và sử dụng Nutch 84

Trang 9

8

DANH MỤC HÌNH VẼ

Hình 1 Mô hình trực quan để định nghĩa Cloud Computing của NIST 12

Hình 2 Các loại dịch vụ Cloud Computing 14

Hình 3 Mô hình chia để trị 20

Hình 4 Hàm Map và Fold trong Functional Programming 21

Hình 5 Hai pha Map và Reduce của một MapReduce job 23

Hình 6 Mô hình MapReduce đầy đủ các thành phần 25

Hình 7 Kiến trúc của HDFS 27

Hình 8 Vai trò của NameNode và DataNode trong HDFS 29

Hình 9 Kiến trúc HDFS đầy đủ 30

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

Hình 11 Tiến trình hoạt động của chương trình WordCount 33

Hình 12 Phép chiếu 39

Hình 13 Phép chọn 39

Hình 14 Phép kết nối quan hệ 40

Hình 15 Sự liên hệ giữa JobTracker và TaskTracker 43

Hình 16 Sơ đồ đầy đủ của một Hadoop Cluster 43

Hình 17 Sơ đồ thực thi chi tiết một ứng dụng MapReduce trong Hadoop 44

Hình 18 Hệ thống phân cấp các lớp của InputFormat 47

Hình 19 Hệ thống phân cấp các lớp của OutputFormat 48

Hình 20 Cấu trúc của Hbase 51

Hình 21 Hive và Pig 52

Hình 22 Các thành phần Lucene hỗ trợ cho hệ thống tìm kiếm 53

Hình 23 Sơ đồ hoạt động của Nutch khi sử dụng như một Crawler 56

Hình 24 Sơ đồ đầy đủ của Nutch khi sử dụng như một Search Engine 57

Hình 25 Revelant and retrieved 64

Hình 26 Sơ đồ hoạt động tổng quát của ứng dụng tìm kiếm truyện tranh 71

Hình 27 Sơ đồ hoạt động chi tiết của giai đoạn thu thập dữ liệu 72

Hình 28 Sơ đồ hoạt động chi tiết của giai đoạn tạo chỉ mục 74

Hình 29 Sơ đồ hoạt động của giai đoạn tìm kiếm 75

Hình 30 Giao diện trang web khi tìm kiếm 77

Hình 31 Kết quả tìm kiếm khi sử dụng chức năng lọc 78

Trang 10

9

Hình 32 Kết quả khi tìm kiếm theo tác giả 78

Hình 33 Giao diện của Cygwin 81

Hình 34 Giao diện web của NameNode 82

Hình 35 Giao diện web của JobTracker 83

Hình 36 Giao diện của CDH 84

Trang 11

10

DANH MỤC TỪ VIẾT TẮT

Amazon EC2 Amazon‟s Elastic Compute Cloud

NIST National Institude of Standards and Technology

Trang 12

Theo Wikipedia:

“Mô hình tính toán trên mạng Internet, nơi mà các tài nguyên chia sẻ,

phần mềm và thông tin được cung cấp đến máy tính và nhiều thiết bị

khác theo nhu cầu, như một tiện ích công cộng”

Theo Gartner2:

“Một hình thức tính toán trong đó các năng lực công nghệ thông tin với

sự co giãn lớn được cung cấp „theo kiểu dịch vụ‟ đến với người dùng

bên ngoài qua các kỹ thuật Internet”

Theo Forrester3:

“Một năng lực IT chuẩn (các dịch vụ, phần mềm, hay hạ tầng) triển

khai qua mạng Internet theo hình thức trả phí trên người dùng và trên

dịch vụ”

Các định nghĩa trên đều định nghĩa Cloud Computing là một hệ phân bố, cung cấp các dạng tài nguyên ảo dưới dạng dịch vụ một cách linh động theo nhu cầu của người dùng trên môi trường internet Hoặc có thể hiểu Tính toán đám mây thông qua các từ khóa đại diện cho những đặc trưng chính: cung cấp qua internet - delivered over internet (web 2.0), tài nguyên theo nhu cầu - resource on demand (scalable, elastic,

1 National Institude of Standards and Technology http://www.nist.gov

2 Gartner, Inc (NYSE: IT) là công ty tư vấn và nghiên cứu hàng đầu thế giới trong lĩnh vực CNTT

3 Forrester Research, Inc (Nasdaq: FORR) một công ty nghiên cứu độc lập cung cấp các lời khuyên tiên phong cho các lãnh đạo trong lĩnh vực kinh doanh và công nghệ toàn cầu

Trang 13

Hình 1 Mô hình trực quan để định nghĩa Cloud Computing của NIST

Các đặc trưng của tính toán đám mây

1.1.2

1.1.2.1 Tự phục vụ theo nhu cầu (On-demand self-service)

Mỗi khi có nhu cầu, người dùng chỉ cần gửi yêu cầu thông qua trang web cung cấp dịch vụ, hệ thống của nhà cung cấp sẽ đáp ứng yêu cầu của người dùng Người dùng

có thể tự phục vụ yêu cầu của mình như tăng thời gian sử dụng server, tăng dung lượng lưu trữ… mà không cần phải tương tác trực tiếp với nhà cung cấp dịch vụ, mọi nhu cầu về dịch vụ đều được xử lý trên môi trường web (internet)

1.1.2.2 Truy xuất diện rộng (Broad network access)

Cloud Computing cung cấp các dịch vụ thông qua môi trường internet Do đó, người dùng có kết nối internet là có thể sử dụng dịch vụ Hơn nữa, Cloud Computing

ở dạng dịch vụ nên không đòi hỏi khả năng xử lý cao ở phía client, vì vậy người dùng

có thể truy xuất bằng các thiết bị di dộng như điện thoại, PDA, laptop… Với Cloud Computing người dùng không còn bị phụ thuộc vị trí nữa, họ có thể truy xuất dịch vụ

từ bất kỳ nơi nào, vào bất kỳ lúc nào có kết nối internet

1.1.2.3 Dùng chung tài nguyên (Resource pooling)

Tài nguyên của nhà cung cấp dịch vụ được dùng chung, phục vụ cho nhiều người dùng dựa trên mô hình “multi-tenant” Trong mô hình “multi-tenant”, tài nguyên sẽ

Trang 14

13

được phân phát động tùy theo nhu cầu của người dùng Khi nhu cầu của một khách hàng giảm xuống, thì phần tài nguyên dư thừa sẽ được tận dụng để phục vụ cho một khách hàng khác Ví dụ như khách hàng A thuê 10 CPU mỗi ngày từ 7 giờ đến 11 giờ, một khách hàng B thuê 10 CPU tương tự mỗi ngày từ 13 giờ đến 17 giờ thì hai khách hàng này có thể dùng chung 10 CPU đó

Cloud Computing dựa trên công nghệ ảo hóa, nên các tài nguyên da phần là tài nguyên ảo Các tài nguyên ảo này sẽ được cấp phát động theo sự thay đổi nhu cầu của từng khách hàng khác nhau Nhờ đó nhà cung cấp dịch vụ có thể phục vụ nhiều khách hàng hơn so với cách cấp phát tài nguyên tĩnh truyền thống

1.1.2.4 Khả năng co giãn nhanh chóng (Rapid elasticity)

Đây là tích chất đặc biệt, nổi bật và quan trọng nhất của Cloud Computing Đó là khả năng tự động mở rộng hoặc thu nhỏ hệ thống tùy theo nhu cầu của người dùng Khi nhu cầu tăng cao, hệ thống sẽ tự mở rộng bằng cách thêm tài nguyên vào Khi nhu cầu giảm xuống, hệ thống sẽ tự giảm bớt tài nguyên

Ví dụ: khách hàng thuê một Server gồm 10 CPU Thông thường do có ít truy cập nên chỉ cần 5 CPU là đủ, khi đó hệ thống quản lý của nhà cung cấp dịch vụ sẽ tự ngắt bớt 5 CPU dư thừa, khách hàng không phải trả phí cho những CPU dư thừa này (những CPU này sẽ được cấp phát cho các khách hàng khác có nhu cầu) Khi lượng truy cập tăng cao, nhu cầu tăng lên thì hệ thống quản lý của nhà cung cấp dịch vụ sẽ

tự “gắn” thêm CPU vào, nếu nhu cầu tăng vượt quá 10 CPU thì khách hàng phải trả phí cho phần vượt mức theo thỏa thuận với nhà cung cấp

Khả năng co giãn giúp cho nhà cung cấp sử dụng tài nguyên hiệu quả, tận dụng triệt để tài nguyên dư thừa, phục vụ được nhiều khách hàng Đối với người sử dụng dịch vụ, khả năng co giãn giúp họ giảm chi phí do họ chỉ trả phí cho những tài nguyên thực sự dùng

1.1.2.5 Điều tiết dịch vụ (Measured service)

Hệ thống Cloud Computing tự động kiểm soát và tối ưu hóa việc sử dụng tài nguyên (dung lượng lưu trữ, đơn vị xử lý, băng thông…) Lượng tài nguyên sử dụng

có thể được theo dõi, kiểm soát và báo cáo một cách minh bạch cho cả hai phía nhà cung cấp dịch vụ và người sử dụng

Các mô hình dịch vụ của tính toán đám mây

Trang 15

Đặc trưng

Cung cấp tài nguyên như là dịch vụ: bao gồm cả máy chủ, thiết bị mạng, bộ nhớ, CPU, không gian đĩa cứng, trang thiết bị trung tâm dữ liệu

Khả năng mở rộng linh hoạt

Chi phí thay đổi tùy theo thực tế

Nhiều người thuê có thể cùng dùng chung trên một tài nguyên

Cấp độ doanh nghiệp: đem lại lợi ích cho công ty bởi một nguồn tài nguyên tích toán tổng hợp

Các sản phẩm IaaS tiêu biểu

Amazon EC2 http://aws.amazon.com/ec2

Vào thời điểm hiện tại, dịch vụ IaaS chiếm thị phần lớn nhất là Amazon‟s Elastic Compute Cloud (Amazon EC2) Được triển khai từ tháng Tám năm 2006 và phát triển

kể từ đấy với việc thêm vào các dịch vụ khác nhau và sự hỗ trợ cho nhiều hệ điều hành Nó cung cấp giao diện Web cho phép truy cập các máy ảo

Khái niệm co dãn (Elastic) trong tên của sản phẩm là sự khác biệt, nó ám chỉ khả năng EC2 có thể tăng hay giảm tài nguyên hạ tầng tương ứng với nhu cầu, và chi trả

Trang 16

Tích hợp dịch vụ web và cơ sở dữ liệu

Hỗ trợ cộng tác nhóm phát triển công cụ hỗ trợ tiện tích

Các sản phẩm tiêu biểu

Các sản phẩm dịch vụ nền tảng có thể chia làm ba nhóm:

Nhóm nền tảng hỗ trợ vòng đời phát triển tích hợp (Integrated lifecycle platforms)

Các nền tảng này cung cấp cho các nhà phát triển một môi trường đầy đủ cho toàn

bộ vòng đời phát triển ứng dụng: máy hỗ trợ luồng làm việc, các công cụ phát triển, môi trường kiểm tra, công cụ triển khai v.v… Tiêu biểu như:

o Google App Engine http://code.google.com/appengine

o Microsoft Windows Azure www.microsoft.com/windowsazure

Nhóm nền tảng hỗ trợ vòng đời phát triển đặc thù (Anchored lifecycle platforms)

Trang 17

Không phải nền tảng đám mây nào cũng cung cấp một môi trường hỗ trợ đầy đủ cho vòng đời phát triển, nhóm này chỉ tập trung vào cung cấp một số khả năng nhất định, một vài khả năng chỉ là các công cụ Nhóm này gồm các sản phẩm tiêu biểu:

o Dịch vụ hỗ trợ kiểm tra trên nền đám mây: HP, IBM, công ty độc lập như iTKO và SOASTA v.v…

o Dịch vụ quản lý: RightScale là công ty quản lý cho Amazon

o Dịch vụ tùy biến: WaveMaker hỗ trợ tùy biến ứng dụng Web

o Dịch vụ phát triển mạng xa hội: Như dịch vụ blog Wordpress

1.1.3.3 Dịch vụ phần mềm (Software-as-a-Service SaaS )

Định nghĩa

Là các năng lực nhằm đem đến cho người dùng thông qua các ứng dụng thực thi trên nền tảng đám mây của nhà cung cấp phần mềm Các ứng dụng này có thể truy cập từ nhiều thiết bị khác nhau thông qua một giao diện như trình duyệt web (ví dụ như các dịch vụ email nền web) Người dùng không phải quản lý hoặc kiểm soát hạ tầng đám mây bên dưới và cả những ứng dụng đơn lẻ, ngoại trừ một số quyền cấu hình tùy chỉnh ứng dụng hạn chế cho một vài cá nhân cụ thể

Đặt trưng

Được xây dựng trên kiến trúc cho nhiều người thuê Nghĩa là nhiều khách hàng

có thể cùng chạy một thể hiện/dịch vụ đặt trên một máy chủ từ xa

Thông thường truy cập qua giao diện Web

Mô hình kinh doanh là dạng: hosted-Người cung cấp, vận hành CRM không phải là công ty có nhu cầu sử dụng ứng dụng mà là công ty khác

Phương thức thanh toán theo hàng phí hàng tháng Thường kèm theo chi phí khởi chạy ứng dụng hoặc chi phí tùy chỉnh cấu hình, tuy nhiên chi phí bảo trì thường đã tính trong phí hàng tháng

Các sản phẩm tiêu biểu

Có rất nhiều sản phẩm SaaS, tuy nhiên chúng có thể được chia làm ba nhóm:

Gói phần mềm (Packaged Software): Chiếm thị phần lớn nhất, gồm các sản phẩm ERP, CRM , SCM v.v… Các sản phẩm tiêu biểu gồm:

Trang 18

17

o Netsuitt hay Salesforce.com, Intuit, RightNow, Concur, SugarCRM, Microsoft với Dynamics package, SAP với dịch vụ By Design, Oracle với

On Demand dựa trên Siebel

Phần mềm cộng tác (Collaborative software): Hỗ trợ cho các hình thức làm việc và cộng tác qua mạng giữa các cá nhân hoặc thành viên tổ chức Các sản phẩm tiêu biểu:

o Cùng nhiều sản phẩm tiện ích khác: Chia sẻ ảnh, nghe nhạc v.v…

Các lợi ích của tính toán đám mây

1.1.4

Giảm chi phí đầu tư và tỷ lệ phí tổn (Reduced Investment and Proportional Costs)

Gia tăng tính mở rộng (Increased Scalability)

Gia tăng khả năng đáp ứng và khả năng tin cậy (Increased Availability and Reliability)

Ảnh hưởng của sự phát triển các dịch vụ đám mây đến MapReduce 1.1.5

“Everyting as a Service” được hướng theo nhu cầu của các hiệu quả kinh doanh tốt hơn nhưng khả năng mở rộng và sự mềm dẻo cũng đóng vai trò quan trọng Cloud Computing giúp cho các tổ chức có thể mở rộng hoặc thu hẹp một cách dễ dàng mà không cần có kế hoạch từ trước Cloud services, cũng như MapReduce đại diện cho sự tìm kiếm một cấp độ trừu tượng thích hợp và lợi ích của việc chia sẻ sức lao động IaaS là một mức trừu tượng về phần cứng vật lý – một tổ chức có thể thiếu vốn, chuyên gia và sự quan tâm đến việc hoạt động các Datacenter, vì thế họ bỏ tiền thuê các Cloud Provider làm việc đó Điều này cũng tương tự với PaaS và SaaS Cũng cùng theo dòng chảy, mô hình lập trình MapReduce là một mức trừu tượng mạnh mẽ

để tách biệt “what” (xử lý cái gì) ra khỏi “how” (xử lý như thế nào) trong việc xử lý

dữ liệu lớn

Trang 19

18

1.2 Các ý tưởng của MapReduce

Giải quyết các bài toán dữ liệu lớn đòi hỏi cách tiếp cận riêng biệt mà nhiều khi đối lập với mô hình tính toán truyền thống Dưới đây là các ý tưởng chính của MapReduce:

Scale “out” not “up” (mở rộng chứ không nâng cấp): Để tăng sức mạnh xử lý

thay vì nâng cấp bộ vi xử lý cũng như khả năng lưu trữ của máy tính (mua các server

có khả năng xử lý cao – high-end server) giải pháp đưa ra là tăng số lượng các server thông dụng (low-end server) Giải pháp này kinh tế hơn nhiều so vì nó chỉ bổ sung một số máy tính và tận dụng được các server sẵn có trong khi giải pháp nâng cấp có thể dẫn đến việc mua sắm mới lại toàn bộ các server Hơn nữa giá thành của một server chuyên dụng đắt hơn nhiều so với một cụm máy tính thông thường với khả năng xử lý tương đương

Assume failures are common (chấp nhận việc xảy ra lỗi là thường xuyên): Với

sự gia tăng về số lượng của các server trong một cluster, lỗi xảy ra là điều bình thường

Do đó các dịch vụ phân tán trên nhiều server phải tính toán đến các lỗi về phần cứng cũng như phần mềm thường xuyên xảy ra Mô hình lập trình MapReduce có khả năng

xử lý các lỗi thông qua một số cơ chế như tự động khởi động lại các task trên cluster node khác nhau

Move processing to the data (đưa xử lý đến dữ liệu): Trong các ứng dụng tính

toán hiệu năng cao truyền thống (High – Prefomance Computing - HPC) Thông thường, một siêu máy tính có các nút xử lý (processing node) và các nút lưu trữ (storage node) được kết nối với nhau qua một kết nối tốc độ cao Nhiều công việc nặng nề về dữ liệu không phải là những đòi hỏi xử lý cao Do đó việc tách rời việc lưu trữ dữ liệu và tính toán tạo ra sự thắt cổ chai trong mạng Do đó sẽ hiệu quả hơn nếu chuyển sự thực thi xử lý đến dữ liệu thay vì chuyển dữ liệu đến nơi xử lý chúng MapReduce sử dụng một kiến trúc trong đó các bộ xử lý và đĩa lưu trữ được đặt cùng với nhau Trong sự thiết lập như vậy, chúng ta có thể tận dụng lợi thế của dữ liệu cục

bộ bằng cách chạy đoạn mã trên bộ xử lý một cách trực tiếp trên khối dữ liệu cần xử

lý Hệ thống tập tin phân tán có nhiệm vụ quản lý dữ liệu mà MapReduce xử lý

Process data sequentially and avoid random access (xử lý dữ liệu tuần tự và tránh truy cập ngẫu nhiên): Trong trường hợp xử lý một lượng lớn dữ liệu, dung

lượng bộ nhớ thường không đủ cho toàn bộ dữ liệu xử lý Do đó dữ liệu phải được lưu trữ trên đĩa Thời gian cho việc truy cập ngẫu nhiên thường hạn chế bởi sự di chuyển của đầu đọc cũng như tốc độ đĩa do đó làm chậm công việc xử lý Để tránh hạn chế này, MapReduce được thiết kế để xử lý các khối dữ liệu của một tập dữ liệu lớn

Hide system-level details from the application developer (che giấu mức chi tiết

hệ thống đối với nhà phát triển): Để dễ dàng cho các lập trình viên khi viết ứng

dụng xử lý phân tán, MapReduce che giấu sự thực thi phức tạp bên dưới Thay vào đó,

Trang 20

19

MapReduce cung cấp một mô hình lập trình trừu tượng với các interface đơn giản được định nghĩa sẵn

1.3 Sự quan trọng của MapReduce

Về tính thiết thực, MapReduce cung cấp một công cụ rất hiệu quả để giải quyết các bài toán dữ liệu lớn Ngoài ra, MapReduce còn quan trọng trong cách nó đã thay đổi việc sắp xếp tính toán trên quy mô lớn

Nói một cách công bằng thì MapReduce không phải là mô hình tính toán song song đầu tiên được đưa ra Mô hình phổ biến nhất trong lý thuyết khoa học máy tính

có từ mấy thập kỷ trước là PRAM4 (Parallel Random Access Machine) Trong mô hình này, một lượng lớn các vi xử lý chia sẻ một bộ nhớ lớn không giới hạn, hoạt động đồng thời trên một lượng dữ liệu chia sẻ để tạo ra kết quả Các mô hình khác như LogP5

và BSP6 (Bulk Synchronous Parallel), tuy nhiên không có mô hình nào có được sự thành công như MapReduce

MapReduce là mức trừu tượng thành công nhất trên các tài nguyên tính toán mở rộng cho đến nay Tuy nhiên, mức trừu tượng giải quyết sự phức tạp bằng cách che dấu sự chi tiết và đưa ra các hành vi được thiết kế tốt cho người sử dụng ứng với mức trừu tượng đó Chính vì thế, mức trừu tượng không thể hoàn hảo, nó làm cho một số công việc dễ hơn, nhưng cũng làm một số công việc khác khó hơn hoặc có khi là không thể thực hiện được Vấn đề này làm cho việc ứng dụng MapReduce trong một

số bài toán cũng có mặt hạn chế Điều đó có nghĩa MapReduce không phải là mô hình cuối cùng trong lớp mô hình lập trình mới cho phép xử lý tính toán trên quy mô lớn một cách hiệu quả

Trang 21

20

Chương 2: CƠ BẢN VỀ MAPREDUCE

2 Cơ bản về MapReduce

Phương pháp thường được sử dụng để giải quyết các bài toán dữ liệu lớn hiện nay

là chia để trị Ý tưởng là phân mảnh một bài toán lớn thành các bài toán con nhỏ Các bài toán nhỏ độc lập với nhau để có thể được giải quyết song song bởi các workers khác nhau – workers có thể là các tiến trình trong bộ vi xử lý hoặc các bộ vi xử lý trong trong bộ vi xử lý đa nhân, các bộ xử lý trên một máy, các máy trên một cụm máy tính Các kết quả trung gian từ các worker cụ thể sẽ được gộp lại để tạo thành kết quả cuối cùng

Chia để trị:

Hình 3 Mô hình chia để trị

Trang 22

21

2.1 Nguồn gốc từ Functional Programming

MapReduce có nguồn gốc từ lập trình hàm (Functional Programming) Ví dụ điển hình như các ngôn ngữ lập trình Lisp7 và ML8 Tính năng chính của lập trình hàm là khái niệm về các hàm bậc cao (higher-order functions), hoặc các hàm chấp nhận tham

số của nó là một hàm Hai hàm bậc cao thường được xây dựng sẵn là Map và Fold Như hình dưới, cho một danh sách, Map lấy tham số là một hàm f (có 1 tham số)

và áp dụng cho toàn bộ phần tử trong danh sách Cho một danh sách, Fold lấy tham số

là một hàm g (có 2 tham số) và một giá trị khởi tạo: g đầu tiên được áp dụng cho giá trị khởi tạo và phần tử đầu tiên trong danh sách, kết quả được lưu trong biến trung gian, tiếp tục dùng biến trung gian này để phần tử thứ 2 trong danh sách để làm tham

số cho hàm g, công việc tiếp lặp đi lặp lại đến khi hết toàn bộ danh sách Fold trả về kết quả cuối cùng là giá trị cuối cùng của biến trung gian

Hình 4 Hàm Map và Fold trong Functional Programming

Hàm Map trong MapReduce tương ứng với hàm Map, hàm Reduce tương ứng với hàm Fold trong lập trình hàm

7 http://en.wikipedia.org/wiki/Lisp_(programming_language)

8 http://en.wikipedia.org/wiki/ML_(programming_language)

Trang 23

22

2.2 Cấu trúc dữ liệu trong MapReduce

Các cặp key-value là cấu trúc dữ liệu cơ bản trong MapReduce Key và value có thể nhận các giá trị có kiểu cơ bản như số nguyên, số thực, chuỗi hay có thể nhận các kiểu giá trị có cấu trúc do người dùng định nghĩa

Một phần quan trọng của giải thuật MapReduce là việc xác định cấu trúc key-value trên các tập dữ liệu cần xử lý Ví dụ, đối với một tập các trang web, các key có thể là các URL và các value có thể là nội dung của các trang HTML, đối với một đồ thị, key

có thể là node id và value có thể là danh sách kề của node đó Trong một số thuật toán key được sử dụng để phân biệt các bộ dữ liệu (giống như khái niệm khóa trong cơ sở

dữ liệu), trong khi ở một số thuật toán, các input key không quan trọng và thường được bỏ qua

2.3 Mapper và Reducer – hai thành phần cơ bản trong MapReduce

Trong MapReduce, lập trình viên định nghĩa một lớp Mapper và một lớp Reducer với hai hàm cơ bản sau:

map(k1, v1) → [(k2, v2)]

reduce(k2, [v2]) → [(k3, v3)]

Ký hiệu […] để chỉ một danh sách các giá trị Đầu vào của một công việc MapReduce (MapReduce job) là dữ liệu được lưu trữ trên hệ thống file phân tán (Distributed File System) Hàm map và reduce lần lượt được cài đặt trong hai lớp Mapper và Reducer Mapper được áp dụng cho mọi cặp key-value để tạo ra các cặp key-value trung gian Reducer được áp dụng cho tất cả các giá trị (value) ứng với cùng một key trung gian để tạo các cặp key-value ở đầu ra Giữa 2 pha map và reduce là một phép xử lý nhóm phân tán các cặp key-value trung gian dựa trên các key Dữ liệu trung gian được gởi đến mỗi reducer theo thứ tự được sắp xếp bởi các key Tuy nhiên không có một quan hệ thứ thự nào được thiết lập cho các key giữa các reducer với nhau Các cặp key-value ở đầu ra của các reducer được ghi vào hệ thống file phân tán (các cặp key-value trung gian được bỏ qua) Đầu ra cuối cùng là r file trên hệ thống file phân tán, trong đó r là số các reducer Trong phần lớn các trường hợp, việc tổng hợp các đầu ra của các reducer là không cần thiết bởi vì r files thường lại là đầu vào cho một MapReduce job khác Hình 5 mô tả 2 giai đoạn của một MapReduce job:

Trang 24

23

Hình 5 Hai pha Map và Reduce của một MapReduce job

Ví dụ minh họa MapReduce:

Ứng dụng đếm từ (Word count) trong một tập văn bản

Input: Tập văn bản

Outut: Danh sách các từ cùng số lần xuất hiện của chúng trong tập văn bản

class Mapper

method Map(docId a, doc d)

for all term t ϵ doc d do

Emit(term t, count 1)

Trang 25

Emit(term t, count sum)

Hàm Map duyệt qua từng từ trong tập văn bản ứng với mỗi từ sẽ tạo ra một cặp key-value với key chính là từ vừa gặp và value = 1 Hàm Reduce nhận đầu vào là một

từ (term) và và danh sách tần số ci bắt gặp của term đó (các giá trị thực là các số 1), Reduce chỉ đơn giản cộng tất cả các giá trị ci trong danh sách counts

2.4 Partitioner và Combiner

Phần trên chúng ta đã làm đơn giản cái nhìn về MapReduce, ngoài hai thành phần Mapper và Reducer, thường thì lập trình viên phải chỉ thêm 2 thành phần phụ nữa:

Thành phần Partitioner có nhiệm vụ chia không gian khóa (key) trung gian sau

bước Map và gán các cặp key-value trung gian tới các Reduce Hay nói một cách khác, partitioner chỉ định tác vụ (task) mà cặp key-value trung gian phải được chuyển đến

đó Trong mỗi Reducer, các khóa được xử lý theo thứ tự đã được sắp xếp Partitioner đơn giản nhất bao gồm việc tính toán giá trị băm của key và sau đó thực hiện phép chia lấy phần dư của giá trị này với số lượng reducer Do đó các partitioner có thể gán một key và danh sách value của nó tới một reducer có số hiệu là giá trị băm vừa tính được Thông thường hàm băm phải được tính toán sao cho số lượng key gởi đến mỗi reducer xấp xỉ bằng nhau Tuy nhiên partitioner không chú ý đến giá trị value trong cặp key-value, do đó có thể xảy ra tình trạng phân bố dữ liệu không đồng đều trên các reducer

Thành phần Combiner trong MapReduce đóng vai trò như một thành phần tối ưu

giúp giảm tải việc chuyển dữ liệu giữa từ các Mapper đến các Reducer Có thể xem combiner như là một reducer nhỏ (mini-reducer) đặt tại đầu ra của mapper, trước pha trộn và sắp xếp (shuffle and sort phase) gởi các cặp key-value tới các reducer Mỗi combiner hoạt động cô lập và do đó nó không truy xuất đến các cặp key-value của các mapper khác Đầu vào của combiner là các cặp key-value từ đầu ra của mapper và nó

xử lý tất cả các cặp key-value có key giống nhau để chuyển thành cặp key-value (cùng định dạng như ở đầu vào của combiner có key không thay đổi nhưng value đã bị biến đổi) ở đầu ra Tuy nhiên, Reducer và Combiner không thể hoán đổi vai trò cho nhau

Trang 26

25

Hình 6 Mô hình MapReduce đầy đủ các thành phần

2.5 The execution framework (Bộ khung thực thi)

Một trong những ý tưởng quan trọng nhất trong MapReduce là tách biệt việc xử lý phân tán cái gì (what) ra khỏi việc xử lý phân tán như thế nào (how) Một chương trình MapReduce (Mapreduce Job), bao gồm đoạn mã cho Mapper, Reducer và có thể thêm Partioner và Combiner được đóng gói lại với nhau với các tham số cấu hình (ví

dụ vị trí các tập tin đầu vào và nơi lưu trữ đầu ra) Nhà phát triển đưa chương trình lên cho node quản lý tác vụ trong cluster (trong Hadoop gọi là JobTracker) và execution framework xử lý tất cả những thứ khác: xử lý trong suốt các vấn đề của việc thực thi

mã lệnh phân tán Các chức năng chính của Execution framework bao gồm:

Scheduling (lập lịch) Mỗi chương trình MapReduce được chia nhỏ thành các đơn

vị nhỏ gọi là tasks Ví dụ, một map task có thể chịu trách nhiệm xử lý một khối các

Trang 27

26

cặp key-value nào đó (trong Hadoop gọi là input split), tương tự, một reduce task có thể xử lý một phần của không gian khóa

Data/code co-location (di chuyển dữ liệu và mã lệnh) Ý tưởng của MapReduce

là di chuyển mã lệnh, không phải di chuyển dữ liệu Tuy nhiên, trong một số trường hợp – để cho việc tính toán có thể thực hiện chúng ta phải đưa dữ liệu đến mã lệnh Trong MapReduce, việc này phụ thuộc phần lớn vào hệ thống file phân tán Để có được việc cục bộ dữ liệu, scheduler phải khởi động task tại node có chứa khối dữ liệu cần thiết cho task đó Nếu không thể được (do đang chạy quá nhiều task), một task mới sẽ được khởi tạo ở node khác và dữ liệu được truyền qua mạng đến node đó để xử

Synchronization (đồng bộ hóa) Việc đồng bộ hóa chỉ đến các cách thức để các

tiến trình đang xử lý đồng thời có thể hợp lại (“join up”), ví dụ chia sẻ kết quả trung gian hoặc trao đổi thông tin trạng thái Trong MapReduce, việc đồng bộ hóa xảy ra giữa pha map và reduce Các cặp key-value trung gian phải được gộp theo khóa, điều này đạt được bằng một phép toán sắp xếp phân tán lớn trên tất cả các node đã chạy map tasks và tất cả các node sẽ chạy reduce tasks Dữ liệu trung gian được copy qua mạng, vì thế tiến trình này thường được gọi là “shuffle and sort” Một chương trình

MapReduce với m mapper và r reducer có thể có tới m x r phép toán copy vì mỗi

mapper có thể có đầu ra đến tất cả các reducer

Error and fault handling (xử lý lỗi) MapReduce framework phải hoàn thành tất

cả các tasks trong môi trường xảy ra lỗi thường xuyên Vì MapReduce được thiết kế dành cho các cụm máy giá rẻ (low-end) nên việc thực thi có thể sẽ dễ xảy ra lỗi, đặc biệt trong các cụm lớn, lỗi đĩa cứng và RAM sẽ xảy ra thường xuyên MapReduce frame work phải xử lý được các việc này

2.6 Distributed File System (Hệ thống file phân tán)

Chúng ta đã tập trung nhiều vào việc xử lý dữ liệu lớn Nhưng một điều không kém phần quan trọng đó là: nếu không có dữ liệu thì chúng ta không có gì để xử lý cả Trong tính toán hiệu năng cao (HPC – High-Performance Computing) và các kiến trúc cụm truyền thống, việc lưu trữ được xem là một thành phần tách biệt với việc tính toán Có nhiều cách cài đặt khác nhau, trong đó có Network-Attach Storage (NAS) và Storage Area Network (SAN) là được sử dụng thường xuyên Tuy nhiên với cách cài đặt nào đi nữa thì chu trình xử lý vẫn không thay đổi: các node tính toán lấy đầu vào

từ nơi lưu trữ, nạp dữ liệu vào bộ nhớ, xử lý dữ liệu và ghi kết quả ngược trở lại Khi kích thước dữ liệu càng tăng lên thì khả năng xử lý cũng phải tăng lên Nhưng khi khả năng xử lý tăng thì sự liên kết giữa node lưu trữ và node xử lý lại trở thành một trở ngại Lúc này để có hiệu năng cao thì cần phải có đường truyền mạng tốc độ cao (vd: 10 gigabit Ethernet, InfiniBand) Đây không phải là giải pháp hiệu quả về

Trang 28

27

kinh tế Một cách khác đó là bỏ qua sự tách biệt giữa lưu trữ và tính toán Đây chính là

ý tưởng của hệ thống file phân tán bên dưới MapReduce Google File System (GFS)

là cài đặt hệ thống file phân tán riêng của Google và Hadoop Distributed File System (HDFS) là một cài đặt mã nguồn mở của GFS

Ý tưởng chính là chia dữ liệu thành các khối và sao lưu thành các khối đó trên đĩa của các node trong cluster (mặc định là 3) Các khối dữ liệu thường có kích thước mặc định là 64MB Hệ thống file phân tán sử dụng kiến trúc master-slave, master duy trì không gian tên file (metadata, cấu trúc thư mục, ánh xạ file đến block, vị trí các block, quyền truy cập) và slave quản lý các khối dữ liệu cụ thể Trong GFS, master được gọi

là GFS Master và slave được gọi là GFS ChunkServer Trong Hadoop, master được gọi là NameNode và slave được gọi là DataNode Cả 2 hệ thống này hoạt động hầu như giống nhau, tuy nhiên, trong HDFS thì không có ghi thêm vào file và hiệu suất của HDFS cũng hơi chậm hơn so với GFS

Kiến trúc của HDFS:

Hình 7 Kiến trúc của HDFS Nhiệm vụ của NameNode:

Namespace management (Quản lý không gian tên) NameNode chịu trách

nhiệm duy trì không gian tên file, bao gồm metadata, cấu trúc thư mục, ánh xạ file đến block, vị trí của các block và quyền truy cập Các dữ liệu này được nạp vào bộ nhớ để truy cập cho nhanh

Trang 29

28

Coordinating file operations (Định vị các phép toán trên file) Namenode điều

khiển các ứng dụng khách (clients) đến datanode để đọc và cấp phát các block thích hợp để ghi Tất cả việc trao đổi diễn ra trực tiếp giữa client và datanode Khi một file

bị xóa, HDFS không lập tức thu lại không gian lưu trữ, thay vào đó, các block sẽ được thu gom từ từ (lazily garbage collected)

Maintain overall health of the file system (Duy trì sự hoạt động của hệ thống file) Định kì, namenode sẽ gửi các thông điệp báo hiệu (heartbeat messages) đến

datanode để bảo đảm sự toàn vẹn của hệ thống Nếu namenode thấy một block nào có

số bản sao thập hơn yêu cầu, nó sẽ điều khiển để tạo ra các bản sao mới Cuối cùng, namenode chịu trách nhiệm cân bằng hệ thống file Trong các phép toán thông thường, một datanode có thể sẽ chứa nhiều blocks hơn những cái khác, namenode sẽ cân bằng bằng cách chuyển các blocks từ các datanode có nhiều blocks đến các datanode có ít blocks hơn

Thiết kế có một master của GFS và HDFS là một điểm yếu dễ thấy Vì nếu master

bị lỗi thì toàn bộ hệ thống và tất các MapReduce jobs sẽ bị dừng Yếu điểm này được giảm bớt đi một phần nhờ vào bản chất của các phép toán của hệ thống file: không có

dữ liệu đi qua NameNode và toàn bộ sự giao tiếp của clients và DataNode chỉ chứa metadata Vì thế, NameNode cũng ko hẳn là một yếu điểm, trong hầu hết trường hợp đều tránh được lỗi do tràn dữ liệu Trong thực tế, điểm chết (Single Point Of Failure - SPOF) này ko phải là một hạn chế lớn – với việc theo dõi NameNode thường xuyên thì thời gian bị lỗi sẽ không quá lâu trong các triển khai thương mại Hơn nữa, Hadoop cũng được thiết kế thêm một NameNode dự phòng (Secondary NameNode) để có thể chuyển đổi nhanh chóng khi NameNode bị lỗi

Nhiệm vụ của DataNode:

DataNode có nhiệm vụ đọc và ghi các block của HDFS vào hệ thống file cục bộ Khi muốn đọc hay ghi một file HDFS, file này sẽ được chia nhỏ thành các block và namenode sẽ cho client biết DataNode nào đang chứa block nào Client truy cập trực tiếp đến DataNode để lấy block dữ liệu cần xử lý Ngoài ra, các DataNode cũng giao tiếp với nhau để sao lưu dữ liệu

Trang 30

29

Hình 8 Vai trò của NameNode và DataNode trong HDFS

Hình 8 thể hiện vai trò của NameNode và DataNode Trong hình này, ta có hai files: một tại /user/chuck/data1 và một tại /user/james/data2 File 1 có 3 block 1, 2, 3

và file 2 có 2 block 4 và 5 Nội dung của các file được lưu trữ phân tán giữa các DataNode, mỗi block có 3 bản sao Ví dụ, block 1 được sao lưu trên 3 DataNode bên phải, điều này đảm bảo rằng nếu một DataNode bị lỗi thì vẫn có thể đọc được file trên các DataNode khác

Các DataNode liên tục báo cáo lên NameNode Sau khi khởi tạo, mỗi DataNode sẽ báo cáo lên NameNode các block nó đang lưu trữ Sau khi hoàn tất, DataNode sẽ tiếp tục liên lạc với NameNode để cung cấp thông tin về sự thay đổi dữ liệu cục bộ và nhận các chỉ thị để tạo, di chuyển hay xóa các block từ đĩa cục bộ

Nhiệm vụ của Secondary NameNode:

Secondary NameNode (SNN) là một tiến trình nền (daemon) để hỗ trợ cho việc theo dõi trạng thái của HDFS cluster Cũng như NameNode, mỗi cluster cũng có một SNN và thường chạy trên một server riêng Không có DataNode hoặc TaskTracker nào chạy trên server này Điểm khác của SNN so với NameNode là nó không nhận và lưu lại sự thay đổi thời gian thực của HDFS Thay vào đó, nó liên hệ trực tiếp với NameNode để lưu lại trạng thái của HDFS sau một khoảng thời gian do người dùng cấu hình

Trang 31

30

Như đã nói ở trên, NameNode là một yếu điểm của Hadoop cluster và SNN giúp giảm thiểu thời gian lỗi và mất dữ liệu Tuy nhiên, khi một NameNode gặp sự cố, thì cần có con người can thiệp và cấu hình lại cluster để SNN có thể trở thành NameNode

Hình 9 Kiến trúc HDFS đầy đủ

Trang 32

31

Chương 3: THIẾT KẾ THUẬT TOÁN CHO

MAPREDUCE

3 Thiết kế thuật toán cho MapReduce

Phần lớn sức mạnh của MapReduce đến từ sự đơn giản: để chuẩn bị cho dữ liệu đầu vào, lập trình viên chỉ cần cài đặt mapper và reducer, hoặc thêm partioner và combiner Tất cả phần thực thi được xử lý trong suốt bởi Execution framework – trên các clusters từ một đến hàng nghìn node, trên các tập dữ liệu từ gigabytes đến petabytes Tuy nhiên, nó cũng có nghĩa là bất cứ thuật toán nào người lập trình muốn phát triển cũng phải được diễn tả theo một cách nghiêm ngặt theo các thành phần đã được định nghĩa sẵn Điều đó có nghĩa không phải bất kỳ thuật toán nào cũng có thể chuyển sang mô hình lập trình này Mục đích của chương này là cung cấp, chủ yếu qua các ví dụ để thiết kế thuật toán cho MapReduce

Đồng bộ hóa có lẽ là phần khó nhất của việc thiết kế thuật toán cho MapReduce (và các thuật toán song song hoặc phân tán nói chung) Trong các bài toán xử lý song song, các tiến trình trong các node khác nhau trong một cụm tại một thời điểm nào đó phải dồn lại với nhau, ví dụ: phân tán các kết quả từng phần từ các nodes tạo ra chúng đến các nodes sẽ sử dụng chúng Với một MapReduce Job, chỉ có một lần đồng bộ hóa trên toàn cluster – giai đoạn sort và shuffle, lúc mà các cặp key-value trung gian được copy từ mapper đến reducer và gộp theo key Ngoài lúc đó, mapper và reducer chạy độc lập và không có cơ chế liên lạc trực tiếp giữa chúng Hơn nữa, người lập trình có rất ít sự điều khiển trên nhiều khía cạnh của sự thực thi, ví dụ:

Chỉ định Node cho một Mapper hoặc Reducer cụ thể

Chỉ định thời gian bắt đầu và kết thúc của Mapper hoặc Reducer

Chỉ định Mapper sẽ xử lý cặp key-value cụ thể

Chỉ định Reducer sẽ xử lý các cặp key-value trung gian

Tuy nhiên, lập trình viên cũng có một số kĩ thuật để điều khiển việc thực thi và quản lý dòng dữ liệu trong MapReduce Bao gồm:

Khả năng xây dựng các cấu trúc dữ liệu phức tạp dùng làm keys và values để lưu trữ và giao tiếp các kết quả từng phần

Khả năng thực thi các đoạn mã của người dùng lúc bắt đầu và kết thúc map và reduce task

Khả năng bảo toàn trạng thái giữa các mapper và reducer qua nhiều khóa đầu vào hoặc trung gian

Trang 33

32

Khả năng điều khiển thứ tự sắp xếp của các keys trung gian, do đó có thể biết được thứ tự các key mà reducer sẽ nhận

Khả năng điều khiển phân mảnh không gian khóa, do đó có thể biết được thứ

tự tập khóa mà một reducer nào đó sẽ nhận

Một MapReduce Job không thể biểu diễn tất cả các thuật toán Người lập trình thường phải phân tích thuật toán phức tạp thành một chuỗi các jobs, yêu cầu chuỗi các

dữ liệu liên tục, vì thế đầu ra của một job trở thành đầu vào của job kế tiếp Nhiều thuật toán thường có bản chất lặp đi lặp lại, đòi hỏi sự thực thi lặp đi lặp lại để đạt được một ngưỡng hội tụ cần thiết

Chương này sẽ giải thích các kĩ thuật khác nhau để điều khiển sự thực thi lệnh và dòng dữ liệu có thể được áp dụng để thiết kế thuật toán trong MapReduce

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

Trang 34

33

Hình 10 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 (state) của đối tượng được bảo toàn qua các lần gọi hàm map/reduce

Combiner và In-Mapper combining

3.1.1

Để 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

Chương trình Wordcount cơ bản:

Hình 11 Tiến trình hoạt động của chương trình WordCount

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 [C 1, C 2, …])

Sum ← 0

For all count c in counts [C 1, C 2, …] do

Sum ← Sum + c EMIT(term t, count s)

Trang 35

34

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

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ó 2 lợi ích khi sử dụng

mẫu thiết kế này:

Trang 36

35

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

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ớ

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

3.1.2

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

Computing the Mean: Version 1

Class MAPPER

Method MAP(string t, integer r)

EMIT(string t, integer r) Class REDUCER

Trang 37

36

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

r avg ← Sum/Cnt EMIT(string t, integer r avg)

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

r avg ← Sum/Cnt

Trang 38

37

EMIT(string t, integer r avg)

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

r avg ← Sum/Cnt EMIT(string t, integer r avg)

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

Trang 39

38

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}))

3.2 Secondary Sorting

MapReduce sắp xếp các cặp key-value theo keys trong pha Shuffle and Sort, sẽ rất thuận tiện nếu việc tính toán ở reducer dựa vào thứ tự sắp xếp Tuy nhiên, làm cách nào để ngoài sắp xếp theo key, ta sắp theo theo value nữa? MapReduce của Google có tính năng secondary được xây dựng sẵn để đảm bảo các values được sắp xếp khi đến Reducer Tuy nhiên, Hadoop chưa có tính năng này Có 2 cách để dùng secondary sort trong Hadoop: một là lưu tạm trong bộ nhớ sau đó sắp xếp, tuy nhiên cách này sẽ bị giới hạn khi dữ liệu trong bộ nhớ quá lớn Cách thứ hai là sử dụng mẫu thiết kế Value-to-key tạo nên các composite key (khóa kết hợp) (k,v1)

Trang 40

Map trên các bộ dữ liệu và đƣa lên bộ dữ liệu mới với các thuộc tính thích hợp, không cần Reducer, trừ khi cần gộp nhóm lại hoặc xếp lại các bộ dữ liệu Hoặc có thể

sử dụng cách khác là thực hiện phép chiếu bên Reducer

Phép chọn:

3.3.2

Hình 13 Phép chọn Phép chọn trong MapReduce

Chỉ cần sử dụng hàm Map, đƣa vào tập dữ liệu vào lấy ra các bộ dữ liệu thỏa điều kiện

Ngày đăng: 31/08/2014, 08:32

HÌNH ẢNH LIÊN QUAN

Hình 1. Mô hình trực quan để định nghĩa Cloud Computing của NIST  Các đặc trưng của tính toán đám mây - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 1. Mô hình trực quan để định nghĩa Cloud Computing của NIST Các đặc trưng của tính toán đám mây (Trang 13)
Hình 2. Các loại dịch vụ Cloud Computing - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 2. Các loại dịch vụ Cloud Computing (Trang 15)
Hình 3. Mô hình chia để trị - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 3. Mô hình chia để trị (Trang 21)
Hình 4. Hàm Map và Fold trong Functional Programming - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 4. Hàm Map và Fold trong Functional Programming (Trang 22)
Hình 5. Hai pha Map và Reduce của một MapReduce job - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 5. Hai pha Map và Reduce của một MapReduce job (Trang 24)
Hình 6. Mô hình MapReduce đầy đủ các thành phần - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 6. Mô hình MapReduce đầy đủ các thành phần (Trang 26)
Hình 7. Kiến trúc của HDFS  Nhiệm vụ của NameNode: - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 7. Kiến trúc của HDFS Nhiệm vụ của NameNode: (Trang 28)
Hình 8. Vai trò của NameNode và DataNode trong HDFS - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 8. Vai trò của NameNode và DataNode trong HDFS (Trang 30)
Hình 9. Kiến trúc HDFS đầy đủ - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 9. Kiến trúc HDFS đầy đủ (Trang 31)
Hình 10. Bảo toàn trạng thái trong Hadoop - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 10. Bảo toàn trạng thái trong Hadoop (Trang 33)
Hình 12. Phép chiếu  Phép chiếu trong MapReduce - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 12. Phép chiếu Phép chiếu trong MapReduce (Trang 40)
Hình 14. Phép kết nối quan hệ - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 14. Phép kết nối quan hệ (Trang 41)
Hình 15. Sự liên hệ giữa JobTracker và TaskTracker - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 15. Sự liên hệ giữa JobTracker và TaskTracker (Trang 44)
Hình 16. Sơ đồ đầy đủ của một Hadoop Cluster - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 16. Sơ đồ đầy đủ của một Hadoop Cluster (Trang 44)
Hình 17. Sơ đồ thực thi chi tiết một ứng dụng MapReduce trong Hadoop - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 17. Sơ đồ thực thi chi tiết một ứng dụng MapReduce trong Hadoop (Trang 45)
Hình 18. Hệ thống phân cấp các lớp của InputFormat  Các files nhỏ và CombineFileInputFormat - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 18. Hệ thống phân cấp các lớp của InputFormat Các files nhỏ và CombineFileInputFormat (Trang 48)
Hình 19. Hệ thống phân cấp các lớp của OutputFormat - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 19. Hệ thống phân cấp các lớp của OutputFormat (Trang 49)
Hình 20. Cấu trúc của Hbase  Hive and Pig - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 20. Cấu trúc của Hbase Hive and Pig (Trang 52)
Hình 22. Các thành phần Lucene hỗ trợ cho hệ thống tìm kiếm - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 22. Các thành phần Lucene hỗ trợ cho hệ thống tìm kiếm (Trang 54)
Hình 23. Sơ đồ hoạt động của Nutch khi sử dụng như một Crawler - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 23. Sơ đồ hoạt động của Nutch khi sử dụng như một Crawler (Trang 57)
Hình 24. Sơ đồ đầy đủ của Nutch khi sử dụng như một Search Engine - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 24. Sơ đồ đầy đủ của Nutch khi sử dụng như một Search Engine (Trang 58)
Hình 25. Revelant and retrieved - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 25. Revelant and retrieved (Trang 65)
6.3  Sơ đồ hoạt động - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
6.3 Sơ đồ hoạt động (Trang 72)
Sơ đồ hoạt động chi tiết: - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Sơ đồ ho ạt động chi tiết: (Trang 73)
Sơ đồ hoạt động chi tiết: - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Sơ đồ ho ạt động chi tiết: (Trang 75)
Sơ đồ hoạt động chi tiết: - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Sơ đồ ho ạt động chi tiết: (Trang 76)
Hình 30. Giao diện trang web khi tìm kiếm - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 30. Giao diện trang web khi tìm kiếm (Trang 78)
Hình 32. Kết quả khi tìm kiếm theo tác giả - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 32. Kết quả khi tìm kiếm theo tác giả (Trang 79)
Hình 33. Giao diện của Cygwin - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 33. Giao diện của Cygwin (Trang 82)
Hình 36. Giao diện của CDH - XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa
Hình 36. Giao diện của CDH (Trang 85)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w