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

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

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 (3.5 MB, 87 trang )




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





XỬ LÝ DỮ LIỆU PHÂN TÁN VỚI
MAPREDUCE VÀ XÂY DỰNG
ỨNG DỤNG MINH HỌA





Sinh viên: NGUYỄN VĂN DIỆT
Lớp : 49TH
MSSV : 4913071011
GVHD : HUỲNH TUẤN ANH



Nha Trang, tháng 6 năm 2011
LUẬN VĂN TỐT NGHIỆP

1



TÓM TẮT
Sự phát triển nhanh chóng của công nghệ thông tin đã tạo ra một lƣợng dữ liệu lớn
và đặt ra những thách thức trong việc xử lý chúng. Đánh giá dựa trên một lƣợng lớn
dữ liệu đã tạo ra cái nhìn sâu sắc hơn và mở ra những cơ hội hấp dẫn mới trong
thƣơng mại điện tử, khoa học và các ứng dụng tính toán. Xử lý lƣợng dữ liệu lớn cho
các công việc trên cần phải có những cụm máy tính lớn. Chính vì thế, mô hình xử lý
phân tán đang trở nên quan trọng trong sự phát triển của công nghệ thông tin hiện nay.
MapReduce là một mô hình lập trình để biểu diễn các tính toán phân tán trên tập
dữ liệu lớn và là bộ khung thực thi (execution framework) để xử lý dữ liệu lớn trên
các cụm máy chủ bình thƣờng (clusters of commodity servers). Mô hình lập trình
MapReduce cung cấp một mức trừu tƣợng dễ hiểu cho việc thiết kế các thuật toán có
thể mở rộng, trong khi bộ khung thực thi xử lý trong suốt các chi tiết ở mức hệ thống,
từ việc lập lịch đến việc xử lý lỗi.
MapReduce đƣợc Google phát triển đầu tiên và đƣợc sử dụng rộng rãi thông qua
cài đặt mã nguồn mở Hadoop – đƣợc phát triển bởi Yahoo (nay là một dự án Apache).
Hiện nay Mapreduce đƣợc nhiều công ty ứng dụng nhƣ: Google, Yahoo, Amazone,…
cũng nhƣ đƣợc các nhóm nghiên cứu quan tâm phát triển.
Một vài ví dụ về dữ liệu lớn: Google xử lý 20 PB một ngày (2008), Facebook có
2.5 PB dữ liệu ngƣời dùng và tăng thêm 15 TB/ngày (4/2009) , eBay có 6.5 PB dữ
liệu ngƣời dùng và tăng thêm 50 TB/ngày (5/2009).
Trong nghiên cứu khoa học, các tập dữ liệu hàng Petabyte cũng đang trở nên bình
thƣờng. Ví dụ: Viện Large Hadron Collider (LHC) gần Geneva mô phỏng vụ nổ Big
Bang, khi hoạt động sẽ tạo ra 15 PB/ năm. Các nhà thiên văn học Chile đang tạo chiếc
camera 3.2 Gigapixel, khi hoạt động sẽ tạo ra khoảng nửa Petabyte dữ liệu ảnh trong
một tháng.
Xử lý dữ liệu lớn nằm ngoài khả năng của của một máy và đòi hỏi phải có các cụm
máy tính – có nghĩa các bài toán dữ liệu lớn chính là việc tổ chức tính toán trên hàng
chục, trăm hay cả nghìn máy tính. Đó chính là những gì MapReduce làm.
Khóa luận này sẽ giới thiệu tổng quát về tính toán đám mây, cơ bản về

MapReduce và thiết kế thuật toán trong MapReduce, một cài đặt mã nguồn mở của
MapReduce là Hadoop. Đồng thời khóa luận cũng giới thiệu về phần mềm mã nguồn
mở Lucene, Solr và Nutch và minh họa hoạt động của MapReduce thông qua ứng
dụng tìm kiếm truyện tranh.


2

LỜI CẢM ƠN

Trƣớc hết tôi xin bày tỏ lòng cảm ơn đến quý thầy cô thuộc khoa Công nghệ thông
tin trƣờng Đại học Nha Trang đã tận tình dạy dỗ và truyền đạt cho tôi nhiều kiến thức
quý báu trong suốt bốn năm qua.
Đặc biệt, tôi xin tỏ lòng biết ơn xâu sắc đến thầy Huỳnh Tuấn Anh, ngƣời đã trực
tiếp gợi ý, hƣớng dẫn và tận tình truyền đạt nhiều kinh nghiệm để tôi có thể thực hiện
và hoàn thành đề tài này.
Tôi cũng xin gửi tất cả lòng biết ơn sâu sắc đến cha mẹ, cùng toàn thể gia đình,
những ngƣời nuôi dạy tôi trƣởng thành nhƣ ngày hôm nay, đồng thời cũng giúp đỡ,
chăm sóc tôi trong suốt quá trình thực hiện đề tài.
Cuối cùng, tôi xin cảm ơn những ngƣời bạn đã luôn động viên và cổ vũ để tôi có
thể hoàn thành tốt đề tài này.

Nha Trang, tháng 6 năm 2011
Sinh viên thực hiện
Nguyễn Văn Diệt



3


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
































4

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

































5

