1. Trang chủ
  2. » Thể loại khác

ỨNG DỤNG MÔ HÌNH XỬ LÝ PHÂN TÁN MAPREDUCE ĐỂ GIẢI QUYẾT BÀI TOÁN TSP LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

90 7 0

Đ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 90
Dung lượng 2,43 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

ỨNG DỤNG MÔ HÌNH XỬ LÝ PHÂN TÁN MAPREDUCE ĐỂ GIẢI QUYẾT BÀI TOÁN TSP Học viên: Phan Nhựt Tân Chuyên ngành: Khoa học máy tính Mã số: 60480101 Khóa: 33 Trường Đại học Bách khoa – ĐHĐN T

Trang 1

Đà Nẵng – Năm 2018

Trang 2

ĐỂ GIẢI QUYẾT BÀI TOÁN TSP

Chuyên ngành: KHOA HỌC MÁY TÍNH

Mã số: 60.48.01.01

LUẬN VĂN THẠC SĨ

Người hướng dẫn: PGS.TS NGUYỄN TẤN KHÔI

Đà Nẵng – Năm 2018

Trang 3

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

PHAN NHỰT TÂN

Trang 4

MỤC LỤC

MỞ ĐẦU 1

1 Lý do chọn đề tài 1

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

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

4 Phương pháp nghiên cứu 3

5 Ý nghĩa khoa học và thực tiễn của luận văn 3

CHƯƠNG 1 - TỔNG QUAN VỀ DỮ LIỆU LỚN VÀ BÀI TOÁN TSP 4

1.1 Dữ liệu lớn 4

1.1.1 Đặc trưng của dữ liệu lớn và sự khác biệt với dữ liệu truyền thống 4

1.1.2 Đặc trưng 5V của dữ liệu lớn 6

1.1.3 Sự khác biệt giữa dữ liệu lớn với dữ liệu truyền thống 7

1.2 Các khái niệm cơ bản về đồ thị 8

1.2.1 Định nghĩa đồ thị 8

1.2.2 Đồ thị Hamilton 14

1.3 Bài toán người bán hàng (TSP) 14

1.3.1 Giới thiệu bài toán người bán hàng (TSP) 16

1.3.2 Mô tả bài toán TSP 16

1.3.3 Các thuật toán giải bài toán TSP 16

1.4 Kết chương 18

CHƯƠNG 2 - XỬ LÝ PHÂN TÁN HADOOP-MAPREDUCE 19

2.1 Giới thiệu nền tảng Hadoop 19

2.1.1 Giới thiệu Hadoop 19

2.1.2 Lịch sử Hadoop 19

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

2.1.4 Ứng dụng của Hadoop trong một số công ty 21

2.1.5 Cụm máy tính Hadoop(Hadoop cluster) 22

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

2.2.1 Giới thiệu 23

2.2.2 Kiến trúc HDFS 24

2.3 Mô hình tính toán MapReduce 27

2.3.1 Giới thiệu mô hình tính toán MapReduce 27

2.3.2 Tổng quan về mô hình tính toán Mapreduce 28

2.3.3 Cơ chế hoạt động của MapReduce 28

2.3.4 Quá trình xử lý MapReduce 29

Trang 5

2.3.5 Hadoop MapReduce 31

2.4 Kết chương 33

CHƯƠNG 3 - PHÂN TÍCH THIẾT KẾ BÀI TOÁN TSP DỰA TRÊN MÔ HÌNH XỬ LÝ MAPREDUCE 34

3.1 Bài toán TSP 34

3.2 Phương pháp nhánh và cận giải bài toán người bán hàng 34

3.2.1 Ma trận rút gọn 35

3.2.2 Phân nhánh 36

3.2.3 Chọn cạnh phân nhánh 37

3.2.4 Chọn 2 cạnh cuối cùng 37

3.3 Thiết kế cấu trúc dữ liệu và cài đặt thuật toán nhánh cận 37

3.3.1 Thiết kế cấu trúc dữ liệu 37

3.3.2 Hàm rút gọn 38

3.3.3 Thủ tục phân nhánh 40

3.3.4 Thủ tục chọn cạnh phân nhánh 42

3.4 Thiết kế bài TSP trên mô hình MapReduce 49

3.4.1 Bài toán TSP 49

3.4.2 Qui trình xử lí bài toán TSP trên mô hình Mapreduce 50

3.4.3 Cài đặt và chạy bài toán TSP trên mô hình MapReduce 55

3.4.4 Đánh giá kết quả 56

3.5 Kết chương 58

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 59 TÀI LIỆU THAM KHẢO

PHỤ LỤC

QUYẾT ĐỊNH GIAO ĐỀ TÀI LUẬN VĂN (bản sao)

Trang 6

ỨNG DỤNG MÔ HÌNH XỬ LÝ PHÂN TÁN MAPREDUCE ĐỂ GIẢI

QUYẾT BÀI TOÁN TSP

Học viên: Phan Nhựt Tân Chuyên ngành: Khoa học máy tính

Mã số: 60480101 Khóa: 33 Trường Đại học Bách khoa – ĐHĐN

Tóm tắt : Mô hình xử lý phân tán MapReduce là mô hình dùng để xử lý dữ liệu

lớn trên nhiều cụm máy tính Trong luận văn này, tôi đã trình bày cơ sở lý thuyết tổng quan về mô hình xử lý phân tán MapReduce, tổng quan về dữ liệu lớn, sự khác biệt giữa

dữ liệu lớn và dữ liệu truyền thống, bài toán TSP(người bán hàng) Tiếp đến, tôi đã tìm hiểu chi tiết hệ thống phân tán MapReduce, qui trình xử lý một bài toán trên mô hình MapReduce, tìm hiểu hàm Map, hàm Reduce, quá trình xử lí bài toán TSP (người bán hàng) trên mô hình MapReduce Cuối cùng, tôi đã xây dựng thành công chương trình giải bài toán TSP trên mô hình MapReduce và đã cho thử nghiệm chương trình trên mô hình tuần tự và mô hình xử lý phân tán MapReduce bằng nhiều hình thức khác nhau như: Số lượng đỉnh của bài toán, số lượng máy tính, cụm máy tính tham gia tính toán Qua kết quả thử nghiệm cho thấy thời gian thực hiện chương trình nhanh hơn nhiều so với chương trình viết bằng thuật toán xử lý tuần tự với cùng số đỉnh Điều này thêm một lần nữa khẳng định rằng việc ứng dụng cơ chế xử lý phân tán MapReduce để giải quyết các bài toán có dữ liệu lớn( bài toán TSP) là có hiệu quả và đúng đắn

Từ khóa : Xử lý phân tán MapReduce; bài toán người bán hàng; xử lý song song

APPLYING DISTRIBUTED PROCESSING MODEL MAPREDUCE TO

TRAVELING SALESMAN PROBLEM

Student : Phan Nhut Tan Branch : Computer Science

Code : 60480101 DANANG UNIVERSITY OF TECHNOLOGY Course : 33

Summary: Distributed Processing model - MapReduce is a model to solve Big

Data in cluster computers In this thesis, I am going to present general theory about Distributed Processing model of MapReduce, the overall about Big Data, the difference between Big Data and Generic Data, TSP problem Furthermore, I am investigating the details in Distributed Processing model of MapReduce, processing to solve a problem

in MapReduce model, investigating Map function, Reduce function, processing to solve the problem of TSP basing on MapReduce model Finally, I have successfully set

up a program to solve TSP problem in MapReduce model, and run program in both Sequence model, and Distributed Processing model MapReduce in different forms: the quantity peak of problem, the quantity of processor, cluster computer participating in a process Based on experiment, time consuming for program (in Distributed Processing model) is must faster than the program written in Sequence model, with the same quantity peak of problem This experiment is confirming about the efficiency and property in applying Distributed Processing model MapReduce to solve Big Data problems (TSP problem)

Keyword: Distributed Processing MapReduces; Sale problem; Parallel Processing

