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

Nghiên cứu và xây dựng ứng dụng tư vấn trên nền tảng hadoop mapreduce

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 (2.08 MB, 72 trang )

HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG
---------------------------------------

NGUYỄN VÂN ANH

NGHIÊN CỨU VÀ XÂY DỰNG ỨNG DỤNG TƢ VẤN TRÊN
NỀN TẢNG HADOOP MAPREDUCE

LUẬN VĂN THẠC SĨ KỸ THUẬT
(Theo định hướng ứng dụng)

HÀ NỘI - 2016


HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG
---------------------------------------

NGUYỄN VÂN ANH

NGHIÊN CỨU VÀ XÂY DỰNG ỨNG DỤNG TƢ VẤN TRÊN
NỀN TẢNG HADOOP MAPREDUCE
CHUYÊN NGÀNH : HỆ THỐNG THÔNG TIN
MÃ SỐ:

0

60.48.01.04

LUẬN VĂN THẠC SĨ KỸ THUẬT
(Theo định hướng ứng dụng)


NGƢỜI HƢỚNG DẪN KHOA HỌC: TS. ĐÀO ĐÌNH KHẢ

HÀ NỘI - 2016


i

LỜI CAM ĐOAN
Tôi cam đoan đây là công trình nghiên cứu của riêng tôi.
Các số liệu, kết quả nêu trong luận văn là trung thực và chƣa từng đƣợc ai
công bố trong bất cứ công trình nào.
TÁC GIẢ

Nguyễn Vân Anh


ii

LỜI CÁM ƠN
Lời đầu tiên em xin gửi lời cảm ơn chân thành tới tất cả các thầy cô đang
giảng dạy trong Khoa Công Nghệ Thông Tin, Học viện Công nghệ Bƣu chính Viễn
thông đã tận tình truyền đạt những kinh nghiệm và kiến thức quý báu, và các thầy
cô trong Khoa sau sau đại học đã tạo điều kiện, giúp em hoàn thành nhiệm vụ học
tập trong suốt thời gian là sinh viên của trƣờng.
Em xin gửi lời biết ơn sâu sắc đến thầy giáo TS. Đào Đình Khả, thầy đã tận
tâm hƣớng dẫn, chỉ bảo, nhắc nhở em trong suốt quá trình học tập và hoàn thành đồ
án này.
Bên cạnh đó, không thể không nhắc tới sự yêu thƣơng và chăm sóc của gia
đình. Sự động viên của bạn bè đã giúp em vƣợt qua những khó khăn khi thực hiện
đề tài.

Mặc dù bản thân đã cố gắng hết sức trong quá trình thực hiện đồ án nhƣng
chắc chắn sẽ không tránh khỏi những thiếu sót. Kính mong quý thầy cô và các bạn
tận tình góp ý, chỉ bảo.
Một lần nữa em xin cảm ơn và mong nhận đƣợc tình cảm chân thành từ tất
cả mọi ngƣời.
Tác giả.
Nguyễn Vân Anh


iii

MỤC LỤC
Lời cam đoan...............................................................................................................i
Lời cám ơn.................................................................................................................ii
Mục lục......................................................................................................................iii
Danh mục từ viết tắt....................................................................................................v
Danh mục các bảng biểu............................................................................................vi
Danh mục các hình vẽ...............................................................................................vii
MỞ ĐẦU……… .........................................................................................................1
CHƢƠNG I.
1.1

TỔNG QUAN VỀ BIG DATA VÀ HADOOP-MAPREDUCE ......3

Giới thiệu về Big Data ...................................................................................3

1.1.1 Định nghĩa Big Data ................................................................................3
1.1.2 Tầm quan trọng của Big Data ..................................................................4
1.2


Tổng quan về Hadoop ....................................................................................5

1.2.1 Giới thiệu Hadoop và các thành phần của Hadoop Escosystem .............5
1.2.2 Lƣu trữ dữ liệu lớn trên HDFS ................................................................7
1.3

Giới thiệu MapReduce .................................................................................15

1.3.1 Giới thiệu mô hình tính toán MapReduce .............................................15
1.3.2 Kiến trúc của MapReduce .....................................................................16
1.3.3 Mô hình làm việc và luồng dữ liệu của MapReduce ............................23
1.3.4 MapReduce và HDFS (Các đặc điểm tối ƣu của MapReduce khi kết
hợp với HDFS) ..................................................................................................25
1.3.5 Phát triển ứng dụng theo mô hình MapReduce với Hadoop MapReduce
27
1.4

Kết luận chƣơng 1 ........................................................................................29