MỤC LỤC
Nội dung:
1 Giới thiệu 11
1.1 Cloud Computing 11
Định nghĩa 11 1.1.1
Các đặc trƣng của tính toán đám mây 12 1.1.2
Các mô hình dịch vụ của tính toán đám mây 13 1.1.3
Các lợi ích của tính toán đám mây 17 1.1.4
Ảnh hƣởng của sự phát triển các dịch vụ đám mây đến MapReduce17 1.1.5
1.2 Các ý tƣởng của MapReduce 18
1.3 Sự quan trọng của MapReduce 19
2 Cơ bản về MapReduce 20
2.1 Nguồn gốc từ Functional Programming 21
2.2 Cấu trúc dữ liệu trong MapReduce 22
2.3 Mapper và Reducer – hai thành phần cơ bản trong MapReduce 22
2.4 Partitioner và Combiner 24
2.5 The execution framework (Bộ khung thực thi) 25
2.6 Distributed File System (Hệ thống file phân tán) 26
3 Thiết kế thuật toán cho MapReduce 31
3.1 Local Aggregation 32
Combiner và In-Mapper combining 33 3.1.1

Sự chính xác của thuật toán trong Local Aggregation 35 3.1.2
3.2 Secondary Sorting 38
3.3 Thuật toán MapReduce trong xử lý dữ liệu quan hệ 39
Phép chiếu: 39 3.3.1
Phép chọn: 39 3.3.2
Phép gộp (Group by ) 40 3.3.3
Phép kết nối quan hệ (Relational Join) 40 3.3.4
4 Apache Hadoop 42

6

4.1 Giới thiệu 42
4.2 MapReduce Job 42
JobTracker 42 4.2.1
TaskTracker 42 4.2.2
4.3 Các hàm API cơ bản của Hadoop 45
4.4 Các kiểu dữ liệu và định dạng trong Hadoop 45
Các kiểu dữ liệu 45 4.4.1
Các định dạng đầu vào (input formats) 45 4.4.2
Các định dạng đầu ra (output formats) 48
4.4.3
4.5 Ứng dụng đếm từ (Wordcount) viết trong Hadoop 49
4.6 Các chƣơng trình xây dựng trên nền Hadoop 51
4.7 Hadoop và CSDL quan hệ 52
5 Mã nguồn mở Lucene, Solr và Nutch 53
5.1 Mã nguồn mở Lucene 53
5.2 Mã nguồn mở Solr 55
5.3 Mã nguồn mở Nutch 55
5.4 MapReduce trong Nutch: 57
Cấu trúc dữ liệu chính trong Nutch 57 5.4.1

Các thuật toán MapReduce trong Nutch 58 5.4.2
6 Giới thiệu ứng dụng tìm kiếm truyện tranh 62
6.1 Tóm tắt: 62
6.2 Cơ sở lý thuyết 63
Phân tích dữ liệu text và lấy thông tin (Information Retrieval) 63 6.2.1
Các cách tiếp cận Text mining 70 6.2.2
6.3 Sơ đồ hoạt động 71
Giai đoạn thu thập dữ liệu 72 6.3.1
Giai đoạn tạo tài liệu và đánh chỉ mục 74 6.3.2
Giai đoạn tìm kiếm 75 6.3.3
6.4 Các plugin đƣợc viết thêm cho ứng dụng tìm kiếm truyện tranh 76
Plugin parse-htmlformangasearch 76 6.4.1

7

Plugin index-mangasearch 76
6.4.2
6.5 Trang web tìm kiếm 77
AJAX Solr 77 6.5.1
Các tính năng chính 77 6.5.2
7 Tổng kết 79
7.1 Kết quả đạt đƣợc 79
7.2 Những hạn chế 79
7.3 Hƣớng phát triển 79
8 Phụ lục 80
8.1 Hƣớng dẫn cài đặt và sử dụng Hadoop trên Windows 80
8.2 Hƣớng dẫn cài đặt và sử dụng Nutch 84




8

DANH MỤC HÌNH VẼ
Hình 1. Mô hình trực quan để định nghĩa Cloud Computing của NIST 12
Hình 2. Các loại dịch vụ Cloud Computing 14
Hình 3. Mô hình chia để trị 20
Hình 4. Hàm Map và Fold trong Functional Programming 21
Hình 5. Hai pha Map và Reduce của một MapReduce job 23
Hình 6. Mô hình MapReduce đầy đủ các thành phần 25
Hình 7. Kiến trúc của HDFS 27
Hình 8. Vai trò của NameNode và DataNode trong HDFS 29
Hình 9. Kiến trúc HDFS đầy đủ 30
Hình 10. Bảo toàn trạng thái trong Hadoop 32
Hình 11. Tiến trình hoạt động của chƣơng trình WordCount 33
Hình 12. Phép chiếu 39
Hình 13. Phép chọn 39
Hình 14. Phép kết nối quan hệ 40
Hình 15. Sự liên hệ giữa JobTracker và TaskTracker 43
Hình 16. Sơ đồ đầy đủ của một Hadoop Cluster 43
Hình 17. Sơ đồ thực thi chi tiết một ứng dụng MapReduce trong Hadoop 44
Hình 18. Hệ thống phân cấp các lớp của InputFormat 47
Hình 19. Hệ thống phân cấp các lớp của OutputFormat 48
Hình 20. Cấu trúc của Hbase 51
Hình 21. Hive và Pig 52
Hình 22. Các thành phần Lucene hỗ trợ cho hệ thống tìm kiếm 53
Hình 23. Sơ đồ hoạt động của Nutch khi sử dụng nhƣ một Crawler 56
Hình 24. Sơ đồ đầy đủ của Nutch khi sử dụng nhƣ một Search Engine 57
Hình 25. Revelant and retrieved 64
Hình 26. Sơ đồ hoạt động tổng quát của ứng dụng tìm kiếm truyện tranh 71
Hình 27. Sơ đồ hoạt động chi tiết của giai đoạn thu thập dữ liệu 72