Trang 8

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

Trang 9

Số hiệu

3.9 Giải quyết từng thành phần riêng biệt bài toán TSP 52

3.11 Hợp nhất tất cả các thành phần để có kết quả cuối cùng 54

3.13 Kết quả thực hiện chương trình bài toán TSP trên Hadoop 55

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

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

nhau với số đỉnh của đồ thị gồm 500, 1000 và 4000 đỉnh 57 3.17 Mô tả sự khác nhau về thời gian thực hiện khi đầu vào khác

Trang 10

Để giải bài toán Người bán hàng (Travelling Salesman Problem-TSP) bằng các các thuật toán, kỹ thuật, phương pháp nêu trên gặp nhiều khó khăn vì độ phức tạp tính toán cao, 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 lên đến hàng chục ngàn đỉnh sẽ gặp phải về vấn đề 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ớ,…Để xử lý dữ liệu có quy mô lớn, kích thước của bài toán tăng lên và không gian tìm kiếm lớn Điều đó đặt ra là ta phải chia bài toán cho nhiều bộ xử lý đồng thời tham gia tính toán, dẫn đến ta phải xây dựng thuật toán song song trên đa bộ xử lý [1][5][6][7][8]

Với sự phát triển của công nghệ đặt ra cho chúng ta nhiều thách thức Bởi thời đại

mà chúng ta đang sống ngành công nghệ máy tính phát triển như vũ bão Từ thế kỷ thứ

3 trước công nguyên, thư viện Alexandria được coi là nơi chứa đựng toàn bộ kiến thức của loài người Ngày nay, tổng lượng thông tin trên toàn thế giới đủ để chia đều cho mỗi đầu người một lượng nhiều gấp 320 lần lượng thông tin mà các sử gia tin rằng thư viện Alexandria từng lưu trữ - ước tính vào khoảng 120 exabyte Nếu tất cả những thông tin này được ghi lại vào đĩa CD và chúng ta xếp chồng các đĩa CD này lên nhau,

sẽ có tới 5 chồng đĩa mà mỗi chồng đều vươn dài chạm tới mặt trăng

Sự bùng nổ dữ liệu này chỉ mới xuất hiện gần đây Cách đây không lâu, vào năm

2000, chỉ mới có một phần tư lượng thông tin lưu trữ trên toàn thế giới ở dạng kỹ thuật

số Ba phần tư còn lại được người ta lưu trên giấy tờ, phim, và các phương tiện analog khác Nhưng do lượng dữ liệu kỹ thuật số bùng nổ quá nhanh – cứ 3 năm lại tăng gấp đôi – cục diện trên nhanh chóng đảo ngược Ngày nay, chỉ dưới 2% tổng lượng thông tin chưa được chuyển sang lưu trữ ở dạng kỹ thuật số Theo tài liệu của Intel vào tháng 09/2013, hiện nay thế giới đang tạo ra 1 petabyte dữ liệu mỗi 11 giây, tương đương với đoạn video HD dài 13 năm Nhà bán lẻ online Amazon.com thì phải xử lí hàng triệu hoạt động mỗi ngày, cũng như yêu cầu từ khoảng nữa triệu đối tác bán hàng Tương

Trang 11

tự, Facebook cũng phải quản lí 50 tỉ bức ảnh từ người dùng tải lên, YouTube hay Google thì phải lưu lại hết các lượt truy vấn và video của người dùng cùng nhiều loại thông tin khác có liên quan

Để 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 [9][10][11] 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 MapReduce có các ưu điểm nổi bật như: 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 cụm máy tính với nhau vì chúng hoạt động một cách độc lập;

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 [10][12][13]

Trong thực tiễn, có nhiều bài toán với yêu 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 bài toán Người bán hàng(Travelling Salesman Problem-TSP) là mục tiêu mà tôi lựa chọn cho đề tài luận văn cao học:

“Ứng dụng mô hình xử lý phân tán Mapreduce để giải quyết bài toán TSP ”

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

2.1 Mục tiêu nghiên cứ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 bài toán Người bán hàng(Travelling Salesman Problem-TSP) có kích

thước dữ liệu lớn

2.2 Nhiệm vụ nghiên cứu

-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 lý thuyết đồ thị

-Tìm hiểu bài toán Người bán hàng(TSP)

Trang 12

-Xây dựng giải thuật giải quyết bài toán Người bán hàng(TSP) 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ấu trúc Framework, Hadoop, Kiến trúc HDFS

-Bài toán Người bán hàng(TSP)

-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

-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 bài toán Người bán hàng(TSP)

4 Phương pháp nghiên cứu

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

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

Bài toán Người bán hàng(TSP)

Giải thuật xử lý phân tán

4.2 Phương pháp nghiên cứu thực nghiệm

Xây dựng sơ đồ, các thuật toán giải bài toán Người bán hàng(TSP)

Lập trình ứng dụng bằng ngôn ngữ Java

Xây dựng chương trình thử nghiệm

5 Ý nghĩa khoa học và thực tiễn của luận văn

5.1 Ý nghĩa khoa học

Xây dựng được giải thuật giải bài toán Người bán hàng (TSP) từ giải thuật tuần

tự sang xử lý song song trên mô hình phân tán MapReduce

5.2 Ý nghĩa thực tiễn

Ứng dụng xử lý dữ liệu lớn trên mô hình phân tán giải bài toán Người bán hàng (TSP)

Trang 13

CHƯƠNG 1 - TỔNG QUAN VỀ DỮ LIỆU LỚN VÀ BÀI TOÁN TSP

Chương này tìm hiểu về dữ liệu lớn(Big data), nghiên cứu lý thuyết liên quan về

đồ thị, tìm hiểu nội dung bài toán bán hàng và các phương pháp giải bài toán người bán hàng: thuật toán vét cạn, thuật toán láng giềng gần nhất, thuật toán tìm kiếm cục

bộ, thuật toán nhánh cận và thuật toán di truyền

1.1 Dữ liệu lớn

Trước đây, chúng ta mới chỉ biết đến dữ liệu có cấu trúc (structure data), ngày nay, với sự kết hợp của dữ liệu và internet, đã xuất hiện một dạng khác của dữ liệu Big data (dữ liệu lớn)[10] Dữ liệu này có thể từ các nguồn như: Hồ sơ hành chính, giao dịch điện tử, dòng trạng thái (status), chia sẻ hình ảnh, bình luận, nhắn tin của chính chúng ta, nói cách khác chúng là dữ liệu được sản sinh qua quá trình chia sẻ thông tin trực tuyến liên tục của người sử dụng Sự bùng nổ dữ liệu này chỉ mới xuất hiện gần đây Cách đây không lâu, vào năm 2000, chỉ mới có một phần tư lượng thông tin lưu trữ trên toàn thế giới ở dạng kỹ thuật số Ba phần tư còn lại được người ta lưu trên giấy tờ, phim, và các phương tiện analog khác Nhưng do lượng dữ liệu kỹ thuật

số bùng nổ quá nhanh – cứ 3 năm lại tăng gấp đôi – cục diện trên nhanh chóng đảo ngược Ngày nay, chỉ dưới 2% tổng lượng thông tin chưa được chuyển sang lưu trữ ở dạng kỹ thuật số Theo tài liệu của Intel vào tháng 09/2013, hiện nay thế giới đang tạo

ra 1 petabyte dữ liệu mỗi 11 giây, tương đương với đoạn video HD dài 13 năm Nhà bán lẻ online Amazon.com thì phải xử lí hàng triệu hoạt động mỗi ngày, cũng như yêu cầu từ khoảng nữa triệu đối tác bán hàng Tương tự, Facebook cũng phải quản lí 50 tỉ bức ảnh từ người dùng tải lên, YouTube hay Google thì phải lưu lại hết các lượt truy vấn và video của người dùng cùng nhiều loại thông tin khác có liên quan

1.1.1 Đặc trưng của dữ liệu lớn và sự khác biệt với dữ liệu truyền thống

