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

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 (1.86 MB, 31 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ã số: 60.48.01.01

TÓM TẮT LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Đà Nẵng - Năm 2017


Công trình được hoàn thành tại
TRƯỜNG ĐẠI HỌC BÁCH KHOA

Người hướng dẫn khoa học: PGS.TS Nguyễn Tấn Khôi

Phản biện 1: PGS.TSKH. Trần Quốc Chiến
Phản biện 2: PGS.TS. Lê Mạnh Thạnh

Luận văn được bảo vệ trước Hội đồng chấm Luận văn tốt
nghiệp thạc sĩ khoa học máy tính họp tại Trường Đại học Bách khoa
vào ngày 06 tháng 01 năm 2018.

Có thể tìm hiểu luận văn tại:
- Trung tâm Học liệu, Đại học Đà Nẵng tại Trường Đại học Bách khoa
- Thư viện Khoa Công nghệ thông tin Trường Đại học Bách khoa –ĐHĐN




NGHIÊN CỨƯ ỨNG DỤNG MAPREDUCE
ĐỂ GIẢI QUYẾT BÀI TOÁN ĐỒ THỊ
Học viên: Phaodavanh Hongsouvanh
Chuyên ngành: Khoa học máy tính
Mã số:60.48.01.01 Khóa: 32.KMT
Trường Đại học Bách khoa – ĐHĐN
Tóm tắt - 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. 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. Mô hình
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ả 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ừ khóa : Hadoop – MapReduce; Lý thuyết đồ thị; Cây khủng nhỏ nhất;
Dữ liệu lớn; Bài toán đồ thị.


RESEARCH THE MODEL’S MAPREDUCE APPLICATION
TO SOLVE MATHEMATICAL GRAPHS
Abstract - With the development of technology, the amount of data storage
is growing. This poses many challenges. To handle the huge amount of data,
a lot of the technology was born. Which are the distributed computing
technology. We can see the success of companies like Google, Facebook in
the boom times of the current technology. The model's MapReduce allows
processing large data quantities to be analytical tasks and complex

calculations not foreseen; Can proceed to run in parallel on distributed
machines precisely and efficiently with the needs of large data handling,
shorter processing time, so that's MapReduce applications oriented to solve
mathematical graph.
Key words : Hadoop – MapReduce; Mathematical graph ; Minimum
spanning tree; Big data; Graph.


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 ........................................................................ VI
DANH MỤC CÁC HÌNH ẢNH ............................................................... VI
MỞ ĐẦU...................................................................................................... 1
1.

LÝ DO CHỌN ĐỀ TÀI. .................................................................... 1
2.
MỤC TIÊU VÀ NHIỆM VỤ NGHIÊN CỨU ................................. 1
2.1 Mục tiêu ............................................................................................. 1
2.2 Nhiệm vụ ............................................................................................ 1
3.
ĐỐ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
4.
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 .................................................................. 2
6.
Ý NGHĨA KHOA HỌC VÀ THỰC TIỄN CỦA ĐỀ TÀI. ............. 2
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT .......................................................... 3
1.1 NỀN TẢNG TINH TOAN VỚI HADOOP ..................................... 3
1.1.1
Hệ thống tập tin phân tán Hadoop ............................................. 3
1.1.2
Các thành phần của Hadoop ...................................................... 3
1.1.3
Nguyên tắc hoạt động của một Hadoop MapReduce ................. 4
1.1.4
Các tiến trình nền tảng của Hadoop ........................................... 4
1.1.5
Tổng quan của một Hadoop cluster ........................................... 4
1.1.6

Hadoop Distributed File System (HDFS) .................................. 4
1.2 MÔ HÌNH XỬ LÝ PHÂN TÁN MAPREDUCE ............................ 4
1.2.1
Tổng quan về mô hình xử lý phân tán Mapreduce .................... 4
1.2.2
Cơ chế hoạt động của MapReduce ............................................ 4
1.2.3
Quá trình xử lý MapReduce....................................................... 5
1.2.4
Hadoop MapReduce .................................................................. 5


iv
1.2.5
MapReduce không dùng vào việc .............................................. 5
1.3 LÝ THUYẾT DỒ THỊ(LTĐT)......................................................... 5
1.3.1
Giới thiệu ................................................................................... 5
1.3.2
Các khái niệm cơ bản................................................................. 6
1.3.3
Cách biểu diễn đồ thị ................................................................. 6
1.3.4
Duyệt đồ thị ............................................................................... 6
1.3.5
Tính liên thông của đồ thị .......................................................... 6
1.4 KẾT LUẬN CHƯƠNG ..................................................................... 6
CHƯƠNG 2. MÔ HÌNH XỬ LÝ PHÂN TÁN MAPREDUCE VÀ HADOOP7
2.1 XÂY DỰNG CHƯƠNG TRÌNH MAPREDUCE JOB ...................... 7
2.1.1 Các kiểu dữ liệu mà Hadoop hỗ trợ ................................................ 7

2.1.2 Mapper ............................................................................................ 8
2.1.3 Reducer ........................................................................................... 8
2.2 DỮ LIỆU ĐẦU VÀO VÀ ĐẦU RA ..................................................... 9
2.2.1 Dữ liệu đầu vào ............................................................................... 9
2.2.2 Dữ liệu đầu ra.................................................................................. 9
2.3 TẬP TIN TUẦN TỰ ............................................................................. 9
2.4. KẾT LUẬN CHƯƠNG ....................................................................... 9
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 ................................................. 10
3.1 ỨNG DỤNG MAPREDUCE GIẢI QUYẾT BÀI TOÁN TÌM CÂY
KHUNG NHỎ NHẤT............................................................................... 10
3.1.1 Giới thiệu bài toán......................................................................... 10
3.1.2 Tổng quan ..................................................................................... 10
3.1.3 Giải thuật Cây khung nhỏ nhất...................................................... 10
3.1.4 Thuật toán Kruskal ........................................................................ 10
3.1.5 Giải quyết bài toán Cây khung nhỏ nhất với MapReduce............. 12
3.2 ỨNG DỤNG MAPREDUCE GIẢI QUYẾT BAI TOAN TIM DƯỜNG DI
NGẮN NHẤT ............................................................................................ 13
3.2.1 Phát biểu bài toán .......................................................................... 13
3.2.2 Thuật toán Dijkstra ...................................................................... 13
3.2.3 Thời gian thực hiện thuật toán ...................................................... 13
3.2.4 Giải quyết bài toán Shortest Path với MapReduce ........................ 13


v
3.3 ỨNG DỤNG MAPREDUCE GIẢI QUYẾT BÀI TOÁN TIM LUỒNG
CỰC ĐẠI TRONG MẠNG ...................................................................... 14
3.3.1 Mạng ............................................................................................. 14
3.3.2 Giới thiệu bài toán......................................................................... 14
3.3.3 Giới thiệu thuật toán Ford – Fulkerson ......................................... 14

3.3.4 Giải quyết bài toán Luồng cực đại trên mạng với MapReduce ..... 14
3.4 THỬ NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ .................................... 14
3.4.1 Thử nghiệm hệ thống .................................................................... 14
3.4.2 Đánh giá kết quả thử nghiệm. ....................................................... 16
3.5 KẾT LUẬN CHƯƠNG ...................................................................... 18
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ............................................... 19
1. KẾT LUẬN ........................................................................................... 19
2. HƯỚNG PHÁT TRIỂN ....................................................................... 19
DANH MỤC TÀI LIỆU THAM KHẢO ................................................. 20
PHỤ LỤC .................................................................................................. 21


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

DANH MỤC CÁC BẢNG
DANH MỤC CÁC HÌNH ẢNH



1
MỞ ĐẦU
1.

Lý do 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ị”
1. Mục tiêu và nhiệm vụ nghiên cứuMụ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. Nhiệm vụ

-

Tìm hiểu về nền tảng tính toán phân tán với Hadoop.


2

-

Tìm hiểu về mô hình tính toán MapReduce.

-

Cấu trúc Framework, Hadoop, Kiến trúc HDFS.

-

Mô hình xử lý phân tán MapReduce trên nền tảng hadoop.


-

Tìm hiểu các mô hình xử lý phân tán

-

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

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á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
Ứ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
Các bài toán đồ thị

Giải thuật xử lý phân tán
4.2 Nghiên cứu thực nghiệm
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.

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 2. Mô hình xử lý phân tán MapReduce và Hadoop
Chương 3. Xây dựng bài toán đồ thị trên nền tảng hệ thống MapReduce
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ị.
5.


3
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
1.1.1
Hệ thống tập tin phân tán Hadoop
1.1.2
Các thành phần của Hadoop
Tên thành
phần
Core

MapReduce


HDFS

HBase

Hive

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à 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 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 file phân tán, cung cấp khả năng
lưu trữ dữ liệu 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.
Một cơ sở dữ liệu phân tán, theo hướng cột
(colunm-oriented). Hbase sử dụng HDFS
làm hạ tầng cho việc lưu trữ 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.
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.



4

Chukwa

Pig

Một hệ thống tập hợp và phân tích dữ liệu.
Chukwa chạy các 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.
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.

1.1.3
Nguyên tắc hoạt động của một Hadoop MapReduce
1.1.4
Các tiến trình nền tảng của Hadoop
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:

Hình 1.2 Tổng quan một Hadoop cluster
1.1.6
Hadoop Distributed File System (HDFS)

1.1.6.1 Giới thiệu
1.1.6.2 Kiến trúc HDFS.
1.1.6.3 Quá trình đọc file trên HDFS
1.1.6.4 Ghi file trên HDFS
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
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ý.


5
-

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.

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.
Như vậy toàn bộ quá trình MapReduce có thể hiểu như sau:

Hình 1.5 Mô hình làm việc của một công việc MapReduce
1.2.4
Hadoop MapReduce
Hadoop đã giữ nguyên cơ chế của MapReduce của Google để cài đặt thành
bộ máy thực thi MapReduce. Đây là một framework cho phép dễ dàng phát triển và
triển khai các ứng dụng MapReduce.
1.2.5
MapReduce không dùng vào việc
- MapReduce không thay thế chiến lược Database và DataWarehouse.
- MapReduce không thiết kế cho xử lý sự kiện phức tạp theo thời gian thực.
- MapReduce không tốt cho xử lý giao dịch (truy cập ngẫu nhiên).
- MapReduce không tốt cho bài toán tuần tự.
- Mapreduce không tốt khi xử lý nhiều tệp nhỏ.
- MapReduce không tốt cho tính toán hiệu năng cao với ít dữ liệu.
Tóm lại:
- MapReduce giấu sự phức tạp của mô hình lập trình cho làm việc phân tán
và khả năng chịu lỗi.
- Nguyên lý thiết kế:
+ Mở rộng khả năng, giảm lo ngại về phần cứng.
+ Rẻ hơn, cấu hình phần cứng thấp, giá lập trình và quản trị thấp.
- Điện toán đám mây sẽ giúp sử dụng Hadoop dễ dàng hơn.
1.3 Lý thuyết đồ thị(LTĐT)
1.3.1
Giới thiệu
Đồ thị là một cấu trúc rời rạc gồm các đỉnh và các cạnh nối các đỉnh đó.
Được mô tả hình thức G = (V, E). Trong đó, V gọi là tập các đỉnh (Vertices) và E
gọi là tập các cạnh (Edges). Có thể coi E là tập các cặp (u, v) với u và v là hai đỉnh



6
của V. Một số hình ảnh của đồ thị.

u

1.3.2

Hình 1.12 Mô hình đồ thị
Các khái niệm cơ bản

1.3.3
1.3.3.1
1.3.3.2
1.3.3.3
1.3.4
1.3.4.1
1.3.4.2
1.3.4.3
1.3.4.4
1.3.5
1.3.5.1
1.3.5.2

Hình 1.13 Phân loại đồ thị
Cách biểu diễn đồ thị
Biểu diễn đồ thị bằng ma trận kề
Biểu diễn đồ thị bằng danh sách cạnh
Biểu diễn đồ thị bằng danh sách kề

Duyệt đồ thị
Phát biểu bài toán
Thuật toán tìm kiếm theo chiều sâu DFS
Thuật toán tìm kiếm theo chiều rộng BFS
Độ phức tạp tính toán của thuật toán DFS và BFS
Tính liên thông của đồ thị
Tính liên thông trên đồ thị vô hướng
Tính liên thông trên đồ thị có hướng

v

u

w

v

w
x

x
y

s

t

y

s


t

Đồ thị G
Đồ thị G’
Hình 1.19 Đồ thị G là liên thông mạnh nhưng đồ thị G’ là liên thông yếu
Cho đồ thị G có hướng G = (V, E), G gọi là liên thông mạnh (strongly
connected) nếu luôn tồn tại đường đi (theo các cung định hướng) giữa hai đỉnh
bất kỳ của đồ thị, G’ gọi là liên thông yếu (weakly connected) nếu phiên bản vô
hướng của nó là đồ thị liên thông.
1.3.5.3 Xác định các thành phần liên thông
1.4 Kết luận chương
Chương này trình bày tổng quan về nền tảng tính toán phân tán với Hadoop, cơ


7
chế xử lý phân tán MapReduce cũng như những kiến thức cơ bản về đồ thị. Các vấn đề
trọng tâm này sẽ được thực hiện trong luận văn. Từ những vấn đề này sẽ đi sâu tìm
hiểu trọng tâm của luận văn và thực hiện ở các chương tiếp theo.
Chương 2. MÔ HÌNH XỬ LÝ PHÂN TÁN MAPREDUCE VÀ HADOOP
Chương này sẽ trình bày về cách tạo ra một ứng dụng MapReduce cơ bản,
sử dụng java API của Apache Hadoop. Trình bày các thư viện mà Hadoop cung
cấp để thao tác với hệ thống file của mình.
2.1 Xây dựng chương trình Mapreduce job
MapReduce job là một đơn vị của công việc (job) mà khách hàng muốn
được thực hiện: bao gồm dữ liệu đầu vào, chương trình MapReduce, và thông tin
cấu hình.
Để thể hiện các chức năng ở trên trong việc viết chương trình chúng ta cần xây
dựng 3 hàm:
- Hàm Map

- Hàm reduce
- Driver

Hình 2.1 Biểu đồ phân cấp của quá trình MapReduce
2.1.1 Các kiểu dữ liệu mà Hadoop hỗ trợ
Tên lớp

Miêu tả

BooleanWritable

Lớp bao của biến kiểu boolean đơn

ByteWritable

Lớp bao của biến kiểu byte đơn

DoubleWritable

Lớp bao của biến kiểu Double

FloatWritable

Lớp bao của biến kiểu Float

IntWritable

Lớp bao của biến kiểu Integer

LongWritable


Lớp bao của biến kiểu Long

Text

Lớp bao của biến kiểu văn bản định dạng UTF-8

NullWritable

Lớp để giữ chỗ khi mà key hoặc value không
cần thiết


8
2.1.2 Mapper
Để tạo ra một Mapper, thì lớp này implements từ interface Mapper và kế
thừa từ lớp MapReduceBase. Lớp MapReduceBase đóng vai trò là lớp cơ sở cho cả
mapper và reducer. Nó bao gồm hai phương thức hoạt động hiệu quả như là hàm
khởi tạo và hàm hủy của lớp.
void configure(JobConf job): trong hàm này có thể trích xuất các thông
số cài đặt hoặc bằng các file XML cấu hình hoặc trong các lớp chính của ứng dụng.
Hàm này được gọi trước khi xử lý dữ liệu.
void close(): Như hành động cuối trước khi chấm dứt nhiệm vụ map, hàm
này nên được gọi bất cứ khi nào kết thúc – kết nối cơ sở dữ liệu, các file đang mở.
Hadoop cung cấp một vài cài đặt Mapper hữu dụng như trong bảng 2.2 sau:
Bảng 2.2 Một số lớp thực hiện mapper được định nghĩa trước bởi Hadoop
Tên lớp
Miêu tả
Với cài đặt Mapper <k, v, k, v> và ánh xạ đầu
IdentityMapper<k,v>

vào trực tiếp vào đầu ra
Với cài đặt Mapper<k, v, v, k> và đảo ngược cặp
InverseMapper<k,v>
(k, v)
Với
cài
đặt
MapperText,
Text,
RegexMapper<k>
LongWritable> và sinh ra cặp (match, 1) cho mỗi
ánh xạ biểu thức phù hợp.
Với
cài
đặt
MapperText,
Text,
TokenCountMapper<k>
LongWritable> sinh ra một cặp (token, 1) khi một
giá trị đầu vào là tokenized
2.1.3 Reducer
Với bất cứ cài đặt Mapper, một reducer đầu tiên phải mở rộng từ lớp
MapReduce base để cho phép cấu hình và dọn dẹp. Ngoài ra, nó cũng phải
implement giao diện Reducer chỉ có một phương thức duy nhất sau:
void reduce(k2 key, Iterator<v2> values,OutputCollector<k3,v3> output,
Reporter reporter) throws IOException
Khi nhận được các task từ đầu ra của các Mapper khác nhau, nó sắp xếp các dữ
liệu đến theo các khóa của các cặp (key,value) và nhóm lại các giá trị cùng khóa.

Hàm reduce() được gọi sau đó sinh ra một danh sách (có thể rỗng) các cặp (k3,
v3) bằng cách lặp lại trên các giá trị được liên kết với khóa đã cho. OutputCollector
nhận từ đầu ra của quá trình reduce và ghi nó ra đầu ra file. Reporter cung cấp tùy
chọn ghi lại thông tin thêm về reducer như là một tiến trình công việc.


9
Bảng 2.3 Danh sách các reducer cơ bản được triển khai cung cấp bởi Hadoop
Tên lớp
Miêu tả
Với cài đặt Reducer <k, v, k, v> và ánh xạ đầu vào
identityReducer<k, v>
trực tiếp vào đầu ra
Với cài đặt Reducer longSumReducer<k>
LongWritable> và quyết định tổng hợp tất cả các
giá trị tương tứng với các key đã cho.

2.2 Dữ liệu đầu vào và đầu ra
Để cho phép dễ dàng xử lý phân tán, MapReduce làm một số giả định về
dữ liệu để xử lý. Cung cấp một cách linh hoạt trong việc xử lý với rất nhiều định
dạng dữ liệu khác nhau.
2.2.1 Dữ liệu đầu vào
2.2.2 Dữ liệu đầu ra
2.3 Tập tin tuần tự
2.4. Kết luận chương
Chương này đã trình bày về phương pháp viết một MapReduce job, các kiểu dữ
liệu mà Hadoop hỗ trợ, cũng như cách viết các mapper và reducer. Đây là nền tảng
cơ bản để xây dựng chương trình viết bằng mô hình Mapreduce để giải các bài toán
được đưa ra trong chương ba.



10
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
Chương này giới thiệu một số bài toán về đồ thị như Cây khung nhỏ nhất là bài
toán cụ thể, tìm đường đi ngắn nhất, luồng cực đại trên mạng. Xây dựng giải thuật giải
các bài toán này trên hệ thống MapReduce, triển khai demo chương trình trên môi trường
máy Ubuntu 14.04 với công cụ triển khai như VMware, Eclipse, Plugin cho Hadoop
trên Eclipse và đánh giá kết quả đạt được trên bộ dữ liệu đã thử nghiệm.
3.1 Ứng dụng Mapreduce giải quyết bài toán tìm cây khung nhỏ nhất
3.1.1 Giới thiệu bài toán
3.1.2 Tổng quan
Với một đồ thị liên thông, vô hướng cho trước, cây khung là một đồ thị
con có dạng cây và tất cả các đỉnh liên thông với nhau. Một đồ thị có thể có nhiều
cây khung phủ khác nhau.

Hình 3.1 Cây khung nhỏ nhất của một đồ thị phẳng.
3.1.3 Giải thuật Cây khung nhỏ nhất
Có hai giải thuật thường được sử dụng, đó là giải thuật của Prim và giải thuật
của Kruskal. Cả hai giải thuật này đều thuộc dạng giải thuật tham lam chạy với thời
gian đa thức, vì vậy bài toán Cây khung nhỏ nhất là dạng FP, và các bài toán ra
quyết định liên quan như xác định xem một cạnh cụ thể có thuộc MST hay không
hoặc xác định xem tổng trọng số tối thiểu có vượt quá một giá trị nào đó hay không
là thuộc dạng P.
Nếu trọng số các cạnh là số nguyên, thì giải thuật các đơn định giải được bài
toán với O(m+n) phép tính nguyên.
3.1.4 Thuật toán Kruskal
3.1.4.1 Tư tưởng thuật toán
3.1.4.2 Mô tả thuật toán

Giả sử ta cần tìm Cây khung nhỏ nhất của đồ thị G. Thuật toán bao gồm các
bước sau:
- Bước 1: Khởi tạo rừng cây F (tập hợp các cây), trong đó mỗi đỉnh của G
tạo thành một cây riêng biệt.
- Bước 2: Khởi tạo tập S chứa tất cả các cạnh của G.
- Bước 3: Chừng nào S còn khác rỗng và F gồm hơn một cây.


11
- Bước 4: Xóa cạnh nhỏ nhất trong S.
- Bước 5: Nếu cạnh đó nối hai cây khác nhau trong F, thì thêm nó vào F và
hợp Bước hai cây kề với nó làm một.
- Bước 6: Nếu không thì loại bỏ cạnh đó.
- Bước 7: Khi thuật toán kết thúc, rừng chỉ gồm đúng một cây và đó là một
cây khung nhỏ nhất của đồ thị G.
Mô tả giải thuật bằng các bước sau:
Cho đồ thị G = (X,E)
- Bước 1: Sắp xếp các cạnh của đồ thị theo thứ tự trọng số tăng dần.
- Bước 2: Khởi tạo T := ∅
- Bước 3: Lần lượt lấy từng cạnh thuộc danh sách đã sắp xếp. Nếu T+{e}
không chứa chu trình thì gán T:=T+{e}.
- Bước 4: Nếu T đủ n – 1 phần tử thì dừng, ngược lại làm tiếp bước 3.
3.1.4.3 Kỹ thuật gắn nhãn đỉnh
3.1.4.4 Thời gian thực hiện thuật toán
3.1.4.5 Chứng minh tính đúng đắn
Chứng minh gồm hai phần: chứng minh kết quả thuật toán là một cây khung và
cây khung đó là nhỏ nhất.
- Cây khung
F luôn là một rừng do việc nối hai cây bằng một cạnh luôn tạo ra một cây mới.
Giả thiết phản chứng F gồm ít nhất hai cây A và B. Khi cạnh đầu tiên nối các đỉnh

trong A của F với phần còn lại của đồ thị được xem xét (cạnh này tồn tại do G liên
thông) thì rõ ràng thuật toán sẽ chọn nó. Vì vậy A không thể là một cây trong F khi
thuật toán kết thúc. Do đó, F liên thông và là một cây khung.
- Nhỏ nhất
Ta chứng minh mệnh đề P sau đây bằng quy nạp: Nếu F là tập hợp các cạnh đã
chọn tại bất kì thời điểm nào trong quá trình thực thi thuật toán thì tồn tại Cây
khung nhỏ nhất chứa F.
3.1.4.6 Ví dụ
Cho đồ thị như hình vẽ. Yêu cầu tìm ra cây khung nhỏ nhất của đồ thị G.
-n=7
- Vậy số cạnh trong tập hợp T: n – 1 = 7 – 1 = 6


12

Hình 3.2 Đồ thị G
Các bước thực hiện:
- Bước 1: Liệt kê tất cả cạnh với trọng số của cạnh đó, dựa vào đồ thị ta liệt kê ra
các cạnh gồm đỉnh đầu, đỉnh cuối và trọng số.
- Bước 2: Sắp xếp các cạnh theo trọng số tăng dần.
- Bước 3: Dựa vào kết quả ở bước 2. Ta tiến hành tìm cây khung bằng thuật toán
kruskal
 Kết quả ta tìm được đồ thị sau:

1

3

1


4

1
6

7

5

3
2

2

3

5

Hình 3.3 Kết quả đồ thị G sau khi dùng thuật toán Kruskal
Với tổng chi phí là: Ta cộng tất cả các trọng số giữa các đỉnh lại với nhau
tổng chi phí là: 3 + 1 + 3 + 2 + 5 + 1 = 15
3.1.5 Giải quyết bài toán Cây khung nhỏ nhất với MapReduce
Người dùng nhập một file input.txt bao gồm trọng số, điểm đầu và điểm đích
có dạng:
6<tab>A<tab>C
5<tab>C<tab>E
3<tab>C<tab>F
2<tab>C<tab>D
1<tab>B<tab>C
2<tab>B<tab>D

4<tab>A<tab>D
4<tab>E<tab>F


13
4<tab>D<tab>F
5<tab>A<tab>B
File vừa nhập sẽ được chuyển tới hàm Map để xử lý.
3.1.5.1 Quá trình Map cho bài toán Cây khung nhỏ nhất
Hàm Map sẽ duyệt từ dòng 1 đến dòng 10, với từng dòng một tương ứng thì
nó sẽ thực hiện một lần chạy trong phương thức Map, và cách xử lý như sau:
- Ta nhìn vào dòng đầu tiên của file input.txt là 6<tab>A<tab>C
- Ta sẽ phải xóa dấu tab đưa vào mảng có dạng: [‘6’, ‘A’, ‘C’]
Mục đích của hàm Map sẽ xuất ra các cặp <key, value> tương ứng cho
từng dòng khi nó chạy qua, trong đó key là trọng số, value là nút nguồn và nút đích.
3.1.5.2 Quá trình Reduce cho bài toán Cây khung nhỏ nhất
Hàm Reduce có nhiệm vụ tổng hợp các cặp <key, value> sau khi chạy hàm
Map. Các key giống nhau được sắp xếp chạy trong cùng một Reduce, và chạy thuật
toán Kruskal như đã mô tả ở trên.
3.2 Ứng dụng Mapreduce giải quyết bài toán tìm đường đi ngắn nhất
Tìm đường đi ngắn nhất là một bài toán kinh điển đã được nghiên cứu rất
nhiều và ứng dụng trong những hệ thống chuyên biệt. Rất nhiều nghiên cứu đã cải
tiến những thuật toán và tối ưu thuật toán về không gian tìm kiếm, thời gian tìm
kiếm.
Tuy nhiên, với sự bùng nổ thông tin và sự phát triển của công nghệ thông tin,
thuật toán tìm kiếm đường đi ngắn nhất kinh điển không thể đáp ứng được thời gian
tìm kiếm tốt nhất trên lượng dữ liệu lớn.
Bài toán đặt ra là làm thế nào để giải quyết vấn đề tìm kiếm đường đi ngắn nhất
với nguồn dữ liệu lớn và phân tán, đáp ứng được mục tiêu rút ngắn thời gian tìm
kiếm.

3.2.1 Phát biểu bài toán
3.2.2 Thuật toán Dijkstra
3.2.3 Thời gian thực hiện thuật toán
3.2.4 Giải quyết bài toán Shortest Path với MapReduce
Giả sử ta có đồ thị

Hình 3.4 Mô tả một đồ thị
Số đỉnh của đồ thị: 10


14
Số cạnh của đồ thị: 21
Đỉnh bắt đầu (Source Node) là đỉnh mà tại đó ta tìm đường đi ngắn nhất từ đỉnh đó
qua tất cả các đỉnh còn lại.
3.2.4.1 Quá trình Map cho bài toán đường đi ngắn nhất
3.2.4.2 Quá trình Reduce cho bài toán đường đi ngắn nhất
3.3 Ứng dụng Mapreduce giải quyết bài toán tìm luồng cực đại trong mạng
3.3.1 Mạng
Giá trị của một luồng là tổng luồng trên các cung đi ra khỏi đỉnh phát = tổng

luồng trên các cung đi vào đỉnh thu.
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.
3.3.2 Giới thiệu bài toán
3.3.3 Giới thiệu thuật toán Ford – Fulkerson
3.3.4 Giải quyết bài toán Luồng cực đại trên mạng với MapReduce
3.3.4.1 Quá trình Map của bài toán luồng cực đại trên mạng:
3.3.4.2 Quá trình Reduce của bài toán luồng cực đại trên mạng:
3.4 Thử nghiệm và đánh giá kết quả
3.4.1 Thử nghiệm hệ thống

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

Hình 3.7 Giao diện chính của chương trình MST
Giao diện chính của chương trình cho phép người dùng chọn các thao tác
cần thực hiện như vẽ đồ thị tự động, tìm cây khung của đồ thị, xây dựng ma trận
trọng số trên đồ thị.
3.4.1.2 Thiết kế đồ thị
Để thiết kế đồ thị người dùng có thể chọn chức năng Vẽ đồ thị tự động hoặc
kích vào biểu tượng

để thiết kế một đồ thị như hình 3.7


15

Hình 3.8 Thiết kế đồ thị
Ở đây, có thể thay đổi các trọng số giữa các nút và tên các nút thay vì chương
trình đặt mặc định.
Ta có thể chọn chức năng Ma trận để xem ma trận trọng số giữa các nút sau
khi vẽ đồ thị

Hình 3.9 Ma trận trọng số giữa các nút
Tùy chọn vẽ đồ thị tự động để có thể nhìn đồ thị một cách dễ dàng hơn.
Chọn nút Cây khung để bắt đầu chạy thuật toán MapReduce và xuất ra Cây
khung nhỏ nhất.

Hình 3.10 Giao diện console trong khi chạy MapReduce
Như ta thấy ở giao diện console, chương trình đã thực hiện chạy MapReduce
với bài toán Cây khung nhỏ nhất.


-

Hình 3.11 Kết quả sau khi chạy xong MapReduce
Xuất ra file Output


×