Tải bản đầy đủ (.pdf) (85 trang)

Luận văn thạc sĩ nghiên cứu ứng dụng mô hình mapreduce để giải quyết bài toán đồ thị

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (7.84 MB, 85 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA

PHAODAVANH HONGSOUVANH

NGHIÊN CỨU ỨNG DỤNG MÔ HÌNH MAPREDUCE
ĐỂ GIẢI QUYẾT BÀI TOÁN ĐỒ THỊ

Chuyên ngành: Khoa học máy tính
Mã ngành: 60.48.01.01

LUẬN VĂN THẠC SĨ

NGƯỜI HƯỚNG DẪN KHOA HỌC
PGS.TS. Nguễn Tấn Khôi

ĐÀ NẴNG – Năm 2017


i

LỜI CAM ĐOAN
Tôi xin cam đoan:
Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn trực
tiếp của PGS.TS. Nguyễn Tấn Khôi.
Mọi tham khảo dùng trong luận văn được trích dẫn rõ ràng và trung thực về
tên tác giả, tên công trình, thời gian và địa điểm công bố.
Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, tôi xin chịu hoàn toàn
trách nhiệm.

Tác giả luận văn



PHAODAVANH HONGSOUVANH


ii

LỜI CẢM ƠN
Trong quá trình thực hiện đề tài, tôi đã gặp rất nhiều khó khăn phát sinh mà nếu
không có sự giúp đỡ, động viên của gia đình, các thầy cô giáo, bạn bè đồng nghiệp thì tôi
khó có thể hoàn thành được luận văn này.
Lời đầu tiên tôi xin gửi lời cảm ơn chân thành đến các quý thầy cô giáo, Khoa chuyên
ngành Công nghệ thông tin, Trường Đại học Bách khoa đã tận tình giảng dạy, truyền đạt
những kiến thức, kinh nghiệm quý báu trong suốt thời gian tôi theo học tại chương trình. Các
kiến thức, kinh nghiệm quý báu của các thầy cô giáo không chỉ giúp cá nhân tôi hoàn thiện
hệ thống kiến thức trong học tập mà còn giúp tôi ứng dụng các kiến thức đó trong công việc
hiện tại.
Đặc biệt, tôi xin gởi lời cảm ơn chân thành và sâu sắc nhất đến thầy giáo PGS.TS.
Nguyễn Tấn Khôi, người Thầy đã tận tình hướng dẫn và tạo điều kiện tốt nhất để tôi hoàn
thành luận văn này.
Tôi cũng xin được bày tỏ tình cảm với gia đình, đồng nghiệp, bạn bè đã tạo điều kiện
để tôi có thể dành thời gian cho khóa học. Xin chân thành cảm ơn những người bạn lớp cao
học K32, trong gần 2 năm qua đã luôn luôn động viên, khích lệ và hỗ trợ tôi trong quá trình
học tập.
Tuy có nhiều cố gắng, nhưng chắc chắn luận văn không tránh khỏi những thiếu sót
nhất định. Tôi rất mong nhận được ý kiến đóng góp quý báu của các thầy cô giáo và các bạn
để luận văn ngày càng được hoàn thiện hơn.
Trân trọng cảm ơn!
Đà Nẵng, Ngày 16 Tháng 01 Năm 2018
Tác giả
PHAODAVANH Hongsouvanh



iii

MỤC LỤC
LỜI CAM ĐOAN……………………………………..……………….…………………….i
LỜI CẢM ƠN ……………………..………………….………………………..……...……ii
MỤC LỤC………………….……………………………………………….……....………iii
DANH MỤC CÁC TỪ VIẾT TẮT……………..…………………………..…...….………vi
DANH MỤC CÁC BẢNG………………………………………..……….……….……….vii
DANH MỤC CÁC HÌNH………………………………………….…….….………...……viii
LỜI CAM ĐOAN ................................................................................................................. i
LỜI CẢM ƠN ..................................................................................................................... ii
DANH MỤC CÁC TỪ VIẾT TẮT ..................................................................................... vi
DANH MỤC CÁC BẢNG ................................................................................................ vii
DANH MỤC CÁC HÌNH ẢNH ....................................................................................... viii
MỞ ĐẦU ............................................................................................................................. 1
1.

Tính cấp chọn đề tài. .................................................................................................... 1

2.

Mục tiêu và nhiệm vụ nghiên cứu ................................................................................. 2

3.

4.

2.1


Mục tiêu......................................................................................................... 2

2.2

Nhiệm vụ ....................................................................................................... 2

Đối tượng và phạm vi nghiên cứu ................................................................................. 2
3.1

Đối tượng nghiên cứu của đề tài ....................................................................... 2

3.2

Phạm vi nghiên cứu của đề tài .......................................................................... 2

Phương pháp nghiên cứu .............................................................................................. 2
4.1

Nghiên cứu lý thuyết ....................................................................................... 2

4.2

Nghiên cứu thực nghiệm .................................................................................. 2

5.

Cấu trúc luận văn .......................................................................................................... 3

6.


Ý nghĩa khoa học và thực tiễn của đề tài. ...................................................................... 3

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT ..................................................................................... 4


iv

1.1.
Nền tảng tính toán với Hadoop......................................................................... 4
1.1.1. Hệ thống tập tin phân tán Hadoop ..................................................................... 4
1.1.2. Các thành phần của Hadoop ............................................................................... 6
1.1.3. Nguyên tắc hoạt động của một Hadoop MapReduce ....................................... 7
1.1.4. Các tiến trình nền tảng của Hadoop................................................................... 8
1.1.5. Tổng quan của một Hadoop cluster ................................................................... 9
1.1.6. Hadoop Distributed File System (HDFS) ....................................................... 11
Mô hình xử lý phân tán MapReduce ............................................................. 14
1.2.
1.2.1. Tổng quan về mô hình xử lý phân tán Mapreduce ......................................... 14

1.2.2. Cơ chế hoạt động của MapReduce .................................................................. 14
1.2.3. Quá trình xử lý MapReduce ............................................................................. 15
1.2.4. Hadoop MapReduce ......................................................................................... 18
1.2.5. MapReduce không dùng vào việc.................................................................... 20
Lý thuyết đồ thị ............................................................................................. 20
1.3.
1.3.1. Giới thiệu........................................................................................................... 21

1.3.2. Các khái niệm cơ bản ....................................................................................... 21
1.3.3. Cách biểu diễn đồ thị ........................................................................................ 22

1.3.4. Duyệt đồ thị ....................................................................................................... 26
1.3.5. Tính liên thông của đồ thị................................................................................. 29
1.4.

Kết luận chương ..................................................................................... 30

CHƯƠNG 2. MÔ HÌNH XỬ LÝ PHÂN TÁN MAPREDUCE VÀ HADOOP .................. 31
Xây dựng chương trình MapReduce Job ................................................ 31
2.1.
2.1.1. Các kiểu dữ liệu mà Hadoop hỗ trợ ................................................................. 31

2.1.2. Hàm Mapper ..................................................................................................... 32
2.1.3. Hàm Reducer..................................................................................................... 33
Đầu vào và đàu ra của Hadoop ............................................................... 34
2.2.
2.2.1. Dữ liệu đầu vào. ................................................................................................ 34

2.2.2. Dữ liệu đầu ra.................................................................................................... 36
Tập tin tuần tự ........................................................................................ 37
2.3.
2.4. Kết luận chương .......................................................................................... 37
CHƯƠNG 3. PHÂN TÍCH THIẾT KẾ BÀI TOÁN ĐỒ THỊ DỰA TRÊN MÔ HÌNH PHÂN
TÁN MAPREDUCE ......................................................................................................... 39
Ứng dụng MapReduce giải quyết bài toán cây khung nhỏ nhất .............. 39
3.1.
3.1.1. Giới thiệu bài toán ............................................................................................ 39

3.1.2. Tổng quan.......................................................................................................... 39
3.1.3. Giải thuật cây khung nhỏ nhất ......................................................................... 40



v

3.1.4. Thuật toán Kruskal ........................................................................................... 41
3.1.5. Giải quyết bài toán Cây khung nhỏ nhất với MapReduce ............................. 45
Ứng dụng MapReduce giải quyết bài toán tìm đường đi ngắn nhất (Shortest
3.2.
Path) 46
3.2.1. Phát biểu bài toán.............................................................................................. 47

3.2.2. Thuật toán Dijkstra .......................................................................................... 47
3.2.3. Thời gian thực hiện thuật toán ......................................................................... 48
3.2.4. Giải quyết bài toán Đường đi ngắn nhất với MapReduce .............................. 49
Ứng dụng MapReduce giải bài toán luồng cực đại trong mạng............... 54
3.3.
3.3.1. Mạng .................................................................................................................. 54

3.3.2. Giới thiệu bài toán ............................................................................................ 55
3.3.3. Giới thiệu thuật toán Ford – Fulkerson ........................................................... 56
3.3.4. Giải quyết bài toán Luồng cực đại trên mạng với MapReduce ..................... 56
Thử nghiệm và đánh giá kết quả............................................................. 57
3.4.
3.4.1. Thử nghiệm hệ thống ........................................................................................ 57

3.4.2. Đánh giá kết quả thử nghiệm. .......................................................................... 63
3.5.

Kết luận chương ..................................................................................... 65

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .......................................................................... 66

1. Kết luận ......................................................................................................................... 66
2. Hướng phát triển ............................................................................................................ 66
DANH MỤC TÀI LIỆU THAM KHẢO............................................................................ 68
PHỤ LỤC .......................................................................................................................... 70


vi

DANH MỤC CÁC TỪ VIẾT TẮT
Từ viết tắt

Ý nghĩa

LTĐT

Lý thuyết đồ thị

BFS

Duyệt theo chiều rộng >> Viết tắt từ tiếng Anh

DFS

Duyệt theo chiều sâu>> Viết tắt từ tiếng Anh

MR

MapReduce

MST


Minimum Spanning Tree

GFS

Google File System

HDFS

Hadoop Distributed File System

NDFS

Nutch Distributed File System

OSDI

Operating System Design and Implementation

RPC

Remote Perceduce Call


vii

DANH MỤC CÁC BẢNG

Số hiệu bảng


Tên bảng

Trang

Bảng 1.1

Các thành phần của Hadoop

6

Bảng 2.1

Danh sách các kiểu dữ liệu của Hadoop

32

Bảng 2.2
Bảng 2.3

Một số lớp thực hiện mapper được định nghĩa
trước bởi Hadoop
Danh sách các reducer cơ bản được triển khai
cung cấp bởi Hadoop

33
34


viii


DANH MỤC CÁC HÌNH ẢNH
Ký hiệu

Tên hình ảnh

Trang

Hình 1.1

Cấu trúc các thành phần của Hadoop

6

Hình 1.2

Tổng quan một Hadoop cluster

10

Hình 1.3

NameNode và DataNode trong HDFS

13

Hình 1.4

Quá trình xử lý MapReduce

15


Hình 1.5

Mô hình làm việc của một công việc MapReduce

16

Hình 1.6

Hàm Map

17

Hình 1.7

Hàm Reduce

17

Hình 1.8

Phân nhỏ dữ liệu đầu vào

18

Hình 1.9

Sao chép chương trình

18


Hình 1.10

Thực hiện hàm Map

19

Hình 1.11

Thực thi tác vụ Reduce

19

Hình 1.12

Mô hình đồ thị

21

Hình 1.13

Phân loại đồ thị

21

Hình 1.14

Biểu diễn đồ thị bằng ma trận kề

23


Hình 1.15

Biểu diễn đồ thị bằng danh sách cạnh

24

Hình 1.16

Biểu diễn đồ thị bằng danh sách kề

26

Hình 1.17

Đồ thị vô hướng, đồ thị có hướng

26

Hình 1.18

Cây BFS

28

Hình 1.19

Đồ thị G liên thông mạnh, đồ thị G’ liên thông yếu

20


Hình 2.1

Biểu đồ phân cấp của quá trình MapReduce

31

Hình 3.1

Cây khung nhỏ nhất của một đồ thị phẳng

39

Hình 3.2

Đồ thị G

44


ix

Hình 3.3

Kết quả đồ thị G sau khi dùng thuật toán Kruskal

45

Hình 3.4


Mô tả một đồ thị

48

Hình 3.5

Xuất ra dữ liệu Đầu ra

53

Hình 3.6

Mạng với các khả năng thông qua (đỉnh 1 là đỉnh
phát, đỉnh 6 là đỉnh thu) và một luồng với giá trị 7.

54

Hình 3.7

Giao diện chính của chương trình MST

57

Hình 3.8

Thiết kế đồ thị

57

Hình 3.9


Ma trận trọng số giữa các nút

58

Hình 3.10

Giao diện console trong khi chạy MapReduce

58

Hình 3.11

Kết quả sau khi chạy xong MapReduce

59

Hình 3.12

Xuất ra dữ liệu Đầu ra

59

Hình 3.13

Giao diện của chương trình Dijkstra

60

Hình 3.14


Sau khi chạy demo

62

Hình 3.15

Kết quả chạy chương trình

62

Hình 3.16

Mô tả thời gian thực hiện thuật toán

63

Hình 3.17

Mô tả sự khác nhau về thời gian thực hiện khi đầu vào
khác nhau với hệ thống gồm một, hai và năm cụm.

63

Mô tả sự khác nhau về thời gian thực hiện khi đầu vào

Hình 3.18

khác nhau với số đỉnh của đồ thị gồm 500, 1000 và


64

4000 đỉnh.

Hình 3.19

Mô tả sự khác nhau về thời gian thực hiện khi đầu vào
khác nhau với 1, 2 và 3 giai đoạn MapReduce.

64


1

MỞ ĐẦU
1.

Tính cấp chọn đề tài.
Hiện nay, với sự phát triển của công nghệ, lượng dữ liệu lưu trữ càng ngày càng

lớn. Điều này đặt ra nhiều thách thức. Để xử lý lượng dữ liệu khổng lồ đó, rất nhiều
công nghệ đã ra đời. Trong đó phải kể đến công nghệ tính toán phân tán. Ý tưởng
chính của việc tính toán phân tán là chia bài toán thành những bài toán con và giải
quyết trên các máy riêng biệt nhau được kết nối trong một cluster. Chúng ta có thể
thấy sự thành công của các công ty như Google, Facebook trong thời đại bùng nổ về
công nghệ hiện nay. Đằng sau sự thành công đó có sự đóng góp không nhỏ của một
mô hình lập trình được đưa ra bởi Google – đó là mô hình lập trình phân tán
MapReduce.
MapReduce là một mô hình lập trình phân tán, bao gồm hai giai đoạn chính là
Map và Reduce. Mô hình lập trình MapReduce được dùng để xử lý dữ liệu lớn dựa

trên lý thuyết của mô hình tính toán song song và mô hình xử lý dữ liệu phân tán trên
những cụm máy tính.
Mô hình xử lý MapReduce cho phép Xử lý tốt bài toán với lượng dữ liệu lớn có
các tác vụ phân tích và tính toán phức tạp không lường trước được; Có thể tiến hành
chạy song song trên các máy phân tán một cách chính xác và hiệu quả. Không cần
quan tâm đến sự trao đổi dữ liệu giữa các cluster với nhau vì chúng hoạt động một
cách độc lập, không cần theo dõi xử lý các tác vụ, xử lý lỗi; Có thể thực hiện mô hình
MapReduce trên nhiều ngôn ngữ (Java, C/ C++, Python, Perl, Ruby) với các thư viện
tương ứng.
Tuy nhiên hiện nay có một số bài toán khi ứng dụng lý thuyết đồ thị để giải
theo phương pháp truyền thống thường thì có thời gian tính toán lớn. Việc giải bài toán
này với tính chất tuần tự của giải thuật tuần tự khi số đỉnh của đồ thị lên đến hàng chục
ngàn đỉnh sẽ gặp phải những vấn đề như thời gian thực hiện chương trình, tốc độ xử
lý, khả năng lưu trữ của bộ nhớ…
Với nhu cầu xử lý dữ liệu lớn, thời gian xử lý ngắn hơn, do đó hướng ứng dụng
MapReduce để giải các bài toán đồ thị, tôi đề xuất chọn đề tài luận văn cao học:
“Nghiên cứu ứng dụng mô hình MapReduce để giải quyết bài toán đồ thị”


2

2.

Mục tiêu và nhiệm vụ nghiên cứu
2.1 Mục tiêu
Nghiên cứu ứng dụng mô hình xử lý phân tán MapReduce trên nền tảng hadoop

để giải quyết một số bài toán đồ thị có kích thước dữ liệu lớn.
2.2 Nhiệm vụ


- Tìm hiểu về nền tảng tính toán phân tán với Hadoop.
- Tìm hiểu về mô hình tính toán MapReduce.
- Tìm hiểu về LTĐT.
- Xây dựng giải thuật giải quyết một số bài toán đồ thị dựa theo mô hình
MapReduce.

3.

Đối tượng và phạm vi nghiên cứu
3.1 Đối tượng nghiên cứu của đề tài

- Cấu trúc Framework, Hadoop, Kiến trúc HDFS.
- Các bài toán đồ thị
- Tìm hiểu xây dựng các hàm Map, hàm Reduce.
- Triển khai mô hình hệ thống.
3.2 Phạm vi nghiên cứu của đề tài

- Mô hình xử lý phân tán MapReduce trên nền tảng hadoop.
- Ứng dụng mô hình MapReduce để giải quyết một số bài toán đồ thị.
4.

Phương pháp nghiên cứu
4.1 Nghiên cứu lý thuyết

- Tìm hiểu các mô hình xử lý phân tán
- Tìm hiểu các bài toán đồ thị
- Tìm hiểu giải thuật xử lý phân tán
4.2 Nghiên cứu thực nghiệm

- Xây dựng sơ đồ, xây dựng thuật toán để giải một số bài toán đồ thị.

- Lập trình ứng dụng bằng ngôn ngữ lập trình Java.
- Xây dựng chương trình thử nghiệm.


3

5.

Cấu trúc luận văn
Ngoài phần mở đầu và phần kết luận, nội dung chính của luận văn được kiến

trúc thành 3 chương.
Chương 1. Cơ sở lý thuyết
Chương này trình bày những kiến thức cơ bản về nền tảng tính toán phân tán với
Hadoop: giới thiệu Hadoop, các thành phần của Hadoop, Hadoop Distributed Dữ liệu System
(HDFS). Cơ chế xử lý phân tán MapReduce và tổng quát về Đồ thị.
Chương 2. Mô hình xử lý phân tán MapReduce và Hadoop
Chương này trình bày cách tạo một ứng dụng MapReduce cơ bản, các thư viện
mà Hadoop cung cấp để thao tác với hệ thống tập tin tự tạo ra khi lập trình.
Chương 3. Xây dựng bài toán đồ thị trên nền tảng hệ thống MapReduce
Trong chương này chúng tôi sẽ trình bày một số thuật toán như Kruscal, thuật toán
Ford-Fulkerson…trên nền tảng hệ thống MapReduce để giải quyết bài toán: tìm đường đi
ngắn nhất từ một đỉnh đến tất cả các đỉnh còn lại trong một đồ thị, Cây khung nhỏ nhất
của đồ thị, tìm luồng cực đại trên mạng…sau đó sẽ triển khai mô hình hệ thống và demo
chương trình.

6.

Ý nghĩa khoa học và thực tiễn của đề tài.
Luận văn này đã tìm hiểu và xây dựng được giải thuật giải bài toán đồ thị từ


giải thuật tuần tự sang xử lý song song. Ứng dụng xử lý dữ liệu lớn trên mô hình phân
tán khi giải các bài toán về đồ thị.


4

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
Chương này trình bày một cách tổng quan về nền tảng tính tán phân tán với
Hadoop, giới thiệu kiến trúc HDFS cũng như cách đọc ghi dữ liệu trên HDFS. Trình
bày về mô hình tính toán MapReduce và những kiến thức về LTĐT cũng như các thuật
toán cơ bản trên đồ thị.

1.1.

Nền tảng tính toán với Hadoop

Chúng ta đang sống trong thời đại bùng nổ dữ liệu số. Mỗi ngày lượng dữ
liệu lưu trữ không ngừng tăng lên và vượt ra khỏi khả năng xử lý của các hệ thống
truyền thống. Điều đó đòi hỏi phải xây dựng một hệ thống mới, có khả năng xử
lý được một lượng dữ liệu lớn, trong một khoảng thời gian chấp nhận được. Xuất phát
từ nhu cầu đó, Hadoop đã ra đời dựa trên ý tưởng từ các bài báo về mô hình xử lý dữ
liệu phân tán MapReduce của Google và Hệ thống tập tin của Google-Google Dữ liệu
System (GFS).
Hiện nay, Hadoop đã được ứng dụng rộng rãi trên khắp thế giới. Hadoop hoạt
động trên ý tưởng của mô hình xử lý dữ liệu phân tán Mapreduce, cụ thể là hệ thống sẽ
chia nhỏ nhiệm vụ lớn cho hàng loạt máy tính cùng nhau xử lý song song. Với ý tưởng
đó, Hadoop có thể dễ dàng được triển khai trên các hệ thống máy tính có sẵn chứ
không cần phải đầu tư những thiết bị phần cứng cao cấp, đắt tiền. Đặc biệt, Hadoop là
một dự án mã nguồn mở và hoàn toàn miễn phí. Trong phần sau sẽ trình bày các khái

niệm, cấu trúc Hadoop, kiến trúc HDFS…

1.1.1. Hệ thống tập tin phân tán Hadoop
Hadoop là một framework cho phép phát triển các ứng dụng phân tán, viết bằng
Java. Tuy nhiên nhờ cơ chế streaming, Hadoop cho phép phát triển các ứng dụng phân
tán bằng cả java lẫn một số ngôn ngữ lập trình khác như C++, Python... Hadoop cung
cấp một phương tiện lưu trữ dữ liệu phân tán trên nhiều node, hỗ trợ tối ưu hóa lưu
lượng mạng đó là Hadoop Distributed Dữ liệu System (HDFS). HDFS che giấu tất cả
các thành phần phân tán, các nhà phát triển ứng dụng chỉ nhìn thấy HDFS như một hệ
thống dữ liệu cục bộ bình thường và giúp các nhà phát triển ứng dụng phân tán tập
trung tối đa vào phần logic của ứng dụng, bỏ qua được một số phần chi tiết kỹ thuật
phân tán bên dưới.


5

Hadoop được tạo ra bởi Doug Cutting, người sáng tạo ra Apache Lucene– bộ
thư viện tạo chỉ mục tìm kiếm trên text được sử dụng rộng rãi. Hadoop bắt nguồn từ
Nutch, một ứng dụng search engine nguồn mở.
Nutch được khởi xướng từ năm 2002 và một hệ thống search engine ra đời. Tuy
nhiên, các nhà kiến trúc sư của Nutch nhanh chóng nhận ra rằng Nutch sẽ không thể
mở rộng ra để có thể thực hiện vai trò searcher engine của mình trên tập dữ liệu hàng
tỷ trang web. Nguyên nhân chính của giới hạn này là do Nutch lúc này chỉ chạy trên
một máy đơn (stand alone) nên gặp phải các khuyết điểm:
- Khả năng lưu trữ bị giới hạn: giả sử mỗi trang web cần 10kb đĩa cứng để lưu, thì
với hơn 100 triệu trang ta cần 1 Terabyte đĩa cứng, và với khối lượng hàng tỷ trang
web có trên mạng thì cần tới hàng chục Petabyte để lưu trữ.
- Tốc độ truy xuất chậm: với khối lượng dữ liệu lớn như vậy, việc truy xuất tuần tự
để phân tích dữ liệu và index trở nên rất chậm chạp, và thời gian để đáp ứng các câu
truy vấn tìm kiếm (search query) là không hợp lý.

Năm 2003, Google công bố kiến trúc của hệ thống dữ liệu phân tán GFS. Năm
2004, họ bắt tay vào việc ứng dụng kiến trúc của GFS vào cài đặt một hệ thống dữ liệu
phân tán nguồn mở có tên là Nutch Distributed Dữ liệu System (NDFS). Trong thời
gian này Google lại công bố bài báo giới thiệu MapReduce. Đầu năm 2005 các nhà
phát triển Nutch đã xây dựng được phiên bản MapReduce trên Nutch, vào giữa năm
2005, tất cả các thuật toán chính của Nutch đều được cải tiến lại để chạy trên nền
NDFS và MapReduce.
NDFS và MapReduce trong Nutch đã nhanh chóng tìm được các ứng
dụng của mình bên ngoài lĩnh vực search engine, vào tháng hai năm 2006 Doug
Cutting đã tách riêng NDFS và MapReduce ra để hình thành một dự án độc lập có tên
Hadoop.
Cùng thời gian này, Doug Cutting gia nhập vào Yahoo!. Tại đây, ông được tạo
một môi trường tuyệt vời để phát triển Hadoop, vào tháng 2 năm 2006 Yahoo đã công
bố sản phẩm search engine được xây dựng trên một Hadoop cluster có kích thước
10.000 nhân vi xử lý.
Năm 2008, Hadoop đã phá kỷ lục thế giới về sắp xếp một Terabyte dữ liệu.
Chạy trên một cluster gồm 910 node, Hadoop đã sắp xếp một Terabyte dữ liệu trong


6

vòng 209 giây, phá kỷ lục cũ là 297 giây. Sau đó ít lâu, Google công bố ứng dụng chạy
trên MapReduce của họ đã sắp xếp được một Terabyte dữ liệu trong 68 giây. Vào
tháng 5 năm 2009, một đội các nhà phát triển của Yahoo đã dùng Hadoop để sắp xếp
một Terabyte dữ liệu trong vòng 62 giây.

1.1.2. Các thành phần của Hadoop

Hình 1.1 Cấu trúc các thành phần của Hadoop


Bảng 1.1 Các thần phần của Hadoop
Tên thành phần

Chức năng
Cung cấp các công cụ và giao diện cho hệ thống phân tán và

Core

các tiện ích I/O. Đây là phần lõi để xây dựng nên HDFS và
MapReduce.
Một framework giúp phát triển các ứng dụng phân tán theo

MapReduce

mô hình MapReduce một cách dễ dàng và mạnh mẽ, ứng
dụng phân tán MapReduce có thể chạy trên một cluster lớn
với nhiều node.
Hệ thống dữ liệu phân tán, cung cấp khả năng lưu trữ dữ liệu

HDFS

khổng lồ và tính năng tối ưu hóa việc sử dụng băng thông
giữa các node. HDFS có thể sử dụng để chạy một cluster lớn
với hàng chục ngàn node.

HBase

Một cơ sở dữ liệu phân tán, theo hướng cột (colunmoriented). Hbase sử dụng HDFS làm hạ tầng cho việc lưu trữ



7

dữ liệu bên dưới và cung cấp khả năng tính toán song song
dựa trên MapReduce.
Hive

Một kho dữ liệu phân tán. Hive quản lý dữ liệu được lưu trữ
trên HDFS và cung cấp một ngôn ngữ truy vấn dựa trên SQL.
Một hệ thống tập hợp và phân tích dữ liệu. Chukwa chạy các

Chukwa

collector (các chương trình tập hợp dữ liệu), các collector này
lưu trữ dữ liệu trên HDFS và sử dụng MapReduce để phát
sinh các báo cáo.

Pig

Ngôn ngữ luồng dữ liệu cấp cao và framework thực thi dùng
cho tính toán song song.

Trong khuôn khổ luận văn này chỉ nghiên cứu phần quan trọng nhất của Hadoop
đó là MapReduce và xây dựng bài toán ứng dụng trên MapReduce.

1.1.3. Nguyên tắc hoạt động của một Hadoop MapReduce
Hadoop chia đầu vào cho mỗi công việc MapReduce vào các mảnh có kích
thước cố định gọi là các đầu vào split hoặc là các split. Hadoop tạo ra một task map
cho mỗi split, chạy mỗi nhiệm vụ map do người sử dụng định nghĩa cho mỗi bản ghi
(record) trong split.
Có rất nhiều các split, điều này có nghĩa là thời gian xử lý mỗi split nhỏ hơn so

với thời gian xử lý toàn bộ đầu vào. Vì vậy, nếu chúng ta xử lý các split một cách song
song, thì quá trình xử lý sẽ cân bằng tải tốt hơn, nếu các split nhỏ, khi đó một chiếc
máy tính nhanh có thể xử lý tương đương nhiều split trong quá trình thực hiện công
việc hơn là một máy tính chậm. Ngay cả khi các máy tính giống hệt nhau, việc xử lý
không thành công hay các công việc khác đang chạy đồng thời làm cho cân bằng tải
như mong muốn, và chất lượng của cân bằng tải tăng như là chia các splits thành các
phần nhỏ hơn.
Mặt khác, nếu chia tách quá nhỏ, sau đó chi phí cho việc quản lý các split và
của tạo ra các map task bắt đầu chiếm rất nhiều tổng thời gian của quá trình xử lý công
việc. Đối với hầu hết công việc, kích thước split tốt nhất thường là kích thước của một
block của HDFS, mặc định là 64MB, mặc dù nó có thể thay đổi được cho mỗi cluster
(cho tất cả các dữ liệu mới được tạo ra) hoặc định rõ khi mỗi dữ liệu được tạo ra.


8

Hadoop làm tốt nhất các công việc của nó khi chạy các map task trên một node
khi mà dữ liệu đầu vào cư trú ngay trong HDFS. Các map task ghi đầu ra của chúng
trên đĩa cụ bộ, không phải là vào HDFS.

1.1.4. Các tiến trình nền tảng của Hadoop
 NameNode
Là một trình nền quan trọng nhất của Hadoop. Hadoop sử dụng một kiển trúc
master/slave cho cả lưu trữ phân tán và xử lý phân tán. Hệ thống lưu trữ phân tán được
gọi là Hadoop Dữ liệu System hay HDFS. NameNode là master của HDFS để chỉ đạo
các trình nền DataNode slave để thực hiện các nhiệm vụ I/O mức thấp.

 DataNode
Mỗi máy slave trong cluster sẽ lưu trữ một trình nền DataNode để thực hiện các
công việc nào đó của hệ thống dữ liệu phân tán - đọc và ghi các khối HDFS tới các dữ

liệu thực tế trên hệ thống dữ liệu cục bộ (local dữ liệusytem). Khi đọc hay ghi một dữ
liệu HDFS, dữ liệu đó được chia nhỏ thành các khối và NameNode sẽ nói cho các
client nơi các trình nền DataNode sẽ nằm trong đó. Client liên lạc trực tiếp với các
trình nền DataNode để xử lý các dữ liệu cục bộ tương ứng với các block. Hơn nữa,
một DataNode có thể giao tiếp với các DataNode khác để nhân bản các khối dữ liệu
của nó để dự phòng.

 Secondary NameNode
Các Secondary NameNode là một trình nền hỗ trợ giám sát trạng thái của các cụm
HDFS. Giống như NameNode, mỗi cụm có một Secondary NameNode, và nó thường
trú trên một máy của mình. Không có các trình nền DataNode hay TaskTracker chạy
trên cùng một server. Secondary NameNode khác với NameNode trong quá trình xử lý
của nó không nhận hoặc ghi lại bất cứ thay đổi thời gian thực tới HDFS. Thay vào đó
giao tiếp với các NameNode bằng cách chụp những bức ảnh của siêu dữ liệu HDFS
(HDFS metadata) tại những khoảng xác định bởi cấu hình của các cluster.


9

 JobTracker
Trình nền JobTracker là một liên lạc giữa ứng dụng và Hadoop. Một khi mã nguồn
được gửi tới các cụm (cluster), JobTracker sẽ quyết định kế hoạch thực hiện bằng cách
xác định những tập tin nào sẽ xử lý, các nút được giao các nhiệm vụ khác nhau, và
theo dõi tất cả các nhiệm vụ khi chúng đang chạy. Nếu một nhiệm vụ (task) thất bại
(fail), JobTracker sẽ tự động chạy lại nhiệm vụ đó, có thể trên một node khác, cho đến
một giới hạn nào đó được định sẵn của việc thử lại này.
Chỉ có một JobTracker trên một cụm Hadoop, thường chạy trên một máy chủ như là
một nút master của cluster.

 TaskTracker

Như với các trình nền lưu trữ, các trình nền tính toán cũng phải tuân theo kiến trúc
master/slave: JobTracker là giám sát tổng việc thực hiện chung của một công việc
MapRecude và các taskTracker quản lý việc thực hiện các nhiệm vụ riêng trên mỗi
node slave. Mỗi TaskTracker chịu trách nhiệm thực hiện các task riêng mà các
JobTracker giao cho.
Một trong những trách nhiệm của các TaskTracker là liên tục liên lạc với
JobTracker. Nếu JobTracker không nhận được nhịp đập từ một TaskTracker nào đó
trong thời gian đã quy định, nó sẽ cho rằng TaskTracker đã bị treo (cashed) và sẽ gửi
lại nhiệm vụ tương ứng cho các nút khác trong cluster.

1.1.5. Tổng quan của một Hadoop cluster
HDFS và MapReduce là hai thành phần chính của một Hadoop cluster. Nhìn
chung, kiến trúc của Hadoop là kiến trúc master-slave, và cả hai thành phần HDFS và
MapReduce đều tuân theo kiến trúc master-slave này. Kiến trúc của một Hadoop
cluster như sau:


10

Hình 1.2 Tổng quan một Hadoop cluster

Trên một hadoop cluster, có duy nhất một node chạy NameNode, một node chạy
JobTracker (NameNode và JobTracker có thể nằm trên cùng một máy vật lý, tuy nhiên
trên các cluster thật sự với hàng trăm, hàng nghìn node thì thường phải tách riêng
NameNode và JobTracker ra các máy vật lý khác nhau. Có nhiều node slave, mỗi node
slave thường đóng 2 vài trò: DataNode và TaskTracker.
NameNode và DataNode chịu trách nhiệm vận hành hệ thống tập tin phân tán
HDFS với vai trò cụ thể được phân chia như sau:
NameNode: đóng vai trò là master của hệ thống HDFS, quản lý các meta-data của
hệ thống HDFS như dữ liệu system space, danh sách các tập tin trên hệ thống và các

block id tương ứng của từng dữ liệu, quản lý danh sách slave và tình trạng hoạt động
của các DataNode thông qua các hearbeat, đều hướng quá trình đọc/ghi dữ liệu từ
client lên các DataNode.


11

DataNode: chứa các block dữ liệu thực sự của các dữ liệu trên HDFS, chịu trách
nhiệm đáp ứng các yêu cầu đọc/ghi dữ liệu từ client, đáp ứng các yêu cầu tạo/xóa các
block dữ liệu từ NameNode.
JobTracker và TaskTracker chịu trách nhiệm duy trì bộ máy MapReduce, nhận và
thực thi các MapReduce Job. Vai trò cụ thể như sau:
JobTracker: tiếp nhận các yêu cầu thực thi các MapReduce job, phân chia job này
thành các task và phân công cho các TaskTracker thực hiện, quản lý tình trạng thực
hiện các task của TaskTracker, phân công lại nếu cần. JobTracker cũng quản lý danh
sách các node TaskTracker và tình trạng của node thông qua hearbeat.
TaskTracker: nhận các task từ JobTracker và thực hiện task.
Ngoài ra trên một Hadoop cluster còn có SecondaryNameNode.
SecondaryNameNode: duy trì một bản sao của meta-data trên NameNote và bản
sao này sẽ được dùng để phục hồi lại NameNode nếu bị hư hỏng.

1.1.6. Hadoop Distributed File System (HDFS)
1.1.6.1. Giới thiệu
HDFS ra đời trên nhu cầu lưu trữ dữ liệu của Nutch, một dự án Search Engine
nguồn mở. HDFS kế thừa các mục tiêu chung của các hệ thống dữ liệu phân tán trước
đó như độ tin cậy, khả năng mở rộng và hiệu suất hoạt động. Tuy nhiên, để đáp ứng
các đòi hỏi về lưu trữ và xử lý của các hệ thống xử lý dữ liệu lớn với các đặc thù riêng.
Do đó, các nhà phát triển HDFS đã xem xét lại các kiến trúc phân tán trước đây và
nhận ra các sự kiện trong mục tiêu của HDFS so với các hệ thống dữ liệu phân tán
truyền thống.

Các lỗi về phần cứng thường xuyên xảy ra. Hệ thống HDFS sẽ chạy trên các cluster
với hàng trăm hoặc thậm chí hàng ngàn node. Các node được xây dựng nên từ các
phần cứng thông thường, giá rẻ, tỷ lệ lỗi cao. Chất lượng và số lượng của các thành
phần phần cứng như vậy sẽ tất yếu dẫn đến tỷ lệ xảy ra lỗi trên cluster sẽ cao. Các vấn
đề có thể điểm qua như lỗi ứng dụng, lỗi của hệ điều hành, lỗi đĩa cứng, bộ nhớ, lỗi
của các thiết bị kết nối, lỗi mạng, và lỗi về nguồn điện…Vì thế khả năng phát hiện lỗi,
chống chịu lỗi và tự động phục hồi phải được tích hợp vào trong hệ thống HDFS.
Kích thước dữ liệu sẽ lớn hơn so với các chuẩn truyền thống, các dữ liệu có kích
thước hàng GB sẽ trở nên phổ biến. Khi làm việc trên các tập dữ liệu với kích thước


12

nhiều TB, ít khi nào người ta lại chọn việc quản lý hàng tỷ dữ liệu có kích thước hàng
KB, thậm chí nếu hệ thống có thể hỗ trợ. Điều chúng ta muốn nói ở đây là việc phân
chia tập dữ liệu thành một số lượng ít dữ liệu có kích thước lớn sẽ là tối ưu hơn. Hai
tác dụng to lớn của điều này có thể làm giảm thời gian truy xuất dữ liệu và đơn giản
hóa việc quản lý các tập tin.
Hầu hết các dữ liệu đều được thay đổi bằng cách bổ sung dữ liệu vào cuối dữ liệu
hơn là ghi đè lên dữ liệu hiện có. Việc ghi dữ liệu lên một vị trí ngẫu nhiên trong dữ
liệu không hề tồn tại. Một khi đã được tạo ra, các dữ liệu sẽ trở thành dữ liệu chỉ đọc
(Read Only), và thường được đọc một cách tuần tự. Có rất nhiều loại dữ liệu phù hợp
với các đặc điểm trên. Đó có thể là các kho dữ liệu lớn để các chương trình xử lý quét
qua và phân tích dữ liệu. Đó có thể là các dòng dữ liệu được tạo ra một các liên tục
qua quá trình chạy các ứng dụng (ví dụ như dữ liệu log). Đó có thể là kết quả trung
gian của một máy này và lại được dùng làm đầu vào xử lý trên một máy khác. Và do
vậy, việc bổ sung dữ liệu vào dữ liệu sẽ trở thành điểm chính để tối ưu hóa hiệu suất.

1.1.6.2. Kiến trúc HDFS.
Giống như các hệ thống dữ liệu khác, HDFS duy trì một cấu trúc cây phân cấp các

dữ liệu, thư mục mà các dữ liệu sẽ đóng vai trò là các node lá. Trong HDFS, mỗi dữ
liệu sẽ được chia ra làm một hay nhiều block và mỗi block này sẽ có một block ID để
nhận diện. Các block của cùng một dữ liệu (trừ block cuối cùng) sẽ có cùng kích thước
gọi là block size của dữ liệu đó. Mỗi block của dữ liệu sẽ được lưu trữ thành ra nhiều
bản sao khác nhau vì mục đích an toàn dữ liệu.
HDFS có một kiến trúc master/slave. Trên một cluster chạy HDFS, có hai loại node
là Namenode và Datanode. Một cluster có duy nhất một Namenode và có một hay
nhiều Datanode.
Namenode đóng vai trò là master, chịu trách nhiệm duy trì thông tin về cấu trúc
phân cấp các dữ liệu, thư mục của hệ thống dữ liệu và các Metadata khác của hệ thống
dữ liệu. Cụ thể, các Metadata mà Namenode lưu trữ gồm có :
Dữ liệu System Namespace : là hình ảnh cây thư mục của hệ thống dữ liệu tại
một thời điểm nào đó. Dữ liệu System Namespace thể hiện tất cả các dữ liệu, thư mục
trên hệ thống dữ liệu và quan hệ giữa chúng.


13

Để ánh xạ từ tên dữ liệu ra thành danh sách và các block : với mỗi dữ liệu, ta có
một danh sách có thứ tự các block của dữ liệu đó, mỗi Block đại diện bởi Block ID.
Nơi lưu trữ các block : các block đại diện một Block ID. Với mỗi block ta có một danh
sách các DataNode lưu trữ các bản sao của block đó.
Các DataNode sẽ chịu trách nhiệm lưu trữ các block thật sự của từng dữ liệu
của hệ thống dữ liệu phân tán lên hệ thống dữ liệu cục bộ của nó. Mỗi một block sẽ
được lưu trữ như là một dữ liệu riêng biệt trên hệ thống dữ liệu cục bộ của DataNode.
Kiến trúc của HDFS được thể hiện qua sơ đồ dưới đây :

Hình 1.3 NameNode và DataNode trong HDFS.

Namenode sẽ chịu trách nhiệm điều phối các thao tác truy cập của client lên hệ

thống HDFS. Các Datanode là nơi lưu trữ các block của các dữ liệu trên HDFS, nên
chúng sẽ là nơi trực tiếp đáp ứng các thao tác truy cập này. Chẳng hạn như khi client
của hệ thống muốn đọc một dữ liệu trên hệ thống HDFS, client này sẽ thực hiện một
request (thông qua RPC) đến Namenode để lấy các metadata của dữ liệu cần đọc.
Từ metadata này nó sẽ biết được danh sách các block của dữ liệu và vị trí của
các Datanode chứa các bản sao của từng block. Client sẽ truy cập vào các Datanode để
thực hiện các yêu cầu đọc các block.


14

1.2.

Mô hình xử lý phân tán MapReduce

1.2.1. Tổng quan về mô hình xử lý phân tán Mapreduce
MapReduce là một “mô hình lập trình” (programming model), lần đầu được
giới thiệu trong bài báo của Jefferey Dean và Sanjay Ghemawat ở hội nghị OSDI
2004. MapReduce là một mô hình hay là một khung (framework) để người lập trình
xây dựng chương trình.
Để thực hiện chương trình theo mô hình MapReduce thì cần có một nền tảng
hay một hiện thực (implementation) cụ thể. Google có một nền tảng của
MapReduce bằng C++. Apache có Hadoop, một implementation mã nguồn mở khác
trên Java (người dùng dùng Hadoop qua một Java interface).
MapReduce có thể hiểu là một phương thức thực thi để giúp các ứng dụng có thể
xử lý nhanh một lượng dữ liệu lớn. Các dữ liệu này được đặt tại các máy tính phân tán.
Các máy tính này sẽ hoạt động song song độc lập với nhau. Điều này làm rút ngắn thời
gian xử lý toàn bộ dữ liệu.
Một đặc điểm đáng chú ý của MapReduce là dữ liệu đầu vào có thể là dữ liệu cấu
trúc (dữ liệu lưu trữ dạng bảng quan hệ hai chiều) hoặc dữ liệu không cấu trúc (dữ liệu

dạng tập tin hệ thống).
Các máy tính lưu trữ các dữ liệu phân tán trong quá trình thực thi được gọi là các nút
(nodes) của hệ thống. Nếu các máy tính này cùng sử dụng chung trên một phần cứng thì
chúng được gọi là một cụm (cluster). Nếu các máy này hoạt động riêng rẽ trên các phần
cứng khác nhau thì chúng được gọi là một lưới.

1.2.2. Cơ chế hoạt động của MapReduce
MapReduce hoạt động gồm hai quá trình thực hiện hai hàm Map và Reduce.
Ý tưởng chính của MapReduce chính là thực hiện việc chia để trị.
-

Chia vấn đề cần xử lý (dữ liệu) thành các phần nhỏ để xử lý.

-

Xử lý các vấn đề nhỏ đó một cách song song trên các máy tính phân tán hoạt
động độc lập.

-

Tổng hợp các kết quả thu được để đưa ra kết quả cuối cùng.


15

1.2.3. Quá trình xử lý MapReduce
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 MapReduce.

Hình 1.4 Quá trình xử lý MapReduce


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. Để 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.
(1): Thư viện MapReduce (MR) mà chương trình người dùng (User Program) sử dụng
chia các tập tin đầu vào thành các phần nhỏ. Dung lượng mỗi phần từ 16 megabytes
đến 64 megabytes. 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.


×