a) Giới thiệu dữ liệu lớn

Dữ liệu lớn(Big data) là một thuật ngữ chỉ bộ dữ liệu lớn hoặc phức tạp mà các phương pháp truyền thống không đủ các ứng dụng để xử lý dữ liệu này

Dữ liệu lớn là những nguồn thông tin có đặc điểm chung khối lượng lớn, tốc độ nhanh và dữ liệu định dạng dưới nhiều hình thức khác nhau, do đó muốn khai thác được đòi hỏi phải có hình thức xử lý mới để đưa ra quyết định, khám phá và tối ưu hóa quy trình

b) Nguồn hình thành dữ liệu và phương pháp khai thác và quản lý dữ liệu lớn

Qua thống kê và tổng hợp, nguồn dữ liệu lớn được hình thành chủ yếu từ

6 nguồn:

(1) Dữ liệu hành chính (phát sinh từ chương trình của một tổ chức, có thể là

Trang 14

chính phủ hay phi chính phủ) Ví dụ, hồ sơ y tế điện tử ở bệnh viện, hồ sơ bảo hiểm,

lý dữ liệu lớn

Hình 1.1: Mô tả dữ liệu lớn

Trang 15

1.1.2 Đặc trưng 5V của dữ liệu lớn

Dữ liệu lớn có 5 đặc trưng cơ bản như sau (mô hình 5V)

Hình 1.2 Các đặc trưng cơ bản của mô hình dữ liệu lớn

a) Khối lượng dữ liệu (Volume)

Đây là đặc điểm tiêu biểu nhất của dữ liệu lớn, khối lượng dữ liệu rất lớn Kích

cỡ của Big Data đang từng ngày tăng lên, và tính đến năm 2012 thì nó có thể nằm trong khoảng vài chục terabyte cho đến nhiều petabyte(1 petabyte = 1024 terabyte) chỉ cho một tập hợp dữ liệu Dữ liệu truyền thống có thể lưu trữ trên các thiết bị đĩa mềm, đĩa cứng Nhưng với dữ liệu lớn chúng ta sẽ sử dụng công nghệ “đám mây” mới đáp ứng khả năng lưu trữ được dữ liệu lớn

b) Tốc độ (Velocity)

Tốc độ có thể hiểu theo 2 khía cạnh:

Khối lượng dữ liệu gia tăng rất nhanh (mỗi giây có tới 72.9 triệu các yêu cầu truy cập tìm kiếm trên web bán hàng của Amazon);

Xử lý dữ liệu nhanh ở mức thời gian thực (real-time), có nghĩa dữ liệu được xử lý ngay tức thời ngay sau khi chúng phát sinh (tính đến bằng mili giây) Các ứng dụng phổ biến trên lĩnh vực Internet, Tài chính, Ngân hàng, Hàng không, Quân sự, Y tế – Sức khỏe như hiện nay phần lớn dữ liệu lớn được xử lý real-time Công nghệ xử lý dữ liệu lớn ngày nay đã cho phép chúng ta xử lý tức thì trước khi chúng được lưu trữ vào

cơ sở dữ liệu

c) Đa dạng (Variety)

Đối với dữ liệu truyền thống chúng ta hay nói đến dữ liệu có cấu trúc, thì ngày nay hơn 80% dữ liệu được sinh ra là phi cấu trúc (tài liệu, blog, hình ảnh, vi deo, bài

Trang 16

hát, dữ liệu từ thiết bị cảm biến vật lý, thiết bị chăm sóc sức khỏe…) Big Data cho phép liên kết và phân tích nhiều dạng dữ liệu khác nhau

Ví dụ: Với các bình luận của một nhóm người dùng nào đó trên Facebook với thông tin video được chia sẻ từ Youtube và Twitter

d) Độ tin cậy/chính xác (Veracity)

Một trong những tính chất phức tạp nhất của dữ liệu lớn là độ tin cậy chính xác của dữ liệu Với xu hướng phương tiện truyền thông xã hội (Social Media) và mạng xã hội (Social Network) ngày nay và sự gia tăng mạnh mẽ tính tương tác và chia sẻ của người dùng Mobile làm cho bức tranh xác định về độ tin cậy và chính xác của dữ liệu ngày một khó khăn hơn Bài toán phân tích và loại bỏ dữ liệu thiếu chính xác và nhiễu đang là tính chất quan trọng của BigData

e) Giá trị (Value)

Giá trị là đặc điểm quan trọng nhất của dữ liệu lớn, vì khi bắt đầu triển khai xây dựng dữ liệu lớn thì việc đầu tiên chúng ta cần phải làm đó là xác định được giá trị của thông tin mang lại như thế nào, khi đó chúng ta mới có quyết định có nên triển khai dữ liệu lớn hay không Nếu chúng ta có dữ liệu lớn mà chỉ nhận được 1% lợi ích từ nó, thì không nên đầu tư phát triển dữ liệu lớn Kết quả dự báo chính xác thể hiện rõ nét nhất

về giá trị của dữ liệu lớn mang lại

Ví dụ: Từ khối dữ liệu phát sinh trong quá trình khám, chữa bệnh sẽ giúp dự báo

về sức khỏe được chính xác hơn, sẽ giảm được chi phí điều trị và các chi phí liên quan đến y tế

1.1.3 Sự khác biệt giữa dữ liệu lớn với dữ liệu truyền thống

Dữ liệu lớn khác với dữ liệu truyền thống ở 4 điểm cơ bản: Dữ liệu đa dạng hơn; lưu trữ dữ liệu lớn hơn; truy vấn nhanh hơn; độ chính xác cao hơn

a) Dữ liệu đa dạng hơn

Khi khai thác dữ liệu truyền thống (dữ liệu có cấu trúc), chúng ta thường phải trả

lời các câu hỏi: Dữ liệu lấy ra kiểu gì? Định dạng dữ liệu như thế nào? Đối với dữ liệu lớn, không phải trả lời các câu hỏi trên Hay nói khác khi khai thác, phân tích dữ liệu lớn chúng ta không cần quan tâm đến kiểu dữ liệu và định dạng của chúng, điều quan tâm là giá trị mà dữ liệu mang lại có đáp ứng được cho công việc hiện tại và tương lai hay không

b) Lưu trữ dữ liệu lớn hơn

Lưu trữ dữ liệu truyền thống vô cùng phức tạp và luôn đặt ra câu hỏi lưu như thế nào? Dung lượng kho lưu trữ bao nhiêu là đủ? Gắn kèm với câu hỏi đó là chi phí đầu

tư tương ứng Công nghệ lưu trữ dữ liệu lớn hiện nay đã phần nào có thể giải quyết

Trang 17

được vấn đề trên nhờ những công nghệ lưu trữ đám mây, phân phối lưu trữ dữ liệu phân tán và có thể kết hợp các dữ liệu phân tán lại với nhau một cách chính xác và xử

lý nhanh trong thời gian thực

c) Truy vấn dữ liệu nhanh hơn

Dữ liệu lớn được cập nhật liên tục, trong khi đó kho dữ liệu truyền thống thì lâu

lâu mới được cập nhật và trong tình trạng không theo dõi thường xuyên gây ra tình trạng lỗi cấu trúc truy vấn dẫn đến không tìm kiếm được thông tin đáp ứng theo yêu cầu

d) Độ chính xác cao hơn

Dữ liệu lớn khi đưa vào sử dụng thường được kiểm định lại dữ liệu với những

điều kiện chặt chẽ, số lượng thông tin được kiểm tra thông thường rất lớn, và đảm bảo

về nguồn lấy dữ liệu không có sự tác động của con người vào thay đổi số liệu thu thập

1.2 Các khái niệm cơ bản về đồ thị

1.2.1 Định nghĩa đồ thị

Đồ 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 của V [2]

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

Có thể phân loại đồ thị theo đặc tính và số lượng của tập các cạnh E Cho đồ thị

G = (V, E) Ta có một số khái niệm sau[2]