Hình 28. Sơ đồ hoạt động chi tiết của giai đoạn tạo chỉ mục 74
Hình 29. Sơ đồ hoạt động của giai đoạn tìm kiếm 75
Hình 30. Giao diện trang web khi tìm kiếm 77
Hình 31. Kết quả tìm kiếm khi sử dụng chức năng lọc 78

9

Hình 32. Kết quả khi tìm kiếm theo tác giả 78
Hình 33. Giao diện của Cygwin 81
Hình 34. Giao diện web của NameNode 82
Hình 35. Giao diện web của JobTracker 83
Hình 36. Giao diện của CDH 84



10

DANH MỤC TỪ VIẾT TẮT
AJAX Asynchronous Javascript And XML
Amazon EC2 Amazon‟s Elastic Compute Cloud
API Application Programming Interface
BSP Bulk Synchronous Parallel
CDH Cloudera‟s Distribution including Apache Hadoop
CRM Customer Relationship Management
ERP Enterprise Resource Planning
GFS Google File System
HDFS Hadoop Distributed File System
HPC High-Perfomance Computing
IaaS Infrastructure as a Service
IR Information Retrieval

IT Information Technology
JSON JavaScript Object Notation
NAS Network-Attach Storage
NIST National Institude of Standards and Technology
PaaS Platform as a Service
PDA Personal Digital Assistant
PRAM Parallel Random Access Machine
RDBMS Relational Database Management System
RESP Representational State Transfer
SaaS Software as a Service
SAN Storage Area Network
SCM Supply Chain Management
SNN Secondary NameNode
SPOF Single Point Of Failure



11

Chƣơng 1: GIỚI THIỆU
1 Giới thiệu
Chƣơng này sẽ giới thiệu về Cloud Computing, các đặc trƣng và mô hình dịch vụ
của nó để có cái nhìn tổng quát hơn về các mô hình tính toán lớn hiện nay. Đồng thời
cũng giới thiệu các ý tƣởng chính và tầm quan trọng của MapReduce trong việc xử lý
các bài toán dữ liệu lớn.
1.1 Cloud Computing
Định nghĩa 1.1.1
Hiện nay, các định nghĩa về Cloud Computing (tính toán đám mây) vẫn chƣa
thống nhất. Viện NIST
1

đã đƣa ra một định nghĩa dài với rất nhiều những đặc trƣng
của Cloud Computing. Một số tổ chức khác cũng xây dựng các định nghĩa riêng của
mình nhƣ sau:
Theo Wikipedia:
“Mô hình tính toán trên mạng Internet, nơi mà các tài nguyên chia sẻ,
phần mềm và thông tin đƣợc cung cấp đến máy tính và nhiều thiết bị
khác theo nhu cầu, nhƣ một tiện ích công cộng”.
Theo Gartner
2
:
“Một hình thức tính toán trong đó các năng lực công nghệ thông tin với
sự co giãn lớn đƣợc cung cấp „theo kiểu dịch vụ‟ đến với ngƣời dùng
bên ngoài qua các kỹ thuật Internet”.
Theo Forrester
3
:
“Một năng lực IT chuẩn (các dịch vụ, phần mềm, hay hạ tầng) triển
khai qua mạng Internet theo hình thức trả phí trên ngƣời dùng và trên
dịch vụ”.
Các định nghĩa trên đều định nghĩa Cloud Computing là một hệ phân bố, cung cấp
các dạng tài nguyên ảo dƣới dạng dịch vụ một cách linh động theo nhu cầu của ngƣời
dùng trên môi trƣờng internet. Hoặc có thể hiểu Tính toán đám mây thông qua các từ
khóa đại diện cho những đặc trƣng chính: cung cấp qua internet - delivered over
internet (web 2.0), tài nguyên theo nhu cầu - resource on demand (scalable, elastic,


1
National Institude of Standards and Technology
2
Gartner, Inc. (NYSE: IT) là công ty tƣ vấn và nghiên cứu hàng đầu thế giới trong lĩnh vực CNTT.

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

12

usage-based costing), ảo hóa - virtualized, mọi thứ đều là dịch vụ - everything as a
service, không phụ thuộc vị trí - location independent.
Theo NIST, mô hình tính toán đám mây bao gồm 5 đặc trƣng chính, ba mô hình
dịch vụ và bốn mô hình triển khai.