CHƢƠNG II. ỨNG DỤNG HADOOP-MAPREDUCE CHO HỆ TƢ VẤN .......30
2.1 Giới thiệu vấn đề ..........................................................................................30
2.1.1 Phát biểu bài toán tƣ vấn .......................................................................30
2.1.2 Các phƣơng pháp xây dựng hệ tƣ vấn ...................................................33
2.2

Phƣơng pháp mạng Bayes cho lọc cộng tác ................................................35

2.2.1 Định lý mạng Bayes ..............................................................................35
2.2.2 Phân loại dựa vào mạng Bayes ..............................................................35
2.2.3 Áp dụng mạng Bayes cho hệ tƣ vấn ......................................................38



iv

2.2.4 Hadoop-Map Reduce dựa vào mạng Bayes ..........................................40
2.3

Phƣơng pháp SVD cho lọc cộng tác ............................................................45

2.3.1 Giới thiệu phƣơng pháp SVD (Singular Value Decomposition) ..........45
2.3.2 Áp dụng phƣơng pháp SVD cho hệ tƣ vấn .........................................46
2.3.3 Phƣơng pháp SVD dựa vào Hadoop Map Reduce ................................47
2.3.4 Vấn đề chọn chiều trong phƣơng pháp SVD.........................................52
2.4

Kết luận chƣơng 2 ........................................................................................53

CHƢƠNG III. THỰC NGHIỆM VÀ KẾT QUẢ ...................................................54
3.1 Dữ liệu thực nghiệm.....................................................................................54
3.2

Độ đo kiểm nghiệm ......................................................................................55

3.3

Phƣơng pháp thử nghiệm .............................................................................55

3.4

Kết quả thử nghiệm ......................................................................................55


3.4.1 Thử nghiệm về thời gian chạy ...............................................................57
3.5

Đánh giá và so sánh .....................................................................................58

3.5.1 Đánh giá giữa các phƣơng pháp lọc cộng tác ........................................58
3.5.2 Đánh giá thuật toán trƣớc và sau khi dùng Hadoop-MapReduce……..59
3.5.3 Đánh giá phƣơng pháp tƣ vấn sử dụng MapReduce và MyMedialite ..59
3.6

Kết luận chƣơng 3 ........................................................................................59

KẾT LUẬN…………… ...........................................................................................61
TÀI LIỆU THAM KHẢO .........................................................................................62


v

DANH MỤC TỪ VIẾT TẮT
Ký hiệu
API
CBF
CF
HDFS
JVM
MAE
MF
RMSE


Tiếng Anh
Application Programming Interface
Content – based Filtering
Collaborative Filtering
Hadoop Distribution File System
Java Virtual Machine
Mean Absolute Error
Matrix Factorization
Root Mean Square Error

SVD

Singular Value Decomposition

Tiếng Việt
Giao diện lập trình ứng dụng
Lọc dựa trên nội dung
Lọc cộng tác
Hệ thống file phân tán Hadoop
Máy ảo Java
Trung bình sai số tuyệt đối
Phân tích ma trận
Căn bậc hai của trung bình
bình phƣơng sai số
Phân rã giá trị riêng


vi

DANH MỤC CÁC BẢNG BIỂU

Bảng 2-1: Ma trận đánh giá ví dụ 2.1 ................................................................................ 33
Bảng 2-2: Ví dụ bài toán sử dụng định lý Bayes ................................................................ 37
Bảng 2-3: Ví dụ 2.4 - Tập dữ liệu ....................................................................................... 43
Bảng 2-4: Ví dụ 2.4 – Đầu ra của DataSplitMapper sau khi sắp xếp ................................ 43
Bảng 2-5: Ví dụ 2.4 – Đầu ra của DataSplitReducer ......................................................... 44
Bảng 2-6: Ví dụ 2.4 – Đầu ra của Count_Pcj_Mapper ...................................................... 44
Bảng 2-7: Ví dụ 2.4 – Đầu ra của Count _Pcj_Reducer ................................................... 45
Bảng 2-8: Ví dụ 2.5 - Tập dữ liệu ....................................................................................... 50
Bảng 2-9: Ví dụ 2.5 – Đầu ra của DataSplitMapper sau khi sắp xếp ................................ 51
Bảng 2-10: Ví dụ 2.5– Đầu ra của DataSplitReducer ........................................................ 51
Bảng 2-11: Giá trị MAE trong phương pháp sử dụng SVD với giá trị K khác nhau ......... 52
Bảng 3-1: Phương pháp SVD với độ giảm ma trận khác nhau .......................................... 55
Bảng 3-2: Kiểm nghiệm đánh giá các tiêu chí của 4 phương pháp ................................... 57
Bảng 3-3: Kiểm nghiệm đánh giá các tiêu chí của các phương pháp trên tập 1M ............ 58