Đơn đồ thị: G được gọi là đơn đồ thị nếu giữa hai đỉnh u, v của V có nhiều nhất

là một cạnh trong E nối từ u tới v

Trang 18

Đa đồ thị: G được gọi là đa đồ thị nếu giữa hai đỉnh u, v của V có thể có nhiều hơn

1 cạnh trong E nối từ u tới v

Đồ thị vô hướng: G được gọi là đồ thị vô hướng nếu các cạnh trong E là không

định hướng, tức là cạnh nối hai đỉnh u, v bất kỳ cũng là cạnh nối hai đỉnh v, u Hay nói cách khác, tập E gồm các cặp (u, v) không tính thứ tự (u, v) (v, u)

Đồ thị có hướng: G được gọi là đồ thị có hướng nếu các cạnh trong E là có định

hướng, có thể có cạnh nối từ đỉnh u tới đỉnh v nhưng chưa chắc đã có cạnh nối từ đỉnh

v tới đỉnh u Hay nói cách khác, tập E gồm các cặp (u, v) có tính thứ tự: (u, v) ≠ (v, u) Trong đồ thị có hướng, các cạnh được gọi là các cung Đồ thị vô hướng cũng có thể coi là đồ thị có hướng nếu như ta coi cạnh nối hai đỉnh u, v bất kỳ tương

đương với hai cung (u, v) và (v, u)

Hình 1.4 Phân loại đồ thị

Cạnh liên thuộc, đỉnh kề, bậc:Đối với đồ thị vô hướng G = (V, E) Xét một cạnh

eE , nếu e = (u, v) thì ta nói hai đỉnh u và v là kề nhau (adjacent) và cạnh e này liên thuộc (incident) với đỉnh u và đỉnh v

Với một đỉnh v trong đồ thị, ta định nghĩa bậc (degree) của v, ký hiệu deg(v) là

số cạnh liên thuộc với v Dễ thấy rằng trên đơn đồ thị thì số cạnh liên thuộc với v cũng

là số đỉnh kề với v

Đối với đồ thị có hướng G = (V, E) Xét một cung eE , nếu e = (u, v) thì ta nói u

nối tới v và v nối từ u, cung e là đi ra khỏi đỉnh u và đi vào đỉnh v Đỉnh u khi đó được gọi là đỉnh đầu, đỉnh v được gọi là đỉnh cuối của cung e

Với mỗi đỉnh v trong đồ thị có hướng, ta định nghĩa: Bán bậc ra của v ký hiệu

deg + (v) là số cung đi ra khỏi nó; bán bậc vào ký hiệu deg - (v) là số cung đi vào đỉnh

đó

Đường đi: Một đường đi độ dài k từ đỉnh u đến đỉnh v là dãy (u = x 0 , x 1 , ,x k = v) thoả mãn (x i , x i+1) E (là một cạnh của đồ thị) vớ i: (0 ≤ i ≤ k) Đỉnh u gọi là đỉnh xuất phát, v gọi là đỉnh kết thúc của đường đi Đường đi không có cạnh nào đi qua hơn một lần gọi là đường đi đơn

Trang 19

Chu trình: Đường đi có đỉnh xuất phát trùng với đỉnh kết thúc gọi là chu trình Tính liên thông của đồ thị

Tính liên thông trên đồ thị vô hướng

Đồ thị vô hướng G = (V, E) được gọi là liên thông (connected) nếu giữa mọi cặp đỉnh của G luôn tồn tại đường đi Đồ thị chỉ gồm một đỉnh duy nhất cũng được coi là

đồ thị liên thông

Cho đồ thị vô hướng G = (V, E) và U là một tập khác rỗng của tập đỉnh V Ta nói U là một thành phần liên thông (connected component) của G nếu:

+ Đồ thị G hạn chế trên tập U: GU = (U, EU) là đồ thị liên thông

+ Không tồn tại một tập W chứa U mà đồ thị G hạn chế trên W là liên thông (tính tối đại của U)

Một đồ thị liên thông chỉ có một thành phần liên thông là chính nó Một đồ thị không liên thông sẽ có nhiều hơn một thành phần liên thông

Đôi khi, việc xóa đi một đỉnh và tất cả các cạnh liên thuộc với nó sẽ tạo ra một đồ thị con mới có nhiều thành phần liên thông hơn đồ thị ban đầu, các đỉnh như thế gọi là đỉnh khớp

Hoàn toàn tương tự, những cạnh mà khi ta bỏ nó đi sẽ tạo ra một đồ thị có nhiều thành phần liên thông hơn so với đồ thị ban đầu được gọi là cạnh cắt (cut edges) hay

cầu (bridges)

Tính liên thông trên đồ thị có hướng

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ị

Trang 20

Biểu diễn đồ thị trên máy tính

Khi lập trình giải các bài toán được mô hình hóa bằng đồ thị, việc đầu tiên cần làm

là tìm cấu trúc dữ liệu để biểu diễn đồ thị sao cho việc giải quyết bài toán được thuận tiện nhất

Có rất nhiều phương pháp biểu diễn đồ thị, mỗi phương pháp biểu diễn sẽ được chỉ rõ hơn trong từng thuật toán cụ thể

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

Với G = (V, E) là một đơn đồ thị có hướng trong đó Vn, ta có thể đánh số các

đỉnh từ 1 tới n và đồng nhất mỗi đỉnh với số thứ tự của nó Bằng cách đánh số như vậy,

đồ thị G có thể biểu diễn bằng ma trận vuông

Ma trận A xây dựng như vậy được gọi là ma trận kề (adjacency matrix) của đồ thị

G Việc biểu diễn đồ thị vô hướng được quy về việc biểu diễn phiên bản có hướng tương ứng: thay mỗi cạnh (i, j) bởi hai cung ngược hướng nhau: (i, j) và (j, i)

Trong trường hợp G là đơn đồ thị, ta có thể biểu diễn ma trận kề A tương ứng là

các phần tử logic

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

Ma trận kề có nhiều ưu điểm như đơn giản trực quan dễ cài đặt trên máy Muốn

kiểm tra xem hai đỉnh (u, v) của đồ thị có kề nhau hay không, ta chỉ việc kiểm tra bằng một phép so sánh: a uv ≠ 0

Tuy nhiên ma trận kề cũng có những nhược điểm như bất kể số cạnh của đồ thị

là nhiều hay ít, ma trận kề luôn luôn đòi hỏi n2 ô nhớ để lưu các phần tử ma trận, điều

Trang 21

đó gây lãng phí bộ nhớ Một số bài toán yêu cầu thao tác liệt kê tất cả các đỉnh v kề với một đỉnh u cho trước Trên ma trận kề việc này được thực hiện bằng cách xét tất cả các đỉnh v và kiểm tra điều kiện auv ≠ 0 Như vậy, ngay cả khi đỉnh u là đỉnh cô lập (không kề với đỉnh nào) hoặc đỉnh treo (chỉ kề với một đỉnh) ta cũng phải buộc xét tất

cả các đỉnh v và kiểm tra giá trị tương ứng auv

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

Trong trường hợp đồ thị có n đỉnh, m cạnh, ta có thể biểu diễn đồ thị dưới dạng

danh sách cạnh, trong cách biểu diễn này, liệt kê các cạnh của đồ thị trong một danh

sách, mỗi phần tử của danh sách là một cặp (u, v) tương ứng với một cạnh của đồ thị

Danh sách được lưu trong bộ nhớ dưới dạng mảng hoặc danh sách móc nối

Ví dụ với đồ thị dưới đây

Cài đặt trên mảng (1,3) (2,4) (3,5) (4,1) (5,2)

Cài đặt trên danh sách móc nối

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

Biểu diễn đồ thị bằng danh sách cạnh có ưu điểm trong trường hợp đồ thị thưa (có số cạnh tương đối nhỏ), cách biểu diễn bằng danh sách cạnh sẽ tiết kiệm được không gian lưu trữ Trong một số trường hợp, ta phải xét tất cả các cạnh của đồ thị thì cài đặt trên danh sách cạnh làm cho việc duyệt các cạnh dễ dàng hơn