Hình 1. Mô hình trực quan để định nghĩa Cloud Computing của NIST
Các đặc trưng của tính toán đám mây 1.1.2
1.1.2.1 Tự phục vụ theo nhu cầu (On-demand self-service)
Mỗi khi có nhu cầu, ngƣời dùng chỉ cần gửi yêu cầu thông qua trang web cung cấp
dịch vụ, hệ thống của nhà cung cấp sẽ đáp ứng yêu cầu của ngƣời dùng. Ngƣời dùng
có thể tự phục vụ yêu cầu của mình nhƣ tăng thời gian sử dụng server, tăng dung
lƣợng lƣu trữ… mà không cần phải tƣơng tác trực tiếp với nhà cung cấp dịch vụ, mọi
nhu cầu về dịch vụ đều đƣợc xử lý trên môi trƣờng web (internet).
1.1.2.2 Truy xuất diện rộng (Broad network access)
Cloud Computing cung cấp các dịch vụ thông qua môi trƣờng internet. Do đó,
ngƣời dùng có kết nối internet là có thể sử dụng dịch vụ. Hơn nữa, Cloud Computing
ở dạng dịch vụ nên không đòi hỏi khả năng xử lý cao ở phía client, vì vậy ngƣời dùng
có thể truy xuất bằng các thiết bị di dộng nhƣ điện thoại, PDA, laptop… Với Cloud
Computing ngƣời dùng không còn bị phụ thuộc vị trí nữa, họ có thể truy xuất dịch vụ
từ bất kỳ nơi nào, vào bất kỳ lúc nào có kết nối internet.
1.1.2.3 Dùng chung tài nguyên (Resource pooling)
Tài nguyên của nhà cung cấp dịch vụ đƣợc dùng chung, phục vụ cho nhiều ngƣời
dùng dựa trên mô hình “multi-tenant”. Trong mô hình “multi-tenant”, tài nguyên sẽ


13

đƣợc phân phát động tùy theo nhu cầu của ngƣời dùng. Khi nhu cầu của một khách
hàng giảm xuống, thì phần tài nguyên dƣ thừa sẽ đƣợc tận dụng để phục vụ cho một
khách hàng khác. Ví dụ nhƣ khách hàng A thuê 10 CPU mỗi ngày từ 7 giờ đến 11 giờ,
một khách hàng B thuê 10 CPU tƣơng tự mỗi ngày từ 13 giờ đến 17 giờ thì hai khách
hàng này có thể dùng chung 10 CPU đó.
Cloud Computing dựa trên công nghệ ảo hóa, nên các tài nguyên da phần là tài
nguyên ảo. Các tài nguyên ảo này sẽ đƣợc cấp phát động theo sự thay đổi nhu cầu của
từng khách hàng khác nhau. Nhờ đó nhà cung cấp dịch vụ có thể phục vụ nhiều khách
hàng hơn so với cách cấp phát tài nguyên tĩnh truyền thống.
1.1.2.4 Khả năng co giãn nhanh chóng (Rapid elasticity)
Đây là tích chất đặc biệt, nổi bật và quan trọng nhất của Cloud Computing. Đó là
khả năng tự động mở rộng hoặc thu nhỏ hệ thống tùy theo nhu cầu của ngƣời dùng.
Khi nhu cầu tăng cao, hệ thống sẽ tự mở rộng bằng cách thêm tài nguyên vào. Khi nhu
cầu giảm xuống, hệ thống sẽ tự giảm bớt tài nguyên.
Ví dụ: khách hàng thuê một Server gồm 10 CPU. Thông thƣờng do có ít truy cập
nên chỉ cần 5 CPU là đủ, khi đó hệ thống quản lý của nhà cung cấp dịch vụ sẽ tự ngắt
bớt 5 CPU dƣ thừa, khách hàng không phải trả phí cho những CPU dƣ thừa này
(những CPU này sẽ đƣợc cấp phát cho các khách hàng khác có nhu cầu). Khi lƣợng
truy cập tăng cao, nhu cầu tăng lên thì hệ thống quản lý của nhà cung cấp dịch vụ sẽ
tự “gắn” thêm CPU vào, nếu nhu cầu tăng vƣợt quá 10 CPU thì khách hàng phải trả
phí cho phần vƣợt mức theo thỏa thuận với nhà cung cấp.
Khả năng co giãn giúp cho nhà cung cấp sử dụng tài nguyên hiệu quả, tận dụng
triệt để tài nguyên dƣ thừa, phục vụ đƣợc nhiều khách hàng. Đối với ngƣời sử dụng
dịch vụ, khả năng co giãn giúp họ giảm chi phí do họ chỉ trả phí cho những tài nguyên
thực sự dùng.
1.1.2.5 Điều tiết dịch vụ (Measured service)
Hệ thống Cloud Computing tự động kiểm soát và tối ƣu hóa việc sử dụng tài
nguyên (dung lƣợng lƣu trữ, đơn vị xử lý, băng thông…). Lƣợng tài nguyên sử dụng

có thể đƣợc theo dõi, kiểm soát và báo cáo một cách minh bạch cho cả hai phía nhà
cung cấp dịch vụ và ngƣời sử dụng.
Các mô hình dịch vụ của tính toán đám mây 1.1.3
Hiện tại có rất nhiều nhà cung cấp dịch vụ Cloud Computing cung cấp nhiều loại
dịch vụ khác nhau. Tuy nhiên có ba loại dịch vụ Cloud Computing cơ bản là: dịch vụ
cơ sở hạ tầng (Infrastructure as a Service – IaaS), dịch vụ nền tảng (Platform as a
Service – PaaS) và dịch vụ phần mềm (Software as a Service – SaaS). Cách phân loại
này thƣờng đƣợc gọi là “mô hình SPI”.

14