vii

DANH MỤC CÁC HÌNH VẼ

Hình 1-1:Cấu trúc các thành phần của Hadoop .................................................................. 6
Hình 1-2: Tổng quan một Hadoop cluster ............................................................................ 7
Hình 1-3: Kiến trúc HDFS.................................................................................................. 10
Hình 1-4: Quá trình đọc file trên HDFS............................................................................. 12
Hình 1-5: Quá trình tạo và ghi dữ liệu lên file trên HDFS ................................................ 13
Hình 1-6: Mô hình MapReduce của Google ....................................................................... 16
Hình 1-7: Kiến trúc các thành phần ................................................................................... 16
Hình 1-8: Cơ chế hoạt động của Hadoop MapReduce....................................................... 18
Hình 1-9: Sự liên lạc đầu tiên giữa TaskTracker thực thi MapTask và JobTracker .......... 19
Hình 1-10: Cơ chế hoạt động của Map task ....................................................................... 20

Hình 1-11: TaskTracker hoàn thành Map task .................................................................. 20
Hình 1-12: Cơ chế hoạt động của Reduce Task ................................................................. 21
Hình 1-13: TaskTracker hoàn thành Reduce task .............................................................. 22
Hình 1-14: Luồng dữ liệu của MapReduce với một Reduce Task [7] ................................ 24
Hình 1-15: Luồng dữ liệu của MapReduce với nhiều reduce task[7] ................................ 24
Hình 1-16: Hàm Map .......................................................................................................... 25
Hình 1-17: Hàm Reduce ..................................................................................................... 25
Hình 1-18: Data locality ..................................................................................................... 26
Hình 1-19: Phát triển ứng dụng MapReduce trên Hadoop ................................................ 27
Hình 2-1: Áp dụng MapReduce cho kỹ thuật lọc cộng tác sử dụng định lí Bayes............. 40
Hình 2-2: Áp dụng MapReduce cho kỹ thuật lọc cộng tác bằng phương pháp SVD ........ 47
Hình 3-1: Thời gian thực hiện SVD với kích thước ma trận S khác nhau .......................... 56
Hình 3-2: Giá trị MAE với kích thước ma trận S khác nhau .............................................. 56
Hình 3-3: Thời gian thực hiện các phương pháp(s) ........................................................... 57
Hình 3-4: Giá trị MAE với các phương pháp khác nhau ................................................... 58
Hình 3-5: Đánh giá phương pháp tư vấn sử dụng MapReduce và MyMedialite ............... 59


1

MỞ ĐẦU
Trong thời đại phát triển của ngành công nghệ máy tính, số lƣợng ngƣời sử
dụng máy tính và các tài nguyên trực tuyến để xử lý công việc, giải trí... ngày càng
tăng nhanh. Theo ƣớc tính đến 2014, đã có 37% dân số Việt Nam sử dụng Internet,
số lƣợng ngƣời gia nhập cộng đồng mạng trên thế giới cuối năm 2014 là khoảng 2.7
tỷ ngƣời. Hệ quả tất yếu sự gia tăng lƣợng ngƣời sử dụng là khối lƣợng dữ liệu số
đang phát triển với tốc độ chóng mặt.
Hiện nay, số lƣợng trang web có mặt trên Internet đã lên tới hàng tỷ trang.
Điều này đã đặt ra cho các nhà phát triển Search Engine một số thách thức lớn.
Thứ nhất, đó là sự giới hạn về khả năng lƣu trữ của ổ cứng. Giả sử mỗi trang