Bên cạnh đó biểu diễn đồ thị bằng danh sách cạnh cũng có những nhược điểm là

khi ta cần duyệt tất cả các đỉnh kề với đỉnh v nào đó của đồ thị, thì chẳng có cách nào khác là phải duyệt tất cả các cạnh, lọc ra những cạnh có chứa đỉnh v và xét đỉnh còn lại Việc kiểm tra hai đỉnh u, v có kề nhau hay không cũng bắt buộc phải duyệt danh

sách cạnh, điều đó khá tốn thời gian trong trường hợp đồ thị dày (nhiều cạnh)

Trang 22

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

Để khắc phục nhược điểm của phương pháp biểu diễn bằng ma trận kề và danh

sách cạnh, người ta đề xuất phương pháp biểu diễn đồ thị bằng danh sách kề

(adjacency list) Trong cách biểu diễn này, với mỗi đỉnh v của đồ thị, ta cho tương ứng

với một danh sách các đỉnh kề với v

Với đồ thị có hướng G = (V, E) V gồm n đỉnh và E gồm m cung Có hai cách

cài đặt danh sách kề phổ biến

+ Forward Star: Với mỗi đỉnh u, lưu trữ một danh sách adj[u] chứa các đỉnh nối từ u: adj[u]={v: (u, v)  E}

+ Reverse Star: Với mỗi đỉnh v, lưu trữ một danh sách adj[v] chứa các đỉnh nối tới v: adj[v]={u: (u, v)  E}

Biểu diễn danh sách kề bằng mảng:

Dùng một mảng adj[1 m] chứa các đỉnh, mảng được chia làm n đoạn, đoạn thứ u trong mảng lưu danh sách các đỉnh kề với đỉnh u

Để biết một đoạn nằm từ chỉ số nào đến chỉ số nào, ta có một mảng head[1 n+1] đánh dấu vị trí phân đoạn: head[u] sẽ bằng chỉ số đứng liền trước đoạn thứ u, quy ước head[n+1]=m

Khi đó các phần tử trong đoạn: adj[head[u]+1…head[u+1]] là các đỉnh kề với đỉnh u

Khi sử dụng danh sách kề để biểu diễn đồ thị vô hướng, ta quy nó về đồ thị có

hướng và số cung m được nhân đôi, ta xây dựng 2 mảng adj và head, hình 1.8

1 2 3 4 5 6 7 8 9 10 11 12 13 14

adj 2 3 1 3 4 5 1 2 5 2 5 2 3 4

1 2 3 4 5 6

head 0 2 6 9 11 14

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

Biểu diễn bằng danh sách kề có một số ưu điểm như khi duyệt tất cả các đỉnh kề

với một đỉnh v cho trước là hết sức dễ dàng Bên cạnh đó việc duyệt tất cả các cạnh

cũng đơn giản vì một cạnh thực ra là nối một đỉnh với một đỉnh khác kề nó

Tuy nhiên biểu diễn bằng danh sách kề cũng có những nhược điểm, danh sách kề

Trang 23

yếu hơn ma trận kề ở việc kiểm tra (u,v) có phải là cạnh hay không, bởi trong cách biểu diễn này ta sẽ phải duyệt toàn bộ danh sách kề của u hay danh sách kề của v

1.2.2 Đồ thị Hamilton

Định nghĩa: Một đường đi trong đồ thị G được gọi là đường đi Hamilton nếu nó

đi qua tất cả các đỉnh của G, mỗi đỉnh đúng một lần[2]

Nếu G có chu trình Hamilton thì G được gọi là đồ thị Hamilton

Hình 1.9 Đồ thị Hamilton

1.3 Bài toán người bán hàng (TSP)

Trong tin học cũng như lý thuyết đồ thị bài toán Người bán hàng (Travelling Salesman Problem-TSP) là một trong những bài toán kinh điển và khó[0][1][2] Bài toán có phát biểu rất đơn giản nhưng rất khó giải trong trường hợp tổng quát với không gian tìm kiếm rộng lớn, khó bởi các thuật toán hiệu quả nhất đã được biết đến có thời gian giải quyết bài toán này tăng dần theo cấp số nhân n, hay độ phức tạp của thuật toán tăng dần theo hàm mũ[2] Có rất nhiều cách tiếp cận bài toán này từ khi mới ra đời, như sử dụng quy hoạch tuyến tính, thuật toán vét cạn, thuật toán người láng giềng gần nhất, kỹ thuật nhánh và cận, nhưng chỉ dừng lại ở các bộ dữ liệu nhỏ Gần đây có nhiều thuật toán ra đời theo hướng tiếp cận về tiến hóa như thuật toán di truyền Genetic Algorithm, hay phương pháp tối ưu hóa đàn kiến (Ant Colony Optimization)

Để giải bài toán Người bán hàng (Travelling Salesman Problem-TSP) bằng các các thuật toán, kỹ thuật, phương pháp nêu trên gặp nhiều khó khăn vì độ phức tạp tính toán cao, 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 lên đến hàng chục ngàn đỉnh sẽ gặp phải về vấn đề 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ớ,…Để xử lý dữ liệu có quy mô lớn, kích thước của bài toán tăng lên và không gian tìm kiếm lớn Điều đó đặt ra là ta phải chia bài toán cho nhiều bộ xử lý đồng thời tham gia tính toán, dẫn đến ta phải xây dựng thuật toán song song trên đa bộ xử lý [0][3][5]

Với sự phát triển của công nghệ đặt ra cho chúng ta nhiều thách thức Bởi thời đại mà chúng ta đang sống ngành công nghệ máy tính phát triển như vũ bão Từ thế kỷ thứ 3 trước công nguyên, thư viện Alexandria được coi là nơi chứa đựng toàn bộ kiến thức của loài người Ngày nay, tổng lượng thông tin trên toàn thế giới đủ để chia đều

Trang 24

cho mỗi đầu người một lượng nhiều gấp 320 lần lượng thông tin mà các sử gia tin rằng thư viện Alexandria từng lưu trữ - ước tính vào khoảng 120 exabyte Nếu tất cả những thông tin này được ghi lại vào đĩa CD và chúng ta xếp chồng các đĩa CD này lên nhau,

sẽ có tới 5 chồng đĩa mà mỗi chồng đều vươn dài chạm tới mặt trăng

Sự bùng nổ dữ liệu này chỉ mới xuất hiện gần đây Cách đây không lâu, vào năm

2000, chỉ mới có một phần tư lượng thông tin lưu trữ trên toàn thế giới ở dạng kỹ thuật

số Ba phần tư còn lại được người ta lưu trên giấy tờ, phim, và các phương tiện analog khác Nhưng do lượng dữ liệu kỹ thuật số bùng nổ quá nhanh – cứ 3 năm lại tăng gấp đôi – cục diện trên nhanh chóng đảo ngược Ngày nay, chỉ dưới 2% tổng lượng thông tin chưa được chuyển sang lưu trữ ở dạng kỹ thuật số Theo tài liệu của Intel vào tháng 09/2013, hiện nay thế giới đang tạo ra 1 petabyte dữ liệu mỗi 11 giây, tương đương với đoạn video HD dài 13 năm Nhà bán lẻ online Amazon.com thì phải xử lí hàng triệu hoạt động mỗi ngày, cũng như yêu cầu từ khoảng nữa triệu đối tác bán hàng Tương

tự, Facebook cũng phải quản lí 50 tỉ bức ảnh từ người dùng tải lên, YouTube hay Google thì phải lưu lại hết các lượt truy vấn và video của người dùng cùng nhiều loại thông tin khác có liên quan

Để 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 [11][12] 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 MapReduce có các ưu điểm nổi bật như: 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; 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 [11][12]