Hình 2. Các loại dịch vụ Cloud Computing
1.1.3.1 Dịch vụ hạ tầng (Infrastructure-as-a-Service IaaS)
Định nghĩa
Là các năng lực nhằm đƣa đến cho ngƣời dùng khả năng xử lý, lƣu trữ, mạng và
các nguồn tài nguyên tính toán thiết yếu, nơi mà ngƣời dùng có thể triển khai và thực
thi một phần mềm bất kỳ, bao gồm các ứng dụng và cả hệ điều hành. Ngƣời dùng
không phải quản lý hay kiểm soát các hạ tầng đám mây bên dƣới nhƣng phải kiểm
soát các hệ điều hành, sự lƣu trữ, và các ứng dụng đã triển khai và có khả năng là một
vài điều khiển có hạn chế trên một số thành phần của hạ tầng mạng. (ví dụ nhƣ các
tƣờng lửa trên máy chủ).
Đặc trưng
Cung cấp tài nguyên nhƣ là dịch vụ: bao gồm cả máy chủ, thiết bị mạng, bộ
nhớ, CPU, không gian đĩa cứng, trang thiết bị trung tâm dữ liệu.
Khả năng mở rộng linh hoạt
Chi phí thay đổi tùy theo thực tế
Nhiều ngƣời thuê có thể cùng dùng chung trên một tài nguyên
Cấp độ doanh nghiệp: đem lại lợi ích cho công ty bởi một nguồn tài nguyên
tích toán tổng hợp

Các sản phẩm IaaS tiêu biểu
Amazon EC2
Vào thời điểm hiện tại, dịch vụ IaaS chiếm thị phần lớn nhất là Amazon‟s Elastic
Compute Cloud (Amazon EC2). Đƣợc triển khai từ tháng Tám năm 2006 và phát triển
kể từ đấy với việc thêm vào các dịch vụ khác nhau và sự hỗ trợ cho nhiều hệ điều
hành. Nó cung cấp giao diện Web cho phép truy cập các máy ảo.
Khái niệm co dãn (Elastic) trong tên của sản phẩm là sự khác biệt, nó ám chỉ khả
năng EC2 có thể tăng hay giảm tài nguyên hạ tầng tƣơng ứng với nhu cầu, và chi trả

15

cho tài nguyên đó theo giờ. (Tuy nhiên cần phải có yêu cầu từ trƣớc, không phải thay
đổi động).
Rackspace
GoGrid
MediaTemple
Gridlayer
Flexiscale
Joyent Accelerator
1.1.3.2 Dịch vụ nền tảng (Platform-as-a-Service PaaS )
Định nghĩa
Là các năng lực nhằm đem đến cho ngƣời dùng khả năng triển khai lên hạ tầng
đám mây các ứng dụng do ngƣời dùng tạo nên hoặc khả năng phát triển các ứng dụng
sử dụng các ngôn ngữ lập trình và các công cụ đƣợc hỗ trợ bởi nhà cung cấp dịch vụ.
Khách hàng không cần quản lý hay kiểm soát hạ tầng đám mây bên dƣới nhƣng cần
phải kiểm soát các ứng dụng đã triển khai và đôi khi là cả những ứng dụng nhằm cấu
hình môi trƣờng host ứng dụng đó.
Đặt trưng
Phục vụ cho việc phát triển, kiểm thử, triển khai và vận hành ứng dụng giống
nhƣ là môi trƣờng phát triển.

Các công cụ khởi tạo với giao diện trên nền web.
Kiến trúc đồng nhất.
Tích hợp dịch vụ web và cơ sở dữ liệu.
Hỗ trợ cộng tác nhóm phát triển công cụ hỗ trợ tiện tích.
Các sản phẩm tiêu biểu
Các sản phẩm dịch vụ nền tảng có thể chia làm ba nhóm:
Nhóm nền tảng hỗ trợ vòng đời phát triển tích hợp (Integrated lifecycle
platforms)
Các nền tảng này cung cấp cho các nhà phát triển một môi trƣờng đầy đủ cho toàn
bộ vòng đời phát triển ứng dụng: máy hỗ trợ luồng làm việc, các công cụ phát triển,
môi trƣờng kiểm tra, công cụ triển khai v.v… Tiêu biểu nhƣ:
o Google App Engine
o Microsoft Windows Azure www.microsoft.com/windowsazure
Nhóm nền tảng hỗ trợ vòng đời phát triển đặc thù (Anchored lifecycle
platforms)

16

Có các đặc tính giống nhóm đầu tiên, tuy nhiên các môi trƣờng này thƣờng có một
gói phần mềm thƣơng mại đặc thù ở trung tâm. Tiêu biểu nhƣ:
o Salesforce.com‟s Force.com
Nhóm công nghệ hỗ trợ trên phát triển nền tảng (Enabling Technologies as a
Platform)
Không phải nền tảng đám mây nào cũng cung cấp một môi trƣờng hỗ trợ đầy đủ
cho vòng đời phát triển, nhóm này chỉ tập trung vào cung cấp một số khả năng nhất
định, một vài khả năng chỉ là các công cụ. Nhóm này gồm các sản phẩm tiêu biểu:
o Dịch vụ hỗ trợ kiểm tra trên nền đám mây: HP, IBM, công ty độc lập nhƣ
iTKO và SOASTA v.v…
o Dịch vụ quản lý: RightScale là công ty quản lý cho Amazon.
o Dịch vụ tùy biến: WaveMaker hỗ trợ tùy biến ứng dụng Web.