web có kích thƣớc trung bình 10KB, thì 1 tỷ trang web, ta cần 10Terabyte(TB) để
lƣu trữ. Với toàn bộ khối lƣợng web trên Internet, khối lƣợng lƣu trữ cần tới hàng
petabyte(PB), vƣợt quá khả năng lƣu trữ của một đĩa cứng thông thƣờng.
Thứ hai, cho dù vƣợt qua đƣợc giới hạn về dung lƣợng, thì việc truy xuất
một khối lƣợng dữ liệu đồ sộ nhƣ vậy một cách tuần tự (trên một đĩa đơn) sẽ rất mất
thời gian vì giới hạn về tốc độ đọc đĩa.
Do vậy, bắt buộc chúng ta phải lƣu trữ dữ liệu lên trên nhiều đĩa cứng thay vì
chỉ một. Điều này giúp cải thiện tốc độ truy xuất dữ liệu vì ta có thể tiến hành
đọc/ghi một cách song song lên các đĩa. Tuy nhiên, việc duy trì một hệ thống phân
tán với nhiều đĩa cứng đã dẫn đến một số vấn đề cần đƣợc giải quyết. Đầu tiên, là
vấn đề hỏng hóc phần cứng. Do dữ liệu đƣợc lƣu trên nhiều phần cứng khác nhau,
nên khả năng một (hay nhiều) phần cứng xảy ra hỏng hóc cũng tăng lên đáng kể.
Một cách giải quyết vấn đề này mà ta có thể thấy ngay, đó là lƣu trữ trùng lặp các
mẫu dữ liệu lên nhiều đĩa cứng khác nhau. Vấn đề thứ hai là việc phân tích dữ liệu
đôi khi cần truy đọc dữ liệu từ nhiều đĩa cứng khác nhau. Tức là dữ liệu đƣợc đọc từ
một đĩa có thể cần đƣợc kết hợp với dữ liệu từ bất kỳ đĩa nào khác trên hệ thống.
Các hệ thống phân tán thƣờng cho phép kết hợp dữ liệu từ nhiều nguồn khác nhau,
tuy nhiên làm đƣợc điều này một cách chính xác là không dễ chút nào.


2

Sự bùng nổ về dữ liệu đã đặt ra cho chúng ta những thách thức về việc làm
thế nào lƣu trữ và xử lý tất cả dữ liệu đó. Tuy nhiên, ở một mặt khác nó lại mang
đến các cơ hội có thể chiếm lĩnh một nguồn thông tin khổng lồ nếu chúng ta có đủ
khả năng phân tích và xử lý nguồn dữ liệu đó, biến những dữ liệu thô thành những
thông tin hữu ích với một mức chi phí hợp lý. Để giải quyết vấn đề này, rất nhiều
công nghệ đã ra đời nhằm thực hiện tính toán và mở rộng việc xử lý dữ liệu theo mô
hình song song và khả năng chịu lỗi cao trên một số lƣợng lớn máy tính. Các máy
tính thực hiện tính toán độc lập với nhau và không ảnh hƣởng bởi việc xảy ra lỗi ở

máy khác, giúp tăng hiệu năng tính toán so với việc chỉ dùng một máy, ngoài ra sử
dụng mô hình tính toán song song còn giúp giảm giá thành.
Một trong các công nghệ đƣợc sử dụng phổ biến để tối ƣu hóa việc tính toán
song song là Hadoop – MapReduce. MapReduce chia việc xử lý thành nhiều khối
công việc nhỏ, phân tán khắp các nút tính toán (tiêu biểu là các server thông
thƣờng), rồi thu thập các kết quả. Đồ án của em trình bày phƣơng pháp áp dụng
framework này vào việc xây dựng hệ tƣ vấn bằng phƣơng phƣơng pháp lọc cộng tác
dựa vào mô hình áp dụng Mạng Bayes và SVD.
Nội dung của đồ án gồm:
Chƣơng 1: Tổng quan về Big Data và Hadoop- MapReduce.
Chƣơng 2: Ứng dụng Hadoop- MapReduce cho hệ tƣ vấn.
Chƣơng 3: Thực nghiệm và kết quả.


3

CHƢƠNG I.

TỔNG QUAN VỀ BIG DATA VÀ HADOOPMAPREDUCE

Chƣơng 1 giới thiệu tầm quan trọng của Big Data trong thực tế, tổng quan về
các thành phần việc lƣu trữ dữ liệu lớn trong Hadoop và giới thiệu về mô hình làm
việc kiến trúc của MapReduce.

1.1 Giới thiệu về Big Data
1.1.1 Định nghĩa Big Data
Big Data là thuật ngữ dùng để mô tả lƣợng dữ liệu khổng lồ, có dung lƣợng
lớn (lên đến hàng Terabytes hay Petabytes), tăng trƣởng nhanh và có nội dung đa
dạng.
Big Data thƣờng liên quan đến một số loại dữ liệu [1]:

- Các loại dữ liệu truyền thống của doanh nghiệp: thông tin ngƣời dùng, dữ
liệu giao dịch, các dữ liệu kế toán nói chung…
- Dữ liệu do máy tự sinh, dữ liệu cảm biến: dữ liệu cảm biến của các thiết bị,
các file log sinh ra khi chạy các thiết bị phần cứng hoặc chạy các ứng dụng,…
- Dữ liệu xã hội: dữ liệu ngƣời dùng, phản hồi, hoạt động của ngƣời dùng, tin
nhắn, bài đăng, bình luận trên các mạng xã hội nhƣ Facebook, Twitter,…
Theo ƣớc tính của McKinsey Global Institute, dung lƣợng dữ liệu tăng 40%
mỗi năm và sẽ tăng gấp 44 lần từ năm 2009 đến năm 2020. Tuy nhiên dung lƣợng
dữ liệu không phải đặc điểm duy nhất của Big Data mặc dù nó là một đặc điểm
quan trọng và dễ nhìn thấy nhất. Thực tế, có 4 đặc điểm dùng để định nghĩa dữ liệu
lớn, đó là [1] :
- Dung lƣợng: dung lƣợng khi nói đến Big Data có thể lên đến hàng terabytes
hoặc thậm chí petabytes.
- Tốc độ tăng trƣởng: lƣợng dữ liệu Big Data tăng lên từng ngày, thậm chí
từng giờ và internet phải cập nhật thƣờng xuyên.
- Đa dạng: dữ liệu lớn có thể ở rất nhiều dạng khác nhau nhƣ ảnh, âm thanh,
video, log file, cảm biến,…


4

- Giá trị dữ liệu: giá trị kinh tế của các phần trong một tập dữ liệu lớn khác
nhau đáng kể do đó thách thức quan trọng là xác định xem dữ liệu nào là có giá trị.

1.1.2 Tầm quan trọng của Big Data
Big Data là công nghệ thu thập thông tin quy mô lớn từ các website. Các
doanh nghiệp thƣờng vận dụng công cụ này nhằm phục vụ công việc dự đoán xu
hƣớng thị trƣờng, nâng cao chất lƣợng sản phẩm hoặc dịch vụ hiện có, tạo ra sản
phẩm mới hoặc tìm hiểu về hành vi khách hàng. Phân tích dữ liệu cũng có thể giúp
các doanh nghiệp thích nghi, tạo ra nội dung website thu hút nhiều khách hàng hơn,

có đƣợc cái nhìn sâu sắc vào hành vi mua hàng. Dữ liệu càng nhiều thì càng tốt cho
công ty. Để làm đƣợc nhƣ vậy, doanh nghiệp nên cung cấp nội dung trên nhiều nền
tảng social media, nhằm thu thập đƣợc nhiều thông tin từ những điểm tiếp xúc với
khách hàng bằng cách tìm hiểu qua hệ thống cơ sở dữ liệu, công ty có thể tạo ra nội
dung có liên quan hơn với ngƣời đọc.
Một số công cụ lớn trên thế giới phải xử lý Big Data:
Google Analytics: Đây là công cụ phân tích của Google nhằm đánh giá lƣu
lƣợng truy cập trang web của bạn và chỉ ra cách khách tìm hàng thấy trang web,
thời gian họ ở lại trang, vị trí đăng nhập và nhiều thông tin khác
Facebook Insights: Công cụ này cho phép bạn biết mức độ thƣờng xuyên các
bài viết của bạn đƣợc chia sẻ cũng nhƣ địa điểm và thời gian chia sẻ.
Tweriod và Followerwonk: Các chƣơng trình này cũng thu thập dữ liệu từ
các phƣơng tiện social media và có thể cung cấp thông tin về giới tính, vị trí và mức
độ hoạt động của chủ tài khoản social media.
YouTube Analytics: Nếu công ty của bạn đang hoạt động trên YouTube, đây
là công cụ tuyệt vời để khai thác thông tin về nhân khẩu học của những ngƣời xem
video bạn và họ đang ở đâu.
Khi Big Data đƣợc lƣu trữ, xử lý và phân tích một cách chuẩn xác, chúng ta
có thể có đƣợc nhiều thông tin hữu ích để hiểu hơn về công việc của mình qua đó
giúp cho công việc đạt hiệu quả cao hơn. Trong hệ thống thƣơng mại điện tử, trên


5

mạng xã hội giúp cho nhà quản lý hiểu rõ hơn về khách hàng và xu hƣớng của họ,
đồng thời giúp các hệ thống tƣ vấn đƣa ra những gợi ý chính xác cho ngƣời dùng.

1.2 Tổng quan về Hadoop
1.2.1 Giới thiệu Hadoop và các thành phần của Hadoop Escosystem
1.2.1.1 Giới thiệu Hadoop

Hadoop là một phần mềm mã nguồn mở đƣợc viết bằng java cho phép phát
triển các ứng dụng phân tán có dữ liệu lớn một cách miễn phí, cha đẻ của Hadoop là
Doug Cutting (ngƣời đã viết Apache Lucene – thƣ viện tìm kiếm đƣợc sử dụng rộng
rãi). Hadoop cho phép lƣu trữ và truy cập dữ liệu, xử lí, phân tích cũng nhƣ hỗ trợ
học máy trên tập dữ liệu lớn một cách phân tán thông qua các cụm server
(cluster)[3].
Theo Wikipedia: 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 và 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) (nguồn: />Ta có thể khái quát nhƣ sau:
- Haddop là một framework cho phép phát triển các ứng dụng phân tán.
- Hadoop viết bằng Java. Tuy nhiên, nhờ cơ chế streaming, Hadoop cho phép
phát triển các ứng dụng phân tán bằng cả java lẫn một số ngôn ngữ lập trình khác
nhƣ C++, Python, Pearl.
- Hadoop cung cấp một phƣơng tiện lƣu trữ dữ liệu phân tán trên nhiều node,
hỗ trợ tối ƣu hoá lƣu lƣợng mạng, đó là HDFS. HDFS che giấu tất cả các thành
phần phân tán, các nhà phát triển ứng dụng phân tán sẽ chỉ nhìn thấy HDFS nhƣ
một hệ thống file cục bộ bình thƣờng.
- Hadoop giúp các nhà phát triển ứng dụng phân tán tập trung tối đa vào
phần logic của ứng dụng, bỏ qua đƣợc một số phần chi tiết kỹ thuật phân tán bên
dƣới (phần này do Hadoop tự động quản lý).


6

- Hadoop là Linux-based. Tức Hadoop chỉ chạy trên môi trƣờng Linux 2.

1.2.1.2 Các thành phần của Hadoop Ecosystem
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 1-1:Cấu trúc các thành phần của Hadoop

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.


7

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, em chỉ nghiên cứu hai phần quan trọng
nhất của Hadoop, đó là HDFS và MapReduce.


1.2.2 Lưu trữ dữ liệu lớn trên HDFS
1.2.2.1 Tổng quan của một Hadoop Cluster
Một Hadoop cluster có HDFS và MapReduce là hai thành phần chính. 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 một Hadoop cluster nhƣ sau:

Hình I-1: Tổng quan một Hadoop cluster

Trên một hadoop cluster, có duy nhất một node chạy NameNode, một node
chạy JobTracker (NameNode và JobTracker có thể nằm trên cùng một máy vật lý,
tuy nhiên trên các cluster thật sự với hàng trăm, hàng nghìn node thì thƣờng phải
tách riêng NameNode và JobTracker ra các máy vật lý khác nhau). Có nhiều node


8

slave, mỗi node slave thƣờng đóng 2 vai trò: một là DataNode, hai là TaskTracker.
NameNode và DataNode chịu trách nhiệm vận hành hệ thống file 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 metadata
của hệ thống HDFS nhƣ file system space, danh sách các file trên hệ thống và các
block id tƣơng ứng của từng file, quản danh sách slave và tình trạng hoạt động của
các DataNode (live hay dead) thông qua các heartbeat , điều hƣớng quá trình
đọc/ghi dữ liệu từ client lên các DataNode.
NameNode lƣu trữ ba loại metadata chính: file system namespace, thông tin
để ánh xạ file thành các block và thông tin nơi lƣu trữ (địa chỉ/tên DataNode) của
các block. Tất cả các metadata này đều đƣợc lƣu trữ trong bộ nhớ chính của
NameNode. Hai loại metadata đầu tiên còn đƣợc lƣu trữ bền vững bằng cách ghi

nhật ký các thay đổi vào EditLog và FsImage đƣợc lƣu trữ trên hệ thống file local
của NameNode
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/xoá
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 và 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 từng 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 NameNode và
bản sao này sẽ đƣợc dùng để phục hồi lại NameNode nếu NameNode bị hƣ hỏng.


9

1.2.2.2 Hadoop Distributed File System (HDFS)
HDFS – Hadoop distributed file system (Hệ thống file phân tán Hadoop) là
một dự án con của Apache. HDFS đƣợc thiết kế để lƣu trữ dữ liệu lớn và file phân
tán một cách đáng tin cậy. Kiến trúc của HDFS là kiến trúc dựa trên mô hình chủ tớ (master – slave), nó đƣợc thiết kế để giảm thiểu việc tiêu tốn tài nguyên phần
cứng [2,6,7].
HDFS cho phép truy cập dữ liệu với tốc độ cao qua mạng phân tán, cung cấp
APIs để quản lý hệ thống file. HDFS cung cấp khả năng xử lý lỗi của các node,
tránh mất mát dữ liệu tại các node bằng cách sử dụng cơ chế nhân bản dữ liệu trên
nhiều node.
HDFS lƣu trữ siêu dữ liệu và dữ liệu ứng dụng một cách riêng rẽ.


1.2.2.3 Khái niệm Block trong HDFS
Tƣơng tự nhƣ block trong hệ thống file thông thƣờng, block trong HDFS
cũng là lƣợng dữ liệu tối thiểu của mỗi lần đọc, ghi dữ liệu. Block trong HDFS có
những điểm giống và điểm khác so với block trong hệ thống file thông thƣờng[7] :
Điểm giống: file trong HDFS cũng đƣợc chia nhỏ thành các đoạn có kích
thƣớc bằng kích thƣớc của một block và đƣợc lƣu trữ thành các đơn vị độc lập.
Điểm khác: nếu một file trong HDFS có kích thƣớc nhỏ hơn kích thƣớc của
block thì nó sẽ không chiếm dụng toàn bộ dung lƣợng của block đó.

1.2.2.4 Kiến trúc của 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 và
kích thƣớc này đƣợ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 (replica) khác nhau vì mục đích an toàn dữ liệu .


10

NameNode đóng vai trò là master, chịu trách nhiệm duy trì thông tin về cấu
trúc cây 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ác file, thƣ mục có trên
hệ thống file và quan hệ giữa chúng.
Thông tin để ánh xạ từ tên file ra thành danh sách 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.
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 1 block sẽ đƣợc lƣu trữ

nhƣ là 1 file riêng biệt trên hệ thống file cục bộ của DataNode.
Kiến trúc của HDFS đƣợc thể hiện qua sơ đồ dƣới đây:

Hình 1-I-2: Kiến trúc HDFS

NameNode sẽ chịu trách nhiệm điều phối các thao tác truy cập (đọc/ghi dữ
liệu) của client lên hệ thống HDFS. Và tất nhiên, do các DataNode là nơi thật sự 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 1 file trên hệ


11

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 request đọc các block.
NameNode thực hiện nhiệm vụ của nó thông qua một daemon tên
NameNode chạy trên port 8021. Mỗi DataNode server sẽ chạy một daemon
DataNode trên port 8022.
Định kỳ, mỗi DataNode sẽ báo cáo cho NameNode biết về danh sách tất cả
các block mà nó đang lƣu trữ, NameNode sẽ dựa vào những thông tin này để cập
nhật lại các metadata trong nó. Cứ sau mỗi lần cập nhật lại nhƣ vậy, metadata trên
NameNode sẽ đạt đƣợc tình trạng thống nhất với dữ liệu trên các DataNode. Toàn
bộ trạng thái của metadata khi đang ở tình trạng thống nhất này đƣợc gọi là một
checkpoint. Metadata ở trạng thái checkpoint sẽ đƣợc dùng để nhân bản metadata
dùng cho mục đích phục hồi lại NameNode nếu NameNode bị lỗi.

1.2.2.5 NameNode và quá trình tƣơng tác giữa client và HDFS
Việc tồn tại duy nhất một NameNode trên một hệ thống HDFS đã làm đơn

giản hoá thiết kế của hệ thống và cho phép NameNode ra những quyết định thông
minh trong việc sắp xếp các block dữ liệu lên trên các DataNode dựa vào các kiến
thức về môi trƣờng hệ thống nhƣ: cấu trúc mạng, băng thông mạng, khả năng của
các DataNode... Tuy nhiên, cần phải tối thiểu hoá sự tham gia của NameNode vào
các quá trình đọc/ghi dữ liệu lên hệ thống để tránh tình trạng nút thắt cổ chai (bottle
neck).
Client sẽ không bao giờ đọc hay ghi dữ liệu lên hệ thống thông qua
NameNode. Thay vào đó, client sẽ hỏi NameNode xem nên liên lạc với DataNode
nào để truy xuất dữ liệu. Sau đó, client sẽ cache thông tin này lại và kết nối trực tiếp
với các DataNode để thực hiện các thao tác truy xuất dữ liệu. Chúng ta sẽ mổ xẻ
quá trình đọc một file từ HDFS và ghi một file lên HDFS thông qua việc tƣơng tác
giữa các đối tƣợng từ phía client lên HDFS.


12

1.2.2.6 Quá trình đọc file
Sơ đồ sau miêu tả rõ quá trình client đọc một file trên HDFS.

Hình 1-3: Quá trình đọc file trên HDFS

Đầu tiên, client sẽ mở file cần đọc bằng cách gửi yêu cầu đọc file đến
NameNode. 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 “sẵn sàng” 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. Lƣu ý là 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ẽ transparent
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.
Trong quá trình một client đọc một file trên HDFS, ta thấy client sẽ trực tiếp
kết nối với các DataNode để lấy dữ liệu chứ không cần thực hiện gián tiếp qua
NameNode (master của hệ thống). Điều này sẽ làm giảm đi rất nhiều việc trao đổi


13

dữ liệu giữa client NameNode, khối lƣợng luân chuyển dữ liệu sẽ đƣợc trải đều ra
khắp cluster, tình trạng bottle neck sẽ không xảy ra. Do đó, cluster chạy HDFS có
thể đáp ứng đồng thời nhiều client cùng thao tác tại một thời điểm.

1.2.2.7 Quá trình ghi file
Sơ đồ sau mô tả quá trình tƣơng tác giữa client lên hệ thống HDFS.

Hình 1-4: Quá trình tạo và ghi dữ liệu lên file trên HDFS

Đầu tiên, client sẽ gửi yêu cầu đến NameNode tạo một file entry lên File
System Namespace. 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. Client sẽ chia file cần gì ra thành các block, và với mỗi
block client sẽ đóng gói thành một packet. 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).
Client gửi packet cho DataNode thứ nhất, DataNode thứ nhất sau khi nhận
đƣợc packet 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 packet 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 packet 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 data pile.


14

Sau khi DataNode cuối cùng nhận thành đƣợc packet, nó sẽ gửi lại cho
DataNode thứ hai một gói xác nhận rằng đã lƣu thành công. Và gói thứ hai lại gửi
gói xác nhận tình trạng thành công của 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 data pile.
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ý.
Cũng giống nhƣ trong quá trình đọc, client sẽ trực tiếp ghi dữ liệu lên các
DataNode mà không cần phải thông qua NameNode. Một đặc điểm nổi trội nữa là
khi client ghi một block với chỉ số replication là n, tức nó cần ghi block lên n
DataNode, nhờ cơ chế luân chuyển block dữ liệu qua ống dẫn (pipe) nên lƣu lƣợng
dữ liệu cần write từ client sẽ giảm đi n lần, phân đều ra các DataNode trên cluter.

1.2.2.8 Tổ chức dữ liệu
Hệ thống file phân tán Hadoop là hệ thống file dựa trên cây phân cấp truyền
thống giống nhƣ UNIX. Ngƣời dùng có thể thêm, đổi tên, xóa file hoặc thƣ mục
trong hệ thống. Thƣ mục gốc của Hadoop đƣợc kí hiệu bởi “/”, các thƣ mục con và

file có thể đƣợc tạo ra bên trong thƣ mục gốc[3].
Dữ liệu đƣợc tổ chức dƣới dạng nhiều khối dữ liệu.Kích thƣớc mặc định của
một khối dữ liệu là 64MB. Khi một file dữ liệu đƣợc tạo ra trên HDFS, nó sẽ đƣợc
lƣu tạm ở bộ nhớ địa phƣơng cho đến khi nó đạt đủ kích thƣớc của một khối dữ
liệu, khi đó máy khách sẽ gửi yêu cầu đến NameNode, NameNode kiểm tra các
DataNode đang sẵn sàng và gửi lại thông tin về địa chỉ khối đích, mã của node tới


15

máy khách. Máy khách nhận đƣợc thông tin này sẽ đẩy dữ liệu từ bộ nhớ địa
phƣơng đến DataNode tƣơng ứng.
HDFS có thể đƣợc truy cập sử dụng các cách sau[3] :
 Java APIs.
 Hadoop command line APIs.
 C/C++ language wrapper APIs.
 WebDAV.
 DFSAdmin.
 RESTFul APIs for HDFS.

1.3 Giới thiệu MapReduce
1.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ể 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, 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.


16

Hình 1-5: Mô hình MapReduce của Google

MapReduce là một framework cho phép lập trình viên viết các chƣơng trình
xử lý lƣợng lớn dữ liệu một cách song song thông qua môi trƣờng phân tán.
MapReduce là mô hình lập trình dựa trên key – value, chƣơng trình sẽ đọc vào tập
key – value và trả về tập key – value mới sau khi xử lý[3].

1.3.2 Kiến trúc của MapReduce
1.3.2.1 Kiến trúc các thành phần (JobTracker, TaskTracker)

Hình 1-6: Kiến trúc các thành phần


×