Trong thực tiễn, có nhiều bài toán với yêu 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 bài toán Người bán hàng(Travelling Salesman Problem-TSP) là mục tiêu mà tôi muốn lựa chọn cho đề tài luận văn cao học

Trang 25

1.3.1 Giới thiệu bài toán người bán hàng (TSP)

Bài toán người bán hàng hay còn được gọi là bài toán TSP [4][5]là một bài toán khá nổi tiếng trong lĩnh vực tối ưu tổ hợp được nghiên cứu trong lý thuyết khoa học máy tính có nội dung như sau: Một người bán hàng xuất phát từ thành phố của anh ta, anh ta muốn tìm một đường đi ngắn nhất đi qua tất cả các thành phố của khách hàng mỗi thành phố đúng một lần và sau đó trở về thành phố ban đầu Nó nhanh chóng trở thành bài toán khó thách thức toàn thế giới bởi độ phức tạp thuật toán tăng theo hàm số

mũ (trong chuyên ngành thuật toán người ta còn gọi chúng là những bài toán

NP-khó)

1.3.2 Mô tả bài toán TSP

Bài toán TSP có thể được mô hình như một đồ thị (hình 1.10), các đỉnh của đồ thị tương ứng với các thành phố và các cạnh thì tương ứng với đường nối giữa các thành phố, chiều dài của một cạnh tương ứng với khoảng cách giữa 2 thành phố Một đường đi trong bài toán TSP là một chu trình Hamilton trên đồ thị và một lời giải tối

ưu của bài toán là chu trình Hamilton ngắn nhất

Hình 1.10 Mô tả bài toán TSP

Đồ thị thường là đồ thị đầy đủ, vì vậy mọi cặp cạnh đều được nối bởi các cạnh Đây là bước đơn giản hóa bài toán vì việc tìm chu trình Hamilton trong một đồ thị đầy

đủ là dễ Các bài toán mà không phải hai thành phố nào cũng được nối với nhau có thể được chuyển đổi thành đồ thị đầy đủ bằng cách thêm những cạnh có độ dài lớn giữa các thành phố này, những cạnh này sẽ không xuất hiện trong chu trình tối ưu

1.3.3 Các thuật toán giải bài toán TSP

a)Thuật toán vét cạn

Trong các thuật giải chính xác cho bài toán người bán hàng, đầu tiên phải kể đến thuật toán vét cạn Thuật toán này tìm tất cả các chu trình hamilton trong đồ thị, sau đó chọn một chu trình nhỏ nhất làm đáp án

Trang 26

b)Thuật toán gần đúng Heuristic

Khi bài toán có kích thước n đỉnh nhỏ thì các thuật giải chính xác được áp dụng cho kết quả nhanh chóng và duy nhất Nhưng khi số đỉnh của bài toán tăng lên đáng kể thì độ phức tạp của thuật toán do đó cũng tăng lên Trong trường hợp này, chất lượng của giải pháp không phải là vấn đề quan tâm nhất mà hiệu suất tính toán và sự đơn giản về khái niệm được ưu tiên hơn, khi đó thuật toán heuristic được sử dụng để đưa ra một giải pháp không phải là tối ưu nhất nhưng chấp nhận được do sai số so với giải pháp tối ưu nhất không nhiều Trong luận văn này giới thiệu bốn thuật toán nổi tiếng nhất là: thuật toán láng giềng gần nhất, thuật toán tìm kiếm cục bộ, thuật toán nhánh cận và thuật toán di truyền Trong đó thuật toán cục bộ thường được sử dụng kết hợp với thuật toán đàn kiến ACO để tăng hiệu suất tìm kiếm giải pháp

c)Thuật toán láng giềng gần nhất

Thuật giải vét cạn ở trên cho ta một đáp án tối ưu, tuy nhiên độ phức tạp của nó

là quá cao (O(n!)) Do đó trong thực tế, người ta chấp nhận các thuật giải cho kết quả tốt (nhưng không phải lúc nào cũng tốt) bởi sự đơn giản, nhanh chóng và cài đặt dễ dàng Một trong các thuật giải đó là thuật toán láng giềng gần nhất hay còn được gọi là thuật toán tham lam [9][19][20]

d) Thuật toán tìm kiếm cục bộ

Thuật toán tìm kiếm cục bộ[7] là giải pháp metaheuristic cho việc giải các bài toán tính toán tối ưu khó trong máy tính Thuật toán này có thể được áp dụng cho các bài toán tìm kiếm lời giải gần đúng tối ưu trong một loạt các lời giải ứng viên Phương pháp tìm kiếm sẽ duyệt qua các lời giải trong không gian tìm kiếm cho đến khi lời tìm

ra lời giải được cho là tối ưu hoặc vượt quá thời gian tìm kiếm cho phép Thuật toán tìm kiếm cục bộ sẽ bắt đầu từ một ứng viên lời giải (chưa tối ưu), kiểm tra và cải thiện dần bằng cách chỉ quan tâm tới giải pháp hiện thời rồi xem xét chuyển sang ứng viên lời giải láng giềng của lời giải hiện thời đến khi dừng thuật toán Tuy nhiên mỗi ứng viên lời giải đều có thể có hơn một lời giải láng giềng, nên mỗi cách lựa chọn lời giải láng giềng trong danh sách láng giềng để thành bước duyệt kế tiếp có thể trở thành một thuật toán khác

e) Thuật toán di truyền

Thuật toán di truyền là thuật toán metaheuristic, metaheuristic là một cách gọi chung cho các thuật toán heuristic trong việc giải quyết các bài toán tổ hợp khó Hầu hết các thuật toán metaheuristic đều lấy cảm hứng từ tự nhiên như: thuật toán luyện thép (SA), thuật toán di truyền (GA), thuật toán đàn kiến (ACO),…Thuật toán đàn kiến là metaheuristic dùng chiến lược của kiến trong thế giới thực để giải bài toán tối

ưu SA xuất phát từ phương thức xác suất và kỹ thuật luyện bao gồm việc nung và điều

Trang 27

khiển làm nguội các kim loại để đạt được trạng thái năng lượng nhỏ nhất Trong khi đó thuật toán di truyền dựa trên ý tưởng từ cơ chế di truyền trong sinh học và tiến trình tiến hóa trong cộng đồng các cá thể của một loài

f) Thuật toán nhánh cận

Thuật toán nhánh cận là phương pháp chủ yếu để giải các bài toán tối ưu tổ hợp

Tư tưởng cơ bản của thuật toán là trong quá trình tìm kiếm lời giải, sẽ phân hoạch tập các phương án của bài toán thành hai hay nhiều tập con biểu diễn như một nút của một cây tìm kiếm và cố gắng bằng cách đánh giá cận các nút, tìm cách loại bỏ những nhánh cây (những tập con các phương án của bài toán) mà biết chắc chắn không phải phương án tối ưu Mặc dù trong trường hợp tồi nhất, thuật toán sẽ trở thành duyệt toàn

bộ, nhưng trong những trường hợp cụ thể nó có thể rút ngắn đáng kể thời gian tìm kiếm

1.4 Kết chương

Chương này trình bày tổng quan về dữ liệu lớn, bài toán người bán hàng, lý thuyết đồ thị và các thuật toán để giải bài toán người bán hàng Trong số các phương pháp đã giới thiệu ở chương 1, cách giải bài toán người bán hàng bằng thuật toán nhánh cận được lựa chọn làm thuật toán để triển khai trên mô hình Mapreduce Nội dung chi tiết mô hình tính toán phân tán Hadoop-Mapreduce sẽ được trình bày ở chương 2

Trang 28

CHƯƠNG 2 - XỬ LÝ PHÂN TÁN HADOOP-MAPREDUCE

2.1 Giới thiệu nền tảng Hadoop

2.1.1 Giới thiệu Hadoop

Apache Hadoop hay Hadoop là một software framework hỗ trợ các ứng dụng phân tán dữ liệu chuyên sâu theo một giấy phép miễn phí Nó cho phép các ứng dụng làm việc với hàng ngàn máy tính tính toán độc lập và petabyte dữ liệu Hadoop được bắt nguồn từ các bài báo MapReduce của Google và Google File System (GFS)[11] Hadoop là một trong những dự án hàng đầu của Apache, được xây dựng và được

sử dụng bởi một cộng đồng những người đóng góp toàn cầu, viết bằng ngôn ngữ lập trình Java Yahoo! đã đóng góp lớn nhất cho dự án, và Hadoop được sử dụng rộng rãi trên khắp các doanh nghiệp của nó

2.1.2 Lịch sử Hadoop

Hadoop được tạo ra bởi Dough 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 (gồm crawler và tìm kiếm) nhanh chóng 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 (lúc khả năng của Nutch chỉ có thể crawl tối đa 100 triệu trang) 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 Tetabyte đĩa cứng, và với khối lượng hàng tỷ trang web đang có trên mạng thì cần có tới hàng chục petabye để lưu trữ

Tốc độ truy xuất chậm: với khối lượngdữ 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ý Việc phải truy xuất vào các file có kích thước lớn được tạo ra trong quá trình crawl và index cũng là một thách thức lớn Năm 2003, Google công bố kiến trúc của hệ thống file phân tán GFS (viết tắt từ Google File System) của họ Các nhà kiến trúc sư của Nutch thấy rằng GFS sẽ giải quyết được nhu cầu lưu trữ các file rất lớn từ quá trình crawl và index 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 file phân tán nguồn mở có tên Nutch Distributed File System (NDFS)

Năm 2004, Google lại công bố bài báo giới thiệu MapReduce Vào đầ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,

Trang 29

và 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à MapRecude 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à vào tháng hai 2006 Dough 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, Dough 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à vào tháng 2 năm 2008 Yahoo đã công bố sản phẩm search engine của họ được xây dựng trên một Hadoop cluster có kích thước nhân vi xử lý

Năm 2008, Apache đã đưa Hadoop lên thành dự án ở top-level Apache Software Foundation, nhằm xác nhận sự thành công và các áp dụng rộng rãi của Hadoop Vào thời gian này, Hadoop được sử dụng bởi rất nhiều công ty ngoài Yahoo! như Last.fm, Facebook, New York Times

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

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

Ngày nay, ngoài NDFS (đã được đổi tên lại thành HDFS – Hadoop Distributed File System) và MapReduce, đội ngũ phát triển Hadoop đã phát triển các dự án con dựa trên HDFS và MapReduce Hiện nay, Hadoop gồm có các dự án con sau

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

Trang 30

Core: 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

MapReduce (MapReduce Engine): 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

HDFS: 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 hoá việc sử dụng băng thông giữa các node HDFS có thể được sử dụng để chạy trên 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 (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

Hive: Một data warehouse 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

Chukwa: 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

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ổ của luận văn này, chúng tôi chỉ nghiên cứu hai phần quan trọng nhất của Hadoop, đó là HDFS và MapReduce

2.1.4 Ứng dụng của Hadoop trong một số công ty

Ngày nay có nhiều công ty sử dụng Hadoop như là một công cụ để lưu trữ và phân tích dữ liệu trên các khối dữ liệu lớn như:

Facebook: Sử dụng Hadoop để lưu trữ các log nội bộ và kích thước của nguồn dữ liệu Các dữ liệu này được dùng làm nguồn cho các báo cáo phân tích và máy học Twitter: Sử dụng Hadoop để xử lý tweets (các bài viết văn bản lên đến 140 ký tự hiển thị trên profile của tác giả), logs và các nguồn dữ liệu phát sinh trong quá trình hoạt động của Twitter

A9.com – Amazon: Sử dụng Hadoop để đánh giá chỉ số tìm kiếm sản phẩm trên Amazon, xử lý đến hàng triệu Session mỗi ngày Các cluster của A9.com có độ lớn từ 1-100 node

Và còn rất nhiều công ty hiện đang sử dụng Hadoop vào việc lưu trữ và xử lý dữ liệu, đặc biệt cho các nguồn dữ liệu lớn với kích thước lên tới hàng petabyte

Trang 31

2.1.5 Cụm máy tính Hadoop(Hadoop cluster)

HDFS và MapReduce là hai thành phần chính của một cụm máy tính Hadoop 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 cụm máy tính Hadoop như sau:

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

Trên một cụm máy tính hadoop, 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ư file 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 file, 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

Trang 32

DataNode: Chứa các block dữ liệu thực sự của các file 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

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

2.2.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 file 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 file 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

các tập tin

Trang 33

Hầu hết các file đều được thay đổi bằng cách bổ sung dữ liệu vào cuối file 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 file không

hề tồn tại Một khi đã được tạo ra, các file sẽ trở thành file 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ư file 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 file sẽ trở thành điểm chính để tối ưu hóa hiệu suất

2.2.2 Kiến trúc HDFS

Giống như các hệ thống file khác, HDFS duy trì một cấu trúc cây phân cấp các file, thư mục mà các file sẽ đóng vai trò là các node lá Trong HDFS, mỗi file 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 file (trừ block cuối cùng) sẽ có cùng kích thước gọi là block size của file đó Mỗi block của file 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 file, thư mục của hệ thống file và các Metadata khác của hệ thống file

Cụ thể, các Metadata mà Namenode lưu trữ gồm có:

File System Namespace: là hình ảnh cây thư mục của hệ thống file tại một thời điểm nào đó File System Namespace thể hiện tất cả các file, thư mục trên hệ thống file và quan hệ giữa chúng

Để ánh xạ từ tên file ra thành danh sách và các block: với mỗi file, ta có một danh sách có thứ tự các block của file đó, 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 file của hệ thống file phân tán lên hệ thống file cục bộ của nó Mỗi một block sẽ được lưu trữ như

là một file riêng biệt trên hệ thống file cục bộ của DataNode

Trang 34

Kiến trúc của HDFS được thể hiện qua sơ đồ dưới đây:

Hình 2.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 file 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 file 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 file cần đọc

Từ metadata này nó sẽ biết được danh sách các block của file 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

Quá trình đọc file trên HDFS

Hình 2.4 Quá trình các nodes đọc một file trên HDFS

Trang 35

Đầu tiên, client sẽ mở file cần đọc bằng cách gửi yêu cầu đọc file đến NameNode (1) Sau đó NameNode sẽ thực hiện một số kiểm tra xem file được yêu cầu đọc có tồn tại không hoặc file cần đọc có đang ở trạng thái ổn định hay không Nếu mọi thứ đều

ổn, NameNode sẽ gửi danh sách các block (đại diện bởi Block ID) của file cùng với địa chỉ các DataNode chứa các bản sao của block này

Tiếp theo, client sẽ mở các kết nối tới Datanode, thực hiện một RPC để yêu cầu nhận block cần đọc và đóng kết nối với DataNode (3)

Với mỗi block ta có thể có nhiều DataNode lưu trữ các bản sao của block đó Client sẽ chỉ đọc bản sao của block từ DataNode “gần” nhất

Client sẽ thực hiện việc đọc các block lặp đi lặp lại cho đến khi block cuối cùng của file được đọc xong Quá trình client đọc dữ liệu từ HDFS sẽ trong suốt với người dùng hoặc chương trình ứng dụng client, người dùng sẽ dùng một tập API của Hadoop

để tương tác với HDFS, các API này che giấu đi quá trình liên lạc với NameNode và kết nối các DataNode để nhận dữ liệu

Ghi file trên HDFS

Hình 2.5 Quá trình các nodes ghi một file trên HDFS

Đầu tiên, client sẽ gửi yêu cầu đến NameNode tạo một file nhận lên File System Namespace (1) File mới được tạo sẽ rỗng, tức chưa có một block nào

Sau đó, NameNode sẽ quyết định danh sách các DataNode sẽ chứa các bản sao của file cần gì và gửi lại cho client (2)

Tiếp theo, client sẽ chia file cần gì ra thành các block với mỗi block client sẽ đóng gói thành một gói Mỗi block sẽ được lưu ra thành nhiều bản sao trên các DataNode khác nhau (tuỳ vào chỉ số độ nhân bản của file)

Trang 36

Tiếp nữa, client gửi gói cho DataNode thứ nhất, DataNode thứ nhất sau khi nhận được gói sẽ tiến hành lưu lại bản sao thứ nhất của block Tiếp theo DataNode thứ nhất

sẽ gửi gói này cho DataNode thứ hai để lưu ra bản sao thứ hai của block Tương tự DataNode thứ hai sẽ gửi gói cho DataNode thứ ba Cứ như vậy, các DataNode cũng lưu các bản sao của một block sẽ hình thành một ống dẫn dữ liệu

Sau khi DataNode cuối cùng nhận được gói dữ liệu, nó sẽ gửi lại cho DataNode thứ hai một gói xác nhận rằng đã lưu hai DataNode về DataNode thứ nhất

Client sẽ nhận được các báo cáo xác nhận từ DataNode thứ nhất cho tình trạng thành công của tất cả DataNode trên đống dữ liệu

Nếu có bất kỳ một DataNode nào bị lỗi trong quá trình ghi dữ liệu, client sẽ tiến hành xác nhận lại các DataNode đã lưu thành công bản sao của block và thực hiện một hành vi ghi lại block lên trên DataNode bị lỗi

Sau khi tất cả các block của file đều đã được ghi lên các DataNode, client sẽ thực hiện một thông điệp báo cho NameNode nhằm cập nhật lại danh sách các block của file vừa tạo Thông tin Mapping từ Block ID sang danh sách các DataNode lưu trữ sẽ được NameNode tự động cập nhật bằng các định kỳ các DataNode sẽ gửi báo cáo cho NameNode danh sách các block mà nó quản lý.Phương pháp lưu trữ độc đáo của Hadoop dựa trên một hệ thống tập tin phân phối theo các “bản đồ” dữ liệu Công cụ xử

lý dữ liệu thường nằm trên cùng một máy chủ với dữ liệu nên kết quả xử lý dữ liệu nhanh hơn nhiều Nếu chúng ta đang làm việc với khối dữ liệu lớn phi cấu trúc, Hadoop có thể xử lý hiệu quả mỗi tetabyte dữ liệu chỉ trong vài phút và mỗi petabyte trong vài giờ

Một điểm tuyệt vời của Hadoop nữa là khả năng chịu lỗi của nó Khi dữ liệu được gửi đến một node nào đó thì dữ liệu cũng được nhân rộng đến các node khác trong cluster Vì vậy, trong trường hợp thất bại thì luôn có một bản sao có sẵn để sử dụng

Kiến trúc của Hadoop cung cấp cơ chế bảo vệ dữ liệu ở cả duy nhất một node và nhiều node Khi nói đến xử lý dữ liệu một cách an toàn và chi phí hiệu quả Hadoop có lợi thế hơn các hệ thống quản lý cơ sở dữ liệu quan hệ và giá trị của nó cho một doanh nghiệp sẽ tiếp tục tăng khi dữ liệu phi cấu trúc ngày càng nhiều thêm

2.3 Mô hình tính toán MapReduce

2.3.1 Giới thiệu mô hình tính toán MapReduce

Trước thời điểm Google công bố mô hình MapReduce, với sự bùng nổ của dữ liệu (hàng petrabyte), cùng lúc đó nhu cầu thực hiện xử lý các nghiệp vụ trên lượng dữ liệu khổng lồ là thách thức lớn lúc bấy giờ Cùng với nhu cầu ấy, các doanh nghiệp đang gặp vấn đề tương tự khi muốn tìm một giải pháp tốn ít chi phí và hiệu năng thể

Trang 37

hiện cao Trong khi nghiên cứu, một nhóm nhân viên của Google đã khám phá ra một

ý tưởng để giải quyết nhu cầu xử lý lượng dữ liệu lớn là việc cần phải có hệ thống nhiều các máy tính và cần có các thao tác để xử lý đồng bộ trên hệ thống đó Và họ đã xác định được 2 thao tác cơ bản là Map và Reduce, nó được lấy cảm hứng từ phong cách lập trình hàm (Functional Programming) Với ý tưởng trên, Google đã phát triển thành công mô hình MapReduce, là mô hình dùng cho xử lý tính toán song song và phân tán trên hệ thống phân tán Nói một cách đơn giản hơn, mô hình này sẽ phân rã từ nghiệp vụ chính (do người dùng muốn thể hiện) thành các công việc con để chia từng công việc con này về các máy tính trong hệ thống thực hiện xử lý một cách song song, sau đó thu thập lại các kết quả Với mô hình này, các doanh nghiệp đã cải thiện được đáng kể về hiệu suất xử lý tính toán trên dữ liệu lớn, chi phí đầu tư rẻ và độ an toàn cao[11][12]

2.3.2 Tổng quan về mô hình tính toá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

2.3.3 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ị

Trang 38

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

Trang 39

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

(5): Định kỳ, các cặp dữ liệu trung gian sẽ được đẩy đến các worker tương ứng (do master điều khiển) để hàm reduce xử lý Các thuật toán sắp xếp, so sánh, phân vùng dữ liệu sẽ được sử dụng tại giai đoạn này Các tập dữ liệu trung gian có cùng key

sẽ được sắp xếp cùng một nhóm

(6): Khi tất cả các tác vụ Map và Reduce đã hoàn tất thì sẽ cho ra kết quả cuối cùng của quy trình MapReduce

Với MapReduce, rất nhiều máy tính trung gian có thể sử dụng để xử lý dữ liệu

mà trước kia không thể

Như vậy toàn bộ quá trình MapReduce có thể hiểu như sau:

- Đọc dữ liệu đầu vào

- Thực hiện xử lý các phần dữ liệu vào (xử lý từng phần một)

Đưa ra kết quả cuối cùng

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

Trang 40

Input Output

Lấy ý tưởng từ lập trình hàm, mô hình MapReduce dựa trên hai hàm Map và Reduce Để xử lý khối dữ liệu bao gồm nhiều cặp (key, value), lập trình viên viết hai hàm Map và Reduce Hàm Map có đầu vào là một cặp (k1,v1) và đầu ra là một danh sách các cặp (k2, v2), như vậy hàm Map có thể viết một cách hình thức như sau:

Hình 2.8 Mô hình làm việc của hàm Map

Mô hình MapReduce áp dụng hàm Map (do người dùng viết) vào từng cặp (key, value) trong khối dữ liệu vào, chạy rất nhiều phiên bản của hàm Map song song với nhau trên các node của cluster Sau khi giai đoạn này kết thúc, kết quả thu được là một tập hợp rất nhiều cặp (key, value) gọi là các cặp (key, value) trung gian Các cặp này lại được nhóm một lần nữa theo khóa, như vậy các cặp (key, value) trung gian có cùng khóa sẽ nằm cùng một nhóm trung gian

Sau đó, hàm Reduce (cũng do người dùng viết) sẽ được áp dụng vào từng nhóm trung gian để tạo thành kết quả cuối cùng tùy theo yêu cầu đặt ra Một cách hình thức, hàm Reduce có thể được mô tả như sau:

Hình 2.9 Mô hình làm việc của hàm Reduce

Trong đó k2 là khóa chung của nhóm trung gian, list(v2) là tập các giá trị trong nhóm và list(v3) là một danh sách các giá trị trả về của hàm Reduce thuộc kiểu dữ liệu v3 Do hàm Reduce được áp dụng vào nhiều nhóm trung gian độc lập, chúng lại một

lần nữa có thể được chạy song song với nhau

2.3.5 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

Map(k1,v1)

List(k2,v2) (khóa, giá trị)

Danh sách cặp (khóa, giá trị)

Hàm Reduce

Reduce(k2,list(v2))list(v3)

Ngày đăng: 28/03/2021, 22:56

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w