o Dịch vụ phát triển mạng xa hội: Nhƣ dịch vụ blog Wordpress.
1.1.3.3 Dịch vụ phần mềm (Software-as-a-Service SaaS )
Định nghĩa
Là các năng lực nhằm đem đến cho ngƣời dùng thông qua các ứng dụng thực thi
trên nền tảng đám mây của nhà cung cấp phần mềm. Các ứng dụng này có thể truy
cập từ nhiều thiết bị khác nhau thông qua một giao diện nhƣ trình duyệt web (ví dụ
nhƣ các dịch vụ email nền web). Ngƣời dùng không phải quản lý hoặc kiểm soát hạ
tầng đám mây bên dƣới và cả những ứng dụng đơn lẻ, ngoại trừ một số quyền cấu
hình tùy chỉnh ứng dụng hạn chế cho một vài cá nhân cụ thể.
Đặt trưng
Đƣợc xây dựng trên kiến trúc cho nhiều ngƣời thuê. Nghĩa là nhiều khách hàng
có thể cùng chạy một thể hiện/dịch vụ đặt trên một máy chủ từ xa.
Thông thƣờng truy cập qua giao diện Web.
Mô hình kinh doanh là dạng: hosted-Ngƣời cung cấp, vận hành CRM không
phải là công ty có nhu cầu sử dụng ứng dụng mà là công ty khác
Phƣơng thức thanh toán theo hàng phí hàng tháng. Thƣờng kèm theo chi phí
khởi chạy ứng dụng hoặc chi phí tùy chỉnh cấu hình, tuy nhiên chi phí bảo trì
thƣờng đã tính trong phí hàng tháng
Các sản phẩm tiêu biểu
Có rất nhiều sản phẩm SaaS, tuy nhiên chúng có thể đƣợc chia làm ba nhóm:
Gói phần mềm (Packaged Software): Chiếm thị phần lớn nhất, gồm các sản
phẩm ERP, CRM , SCM v.v… Các sản phẩm tiêu biểu gồm:

17

o Netsuitt hay Salesforce.com, Intuit, RightNow, Concur, SugarCRM,
Microsoft với Dynamics package, SAP với dịch vụ By Design, Oracle với
On Demand dựa trên Siebel.
Phần mềm cộng tác (Collaborative software): Hỗ trợ cho các hình thức làm
việc và cộng tác qua mạng giữa các cá nhân hoặc thành viên tổ chức. Các sản

phẩm tiêu biểu:
o MicrosoftLive
o LotusLive
o GoogleApps
Nhóm phần mềm quản lý và các công cụ (Collaborative software): Tiêu biểu
nhƣ:
o Dịch vụ an ninh: Nhƣ các sản phẩm phần mềm diệt virus dạng dịch vụ của
Symantec, McAfee, CA, và Kapersky Labs.
o Cùng nhiều sản phẩm tiện ích khác: Chia sẻ ảnh, nghe nhạc v.v…
Các lợi ích của tính toán đám mây 1.1.4
Giảm chi phí đầu tƣ và tỷ lệ phí tổn (Reduced Investment and Proportional
Costs)
Gia tăng tính mở rộng (Increased Scalability)
Gia tăng khả năng đáp ứng và khả năng tin cậy (Increased Availability and
Reliability)
Ảnh hưởng của sự phát triển các dịch vụ đám mây đến MapReduce 1.1.5
“Everyting as a Service” đƣợc hƣớng theo nhu cầu của các hiệu quả kinh doanh
tốt hơn nhƣng khả năng mở rộng và sự mềm dẻo cũng đóng vai trò quan trọng. Cloud
Computing giúp cho các tổ chức có thể mở rộng hoặc thu hẹp một cách dễ dàng mà
không cần có kế hoạch từ trƣớc. Cloud services, cũng nhƣ MapReduce đại diện cho sự
tìm kiếm một cấp độ trừu tƣợng thích hợp và lợi ích của việc chia sẻ sức lao động.
IaaS là một mức trừu tƣợng về phần cứng vật lý – một tổ chức có thể thiếu vốn,
chuyên gia và sự quan tâm đến việc hoạt động các Datacenter, vì thế họ bỏ tiền thuê
các Cloud Provider làm việc đó. Điều này cũng tƣơng tự với PaaS và SaaS. Cũng
cùng theo dòng chảy, mô hình lập trình MapReduce là một mức trừu tƣợng mạnh mẽ
để tách biệt “what” (xử lý cái gì) ra khỏi “how” (xử lý nhƣ thế nào) trong việc xử lý
dữ liệu lớn.


18


1.2 Các ý tưởng của MapReduce
Giải quyết các bài toán dữ liệu lớn đòi hỏi cách tiếp cận riêng biệt mà nhiều khi
đối lập với mô hình tính toán truyền thống. Dƣới đây là các ý tƣởng chính của
MapReduce:
Scale “out” not “up” (mở rộng chứ không nâng cấp): Để tăng sức mạnh xử lý
thay vì nâng cấp bộ vi xử lý cũng nhƣ khả năng lƣu trữ của máy tính (mua các server
có khả năng xử lý cao – high-end server) giải pháp đƣa ra là tăng số lƣợng các server
thông dụng (low-end server). Giải pháp này kinh tế hơn nhiều so vì nó chỉ bổ sung
một số máy tính và tận dụng đƣợc các server sẵn có trong khi giải pháp nâng cấp có
thể dẫn đến việc mua sắm mới lại toàn bộ các server. Hơn nữa giá thành của một
server chuyên dụng đắt hơn nhiều so với một cụm máy tính thông thƣờng với khả
năng xử lý tƣơng đƣơng.
Assume failures are common (chấp nhận việc xảy ra lỗi là thường xuyên): Với
sự gia tăng về số lƣợng của các server trong một cluster, lỗi xảy ra là điều bình thƣờng.
Do đó các dịch vụ phân tán trên nhiều server phải tính toán đến các lỗi về phần cứng
cũng nhƣ phần mềm thƣờng xuyên xảy ra. Mô hình lập trình MapReduce có khả năng
xử lý các lỗi thông qua một số cơ chế nhƣ tự động khởi động lại các task trên cluster
node khác nhau.
Move processing to the data (đưa xử lý đến dữ liệu): Trong các ứng dụng tính
toán hiệu năng cao truyền thống (High – Prefomance Computing - HPC). Thông
thƣờng, một siêu máy tính có các nút xử lý (processing node) và các nút lƣu trữ
(storage node) đƣợc kết nối với nhau qua một kết nối tốc độ cao. Nhiều công việc
nặng nề về dữ liệu không phải là những đòi hỏi xử lý cao. Do đó việc tách rời việc lƣu
trữ dữ liệu và tính toán tạo ra sự thắt cổ chai trong mạng. Do đó sẽ hiệu quả hơn nếu
chuyển sự thực thi xử lý đến dữ liệu thay vì chuyển dữ liệu đến nơi xử lý chúng.
MapReduce sử dụng một kiến trúc trong đó các bộ xử lý và đĩa lƣu trữ đƣợc đặt cùng
với nhau. Trong sự thiết lập nhƣ vậy, chúng ta có thể tận dụng lợi thế của dữ liệu cục
bộ bằng cách chạy đoạn mã trên bộ xử lý một cách trực tiếp trên khối dữ liệu cần xử
lý. Hệ thống tập tin phân tán có nhiệm vụ quản lý dữ liệu mà MapReduce xử lý.

Process data sequentially and avoid random access (xử lý dữ liệu tuần tự và
tránh truy cập ngẫu nhiên): Trong trƣờng hợp xử lý một lƣợng lớn dữ liệu, dung
lƣợng bộ nhớ thƣờng không đủ cho toàn bộ dữ liệu xử lý. Do đó dữ liệu phải đƣợc lƣu
trữ trên đĩa. Thời gian cho việc truy cập ngẫu nhiên thƣờng hạn chế bởi sự di chuyển
của đầu đọc cũng nhƣ tốc độ đĩa do đó làm chậm công việc xử lý. Để tránh hạn chế
này, MapReduce đƣợc thiết kế để xử lý các khối dữ liệu của một tập dữ liệu lớn.
Hide system-level details from the application developer (che giấu mức chi tiết
hệ thống đối với nhà phát triển): Để dễ dàng cho các lập trình viên khi viết ứng
dụng xử lý phân tán, MapReduce che giấu sự thực thi phức tạp bên dƣới. Thay vào đó,

19

MapReduce cung cấp một mô hình lập trình trừu tƣợng với các interface đơn giản
đƣợc định nghĩa sẵn.
1.3 Sự quan trọng của MapReduce
Về tính thiết thực, MapReduce cung cấp một công cụ rất hiệu quả để giải quyết
các bài toán dữ liệu lớn. Ngoài ra, MapReduce còn quan trọng trong cách nó đã thay
đổi việc sắp xếp tính toán trên quy mô lớn.
Nói một cách công bằng thì MapReduce không phải là mô hình tính toán song
song đầu tiên đƣợc đƣa ra. Mô hình phổ biến nhất trong lý thuyết khoa học máy tính
có từ mấy thập kỷ trƣớc là PRAM
4
(Parallel Random Access Machine). Trong mô
hình này, một lƣợng lớn các vi xử lý chia sẻ một bộ nhớ lớn không giới hạn, hoạt
động đồng thời trên một lƣợng dữ liệu chia sẻ để tạo ra kết quả. Các mô hình khác
nhƣ LogP
5
và BSP
6
(Bulk Synchronous Parallel), tuy nhiên không có mô hình nào có

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



4

5

6


20

Chƣơng 2: CƠ BẢN VỀ MAPREDUCE
2 Cơ bản về MapReduce
Phƣơng pháp thƣờng đƣợc sử dụng để giải quyết các bài toán dữ liệu lớn hiện nay
là chia để trị. Ý tƣởng là phân mảnh một bài toán lớn thành các bài toán con nhỏ. Các
bài toán nhỏ độc lập với nhau để có thể đƣợc giải quyết song song bởi các workers
khác nhau – workers có thể là các tiến trình trong bộ vi xử lý hoặc các bộ vi xử lý
trong trong bộ vi xử lý đa nhân, các bộ xử lý trên một máy, các máy trên một cụm
máy tính. Các kết quả trung gian từ các worker cụ thể sẽ đƣợc gộp lại để tạo thành kết

quả cuối cùng.
Chia để trị:


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

21

2.1 Nguồn gốc từ Functional Programming
MapReduce có nguồn gốc từ lập trình hàm (Functional Programming). Ví dụ điển
hình nhƣ các ngôn ngữ lập trình Lisp
7
và ML
8
. Tính năng chính của lập trình hàm là
khái niệm về các hàm bậc cao (higher-order functions), hoặc các hàm chấp nhận tham
số của nó là một hàm. Hai hàm bậc cao thƣờng đƣợc xây dựng sẵn là Map và Fold.
Nhƣ hình dƣới, cho một danh sách, Map lấy tham số là một hàm f (có 1 tham số)
và áp dụng cho toàn bộ phần tử trong danh sách. Cho một danh sách, Fold lấy tham số
là một hàm g (có 2 tham số) và một giá trị khởi tạo: g đầu tiên đƣợc áp dụng cho giá
trị khởi tạo và phần tử đầu tiên trong danh sách, kết quả đƣợc lƣu trong biến trung
gian, tiếp tục dùng biến trung gian này để phần tử thứ 2 trong danh sách để làm tham
số cho hàm g, công việc tiếp lặp đi lặp lại đến khi hết toàn bộ danh sách. Fold trả về
kết quả cuối cùng là giá trị cuối cùng của biến trung gian.

Hình 4. Hàm Map và Fold trong Functional Programming
Hàm Map trong MapReduce tƣơng ứng với hàm Map, hàm Reduce tƣơng ứng với
hàm Fold trong lập trình hàm.




7

8


22

2.2 Cấu trúc dữ liệu trong MapReduce
Các cặp key-value là cấu trúc dữ liệu cơ bản trong MapReduce. Key và value có
thể nhận các giá trị có kiểu cơ bản nhƣ số nguyên, số thực, chuỗi hay có thể nhận các
kiểu giá trị có cấu trúc do ngƣời dùng định nghĩa.
Một phần quan trọng của giải thuật MapReduce là việc xác định cấu trúc key-value
trên các tập dữ liệu cần xử lý. Ví dụ, đối với một tập các trang web, các key có thể là
các URL và các value có thể là nội dung của các trang HTML, đối với một đồ thị, key
có thể là node id và value có thể là danh sách kề của node đó. Trong một số thuật toán
key đƣợc sử dụng để phân biệt các bộ dữ liệu (giống nhƣ khái niệm khóa trong cơ sở
dữ liệu), trong khi ở một số thuật toán, các input key không quan trọng và thƣờng
đƣợc bỏ qua.
2.3 Mapper và Reducer – hai thành phần cơ bản trong
MapReduce
Trong MapReduce, lập trình viên định nghĩa một lớp Mapper và một lớp Reducer
với hai hàm cơ bản sau:
map(k1, v1) → [(k2, v2)]
reduce(k2, [v2]) → [(k3, v3)]
Ký hiệu […] để chỉ một danh sách các giá trị. Đầu vào của một công việc
MapReduce (MapReduce job) là dữ liệu đƣợc lƣu trữ trên hệ thống file phân tán
(Distributed File System). Hàm map và reduce lần lƣợt đƣợc cài đặt trong hai lớp
Mapper và Reducer. Mapper đƣợc áp dụng cho mọi cặp key-value để tạo ra các cặp
key-value trung gian. Reducer đƣợc áp dụng cho tất cả các giá trị (value) ứng với cùng

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

23


Hình 5. Hai pha Map và Reduce của một MapReduce job
Ví dụ minh họa MapReduce:
Ứng dụng đếm từ (Word count) trong một tập văn bản
Input: Tập văn bản
Outut: Danh sách các từ cùng số lần xuất hiện của chúng trong tập văn bản.
class Mapper
method Map(docId a, doc d)
for all term t
ϵ
doc d do
Emit(term t, count 1)


24

class Reducer
method Reduce(term t, counts[c1, c2,…])

sum ← 0
for all count c
ϵ
counts[c1, c2,…] do
sum ← sum + c
Emit(term t, count sum)
Hàm Map duyệt qua từng từ trong tập văn bản ứng với mỗi từ sẽ tạo ra một cặp
key-value với key chính là từ vừa gặp và value = 1. Hàm Reduce nhận đầu vào là một
từ (term) và và danh sách tần số ci bắt gặp của term đó (các giá trị thực là các số 1),
Reduce chỉ đơn giản cộng tất cả các giá trị ci trong danh sách counts.
2.4 Partitioner và Combiner
Phần trên chúng ta đã làm đơn giản cái nhìn về MapReduce, ngoài hai thành phần
Mapper và Reducer, thƣờng thì lập trình viên phải chỉ thêm 2 thành phần phụ nữa:
Thành phần Partitioner có nhiệm vụ chia không gian khóa (key) trung gian sau
bƣớc Map và gán các cặp key-value trung gian tới các Reduce. Hay nói một cách khác,
partitioner chỉ định tác vụ (task) mà cặp key-value trung gian phải đƣợc chuyển đến
đó. Trong mỗi Reducer, các khóa đƣợc xử lý theo thứ tự đã đƣợc sắp xếp. Partitioner
đơn giản nhất bao gồm việc tính toán giá trị băm của key và sau đó thực hiện phép
chia lấy phần dƣ của giá trị này với số lƣợng reducer. Do đó các partitioner có thể gán
một key và danh sách value của nó tới một reducer có số hiệu là giá trị băm vừa tính
đƣợc. Thông thƣờng hàm băm phải đƣợc tính toán sao cho số lƣợng key gởi đến mỗi
reducer xấp xỉ bằng nhau. Tuy nhiên partitioner không chú ý đến giá trị value trong
cặp key-value, do đó có thể xảy ra tình trạng phân bố dữ liệu không đồng đều trên các
reducer.
Thành phần Combiner trong MapReduce đóng vai trò nhƣ một thành phần tối ƣu
giúp giảm tải việc chuyển dữ liệu giữa từ các Mapper đến các Reducer. Có thể xem
combiner nhƣ là một reducer nhỏ (mini-reducer) đặt tại đầu ra của mapper, trƣớc pha
trộn và sắp xếp (shuffle and sort phase) gởi các cặp key-value tới các reducer. Mỗi
combiner hoạt động cô lập và do đó nó không truy xuất đến các cặp key-value của các
mapper khác. Đầu vào của combiner là các cặp key-value từ đầu ra của mapper và nó

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

×