Tải bản đầy đủ (.docx) (55 trang)

Đề xuất cải tiến thuật toán k phần tử gần nhất trong khai phá dữ liệu lớn với mô hình 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 (898.27 KB, 55 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC QUY NHƠN

NGUYỄN QUANG QUYỀN

ĐỀ XUẤT CẢI TIẾN THUẬT TOÁN K PHẦN TỬ
GẦN NHẤT TRONG KHAI PHÁ DỮ LIỆU LỚN VỚI
MƠ HÌNH MAPREDUCE
Chun ngành:

Khoa học máy tính

Mã ngành: 8480101

Ngƣời hƣớng dẫn: TS. HỒ VĂN LÂM


LỜI CAM ĐOAN
Tôi xin cam đoan: Luận văn này là cơng trình nghiên cứu thực sự của
cá nhân, được thực hiện dưới sự hướng dẫn khoa học của TS. Hồ Văn Lâm.
Các số liệu, kết luận nghiên cứu được trình bày trong luận văn này
trung thực và chưa từng được cơng bố dưới bất cứ hình thức nào.
Tơi xin chịu trách nhiệm về nghiên cứu của mình.


LỜI CẢM ƠN
Tôi xin chân thành cảm ơn sự hướng dẫn chỉ dạy và giúp đỡ tận tình
của Thầy Cơ giảng dạy Sau Đại Học – Trường Đại Học Quy Nhơn.
Đặc biệt, tôi xin cảm ơn thầy Hồ Văn Lâm, giảng viên khoa Công Nghệ
Thông Tin, Trường Đại Học Quy Nhơn đã tận tình hướng dẫn truyền đạt kiến
thức và kinh nghiệm q báu giúp tơi có đầy đủ kiến thức hồn thành luận


văn này.
Và tơi xin cảm ơn bạn bè, những người thân trong gia đình đã tin
tưởng, động viên tơi trong q trình học tập và nghiên cứu đề tài này.
Mặc dù đã cố gắng trong việc thực hiện luận văn, song đề tài này không
thể tránh khỏi những thiếu sót và chưa hồn chỉnh. Tối rất mong nhận được ý
kiến đóng góp của Thầy, Cơ và các bạn để đề tài được hoàn thiện hơn.
Một lần nữa, tôi xin chân thành cảm ơn!
Học viên
Nguyễn Quang Quyền


1

MỞ ĐẦU
1.

Tính cấp thiết của đề tài
Thời đại của cuộc cách mạng công nghiệp thứ tư, với sự phát triển của

công nghệ thông tin thông tin là sự gia tăng bùng nổ của dữ liệu từ mức độ
terabytes đến mức độ petabytes. Chúng ta hoàn toàn bị tràn ngập trong dữ
liệu, các dữ liệu rất quan trọng bị bỏ thừa và khơng dược tận dụng hết. Do đó
nhu cầu khai phá, phân tích dữ liệu để tìm kiếm thơng tin từ nguồn tài nguyên
quý giá này là điều cấp thiết.
Bài toán phân loại dữ liệu là một trong những bài tốn thường gặp trong
khai phá dữ liệu hiện nay. Có rất nhiều cách tiếp cận và giải thuật được đưa ra
để giải quyết bài toán phân loại. Một trong số đó là thuật tốn K phần tử gần
nhất (K-Nearest Neighbors).
K phần tử gần nhất là phương pháp phân loại được biết đến nhiều nhất,
bởi sự hiệu quả và tính đơn giản mà không cần quá nhiều sự điều chỉnh. Xây

dựng mơ hình thường rất nhanh và dễ sử dụng, tuy nhiên nhu cầu tính tốn
cao và tốn bộ nhớ làm cho K phần tử gần nhất cổ điển không khả thi cho việc
khai phá dữ liệu lớn ngày nay. Để khắc phục những hạn chế, một số phương
pháp kết hợp mơi trường phân tán được đề xuất.
2.

Mục đích nghiên cứu
Trong luận văn này, tác giả sẽ tập trung vào việc đưa ra một số giải pháp

cải tiến thuật toán K phần tử gần nhất trong khai phá dữ liệu lớn với mơ hình
Mapreduce.
3.

Đối tƣợng nghiên cứu
 Thuật tốn K phần tử gần nhất.
 Mơ hình xử lý Mapreduce.
 Thuật tốn sắp xếp thứ cấp.


2
4.

Phạm vi nghiên cứu
Áp dụng thuật toán K phân tử gần nhất cải tiến trong khai phá dữ liệu

với mô hình Mapreduce.
5.

Phƣơng pháp nghiên cứu
Từ những kiến thức về học máy, dữ liệu lớn, tốn và lập trình áp dụng


nghiên cứu, cài đặt thuật toán K phần tử gần nhất cổ điển sau đó áp dụng
phương pháp cải tiến xử lý song song và thu gọn khơng gian tìm kiếm
nghiệm, sau đó so sánh hai mơ hình và đánh giá.


3

CHƢƠNG 1: TỔNG QUAN KHAI PHÁ DỮ LIỆU LỚN
1.1 Big Data
Cùng với sự tiến bộ của công nghệ, sự ra đời của các kênh truyền thông
mới như mạng xã hội và các thiết bị công nghệ mới tiên tiến hơn đã đặt ra
thách thức cho các nền công nghiệp khác nhau phải tìm những cách khác để
xử lý dữ liệu.
Từ khi hình thành cho tới đến hết năm 2003, tồn thế giới chỉ có khoảng
5 tỷ Gigabyte dữ liệu. Cũng một lượng dữ liệu như vậy được tạo ra chỉ trong
2 ngày trong năm 2011. Đến năm 2013, khối lượng dữ liệu này được tạo ra cứ
sau mỗi 10 phút. Do đó, khơng có gì ngạc nhiên khi mà 90% dữ liệu của toàn
thế giới hiện nay được tạo ra trong một vài năm qua [1].
Tất cả những dữ liệu này cực kỳ hữu ích nhưng khơng được tận dụng
trước khi thuật ngữ “Big Data” ra đời. Dữ liệu lớn hay Big Data là một thuật
ngữ cho việc xử lý một tập hợp dữ liệu rất lớn và phức tạp mà các ứng dụng
xử lý dữ liệu truyền thống không xử lý được trong thời gian hợp lý. Những
tập dữ liệu này bao gồm dữ liệu có cấu trúc, khơng có cấu trúc và bán cấu
trúc. Hay cụ thể hơn Big Data gồm nhiều thách thức như: phân tích, nắm bắt,
quản lý, tìm kiếm, chuyển giao, bảo mật thơng tin.
Big Data đƣợc mô tả bởi những đặc trƣng sau:
Volume (Tổng dung lượng lưu trữ)
Nói về số lượng dữ liệu được tạo và lưu trữ. Kích thước của dữ liệu sẽ
được đánh giá là có giá trị và có tiềm năng hay khơng, và để xem xét liệu nó

có thể được coi là dữ liệu lớn hay không.
Variety (Đa dạng kiểu dữ liệu)
Khái niệm này nói về kiểu dữ liệu và tính chất của dữ liệu. Điều này
giúp những người phân tích nó sử dụng hiệu quả thơng tin chi tiết về kết quả.
Chúng được tập hợp từ những văn bản, hình ảnh, âm thanh, video.


4
Velocity (Khả năng truyền thông tin tốc độ cao)
Tốc độ của một dữ liệu được tạo ra và rồi được chuyển từ nơi này sang
nơi khác hiện tại đã đạt đến mức kinh ngạc. Như việc mọi người có thể chat
với nhau trên Facebook với tốc độ nhanh chóng trong môi trường mạng hiện
nay. Big Data cho phép chúng ta có thể phân tích các thơng số của một dữ liệu
được tạo ra mà không cần phải lưu chúng xuống cở sở dữ liệu.
Variability (Độ chính xác)
Vì đa dạng về các kiểu dữ liệu, nên sự không thống nhất của tập dữ liệu
có thể cản trở các quy trình để xử lý và quản lý nó. Do đó, độ chính xác của
dữ liệu này có thể đảm bảo giúp cho việc giảm bớt sự sai lệch đáng tiếc có thể
xảy ra.
Value (Mức độ giá trị của thông tin)
Chất lượng dữ liệu của những dữ liệu lấy được có thể thay đổi rất nhiều,
điều này sẽ ảnh hưởng đến việc phân tích chính xác. Có thể xem đây là tính
chất cũng là khái niệm mà những doanh nghiệp hay nhà nghiên cứu muốn sử
dụng và khai thác Big Data phải nắm giữ và am hiểu nó đầu tiên.
Những nguồn chính tạo ra Big Data [2]:
Hộp đen dữ liệu: đây là dữ liệu được tạo ra bởi máy bay, bao gồm máy
bay phản lực và trực thăng. Hộp đen dữ liệu này bao gồm thơng tin tạo ra bởi
giọng nói của phi hành đồn, các bản thu âm và thơng tin về chuyến bay.
Dữ liệu từ các kênh truyền thông xã hội: Đây là dữ liệu được tạo ra và
phát triển bởi như các trang web truyền thông xã hội như Twitter, Facebook,

Instagram, Pinterest và Google.
Dữ liệu giao dịch chứng khoán: Đây là số liệu từ thị trường chứng khoán
đối với quyết định mua và bán cổ phiếu được thực hiện bởi khách hàng.
Dữ liệu điện lực: đây là dữ liệu tạo ra bởi điện lực. Nó bao gồm các
thơng tin cụ thể từ các điểm giao nhau của các nút thông tin sử dụng.


5
Dữ liệu giao thông: dữ liệu này bao gồm sức chứa và các mẫu phương
tiện giao thông, độ sẵn sàng và khoảng cách đã đi được của từng phương tiện
giao thơng.
Dữ liệu các thiết bị tìm kiếm: đây là dữ liệu được tạo ra từ các cơng cụ
tìm kiếm và đây cũng là nguồn dữ liệu lớn nhất của Big Data. Cơng cụ tìm
kiếm có cơ sở dữ liệu cực kỳ rộng lớn, nơi họ có thể tìm thấy dữ liệu họ cần.
Mục đích sử dụng Big Data
Điều thực sự mang lại giá trị từ tất cả các tổ chức dữ liệu lớn đang thu
thập là phân tích dữ liệu (Analytics). Nếu khơng phân tích, nó chỉ là một bộ
dữ liệu với việc sử dụng hạn chế trong kinh doanh.
Nhìn chung, có bốn lợi ích mà Big Data có thể mang lại: cắt giảm chi
phí, giảm thời gian, tăng thời gian phát triển và tối ưu hóa sản phẩm, đồng
thời hỗ trợ con người đưa ra những quyết định đúng và hợp lý hơn. Big Data
có thể giúp các tổ chức, chính phủ dự đốn được tỉ lệ thất nghiệp, xu hướng
nghề nghiệp của tương lai để đầu tư cho những hạng mục đó, hoặc cắt giảm
chi tiêu, kích thích tăng trưởng kinh tế, v/v... thậm chí là ra phương án phịng
ngừa trước một dịch bệnh nào đó.
Một số ví dụ về sự phổ biến của Big Data hiện nay
Phân tích hành vi khách hàng: Đây là trường hợp sử dụng Big Data phổ
biến và rộng nhất hiện nay. Big Data trong trường hợp này được sử dụng
nhằm mục đích hiểu rõ hơn về khách hàng của họ từ hành vi, sở thích. Qua
đó, các cơng ty sẽ dễ dàng để mở rộng dữ liệu từ truyền thống đến dữ liệu xã

hội và có một phân tích hồn thiện về khách hàng của họ. Mục tiêu của sử
dụng Big Data trong trường hợp này là tạo ra các mơ hình tiên đốn khách
hàng hiệu quả nhất.
Hiểu và tối ưu hóa quy trình kinh doanh: Trong các quy trình kinh doanh
hiện nay, việc hiểu và tối ưu hóa là một nhu cầu cần thiết. Các nhà kinh doanh


6
có thể đầu tư và tối ưu hóa cổ phiếu dựa trên các dự đoán được tạo ra từ nguồn
dữ liệu truyền thơng xã hội và xu hướng tìm kiếm trên các website phổ biến.

Tối ưu hóa hiệu suất của mỗi cá nhân và hiệu suất của cả q trình:
Khơng chỉ những cơng ty hay doanh nghiệp, chính phủ mà ngày nay Big Data
còn được sử dụng cho mỗi cá nhân. Mỗi người đều có thể hưởng lợi từ dữ liệu
được tạo ra từ thiết bị đang có. Ví dụ như một chiếc đồng hồ thơng minh hoặc
một vịng đeo tay thơng minh có thể cho người dùng biết được lượng tiêu thụ
calo, nhịp tim và các cảnh báo nguy hiểm,…
Cải thiện sức khỏe và sức khỏe cộng đồng đối với các tổ chức Y Tế hiện
nay: Đây là lĩnh vực sử dụng nguồn Big Data lớn và mang lại nhiều hiệu quả
nhất. Sự phân tích tính tốn nhanh chóng, chính xác mang lại các hiệu quả
cao trong y tế hiện nay như việc giải mã các chuỗi DNA cho phép các bác sỹ
được ra phương pháp chữa trị mới và tiên tiến hơn.
Cải thiện hiệu suất trong luyện tập thể thao: Công cụ IBM SlamTracker
là một dại diện tiêu biểu của nguồn Big Data được sử dụng trong luyện tập thể
thao nhằm nâng cao cải thiện hiệu quả. Công cụ này được sử dụng để phân
tích video và theo dõi hiệu suất của từng thành viên trong một đội thể thao.
Cải thiện Khoa học và Nghiên cứu: Big Data có tác dụng nâng cao
chuyển đổi những khả năng mới của các nghiên cứu, khoa học. Ví dụ cụ thể
về phịng thí nghiệm Large Hadron Collider đã sử dụng Big Data để nghiên
cứu ra máy gia tốc hạt lớn nhất và mạnh nhất.

Tối ưu hóa hiệu suất máy móc và thiết bị: Sự trợ giúp và phân tích từ Big
Data đã giúp cho các máy móc, thiết bị được nâng cấp lên hiện đại hơn và
thơng minh hơn.
Ví dụ cụ thể là công cụ GPS được sử dụng cho máy tính và điện thoại
giúp người tham gia giao thơng đi đúng và an tồn mà khơng cần sự trợ giúp
của con người.


7
Cải thiện an ninh và thực thi pháp luật: Trong trường hợp cải thiện an
ninh và thực thi pháp luật Big Data được sử dụng nhiều và phổ biến. Nhất là
trong việc cải thiện bảo mật và thực thi pháp luật.
Cải thiện và tối ưu hóa các thành phố và quốc gia: Đây là một trường
hợp sử dụng Big Data ở nhiều khía cạnh khác nhau. Ví dụ từ nguồn dữ liệu
lớn, nó cho phép các thành phố được tối ưu luồng lưu lượng lưu thông dựa
vào các thông tin giao thông của Big Data.
Sự phát triển của Big Data
Nhờ giải pháp Big Data, năm 2013, Amazon đạt doanh thu tới 74 tỷ USD,
IBM đạt hơn 16 tỷ USD. Big Data có nhu cầu đang tăng trưởng lớn đến nỗi
Software AG, Oracle, IBM, Microsoft, SAP, EMC, HP và Dell đã chi hơn 15 tỉ
USD cho các công ty chuyên về quản lí và phân tích dữ liệu. Năm 2010, ngành
cơng nghiệp Big Data có giá trị hơn 100 tỉ USD và đang tăng nhanh với tốc độ
10% mỗi năm, nhanh gấp đơi so với tổng ngành phần mềm nói chung [3].

Với hơn 30 triệu người dùng Internet và hơn 15 triệu người dùng Internet
trên điện thoại di động, Việt Nam đang là đích ngắm của nhiều nhà cung cấp
giải pháp Big Data như Microsoft, IBM, Oracle… Big Data và các cơng nghệ
phân tích có khả năng làm thay đổi hồn toàn bộ mặt của các ngành kinh tế và
nghề nghiệp. Vì vậy những mơ hình kinh doanh mới dựa trên Big Data đang
được hình thành để giúp các tổ chức, doanh nghiệp tận dụng dữ liệu. “Đây

cũng là xu thế tất yếu trong tương lai không xa với doanh nghiệp Việt Nam",
ông Tan Jee Toon, Tổng Giám đốc IBM Việt Nam dự đoán [7].
1.2 Data Mining
1.2.1 Khái niệm
Khai phá dữ liệu là một khái niệm ra đời vào những năm cuối của thập
kỷ 80. Nó bao hàm một loạt các kỹ thuật nhằm phát hiện ra các thơng tin có


8
giá trị tiềm ẩn trong các tập dữ liệu lớn (các kho dữ liệu). Về bản chất, khai
phá dữ liệu liên quan đến việc phân tích các dữ liệu và sử dụng các kỹ thuật
để tìm ra các mẫu trong các bộ dữ liệu lớn liên quan đến các phương pháp tại
giao điểm của máy học, thống kê và các hệ thống cơ sở dữ liệu.
Ở một mức độ trừu tượng nhất định có thể định nghĩa: Khai phá dữ liệu
(Data Mining) là một quá trình tìm kiếm, phát hiện các tri thức mới, tiềm ẩn,
hữu dụng trong cơ sở dữ liệu lớn.
Khai phá tri thức (KDD) là mục tiêu chính của khai phá dữ liệu, do vậy
hai khái niệm đó được xem như hai lĩnh vực tương đương nhau. Nhưng, nếu
phân chia một cách tách bạch thì khai phá dữ liệu là một bước chính trong
q trình KDD.
1.2.2 Q trình khai phá tri thức trong cơ sở dữ liệu
Khai phá tri thức trong CSDL (Knowledge Discovery in Databases KDD) là lĩnh vực liên quan đến các ngành như: thống kê, học máy, CSDL,
thuật tốn, trực quan hóa dữ liệu, tính tốn song song và hiệu năng cao,…
Q trình KDD có thể phân thành các giai đoạn sau:

Hình 1.1: Khai phá dữ liệu là một bƣớc trong quá trình khai phá tri thức [8]


9
1.2.3 Các kỹ thuật tiếp cận trong khai phá dữ liệu

Nếu đứng trên quan điểm của học máy (Machine Learning), thì các kỹ
thuật trong Data Mining, bao gồm: Học có giám sát (Supervised learning),
Học khơng có giám sát (Unsupervised learning), Học nửa giám sát (Semi Supervised learning).
Nếu căn cứ vào lớp các bài tốn cần giải quyết, thì Data Mining bao gồm
các kỹ thuật sau: Phân lớp và dự đoán (Classification & prediction), Luật kết
hợp (Association rules), Khai thác mẫu tuần tự (Sequential/temporal patterns),
Phân cụm (Clustering/segmentation).
1.2.4 Kiến trúc của hệ thống khai phá dữ liệu
Như đã trình bày ở trên, khai phá dữ liệu là một giai đoạn trong quá trình
phát hiện tri thức từ số lượng lớn dữ liệu lưu trữ trong các cơ sở dữ liệu, kho
dữ liệu hoặc các nơi lưu trữ khác.

Hình 1.2: Kiến trúc của hệ thống khai phá dữ liệu [5]


10
1.2.5 Ứng dụng của khai phá dữ liệu
Khai phá dữ liệu thu hút được rất nhiều sự quan tâm của các nhà nghiên
cứu nhờ vào tính ứng dụng thực tiễn của nó. Khai phá dữ liệu có nhiều ứng
dụng trong thực tế. Một trong số ứng dụng điển hình như: phân tích dữ liệu và
hỗ trợ ra quyết định, tài chính và thị trường chứng khốn, điều trị và chăm sóc
y tế, text mining & web mining, các lĩnh vực khoa học, mạng viễn thông.
1.3 Apache Hadoop
Apache Hadoop là một framework dùng để chạy những ứng dụng trên
một cụm máy tính lớn được xây dựng trên những phần cứng thơng thường.
Hadoop hiện thực mơ hình Map/Reduce, đây là mơ hình mà ứng dụng sẽ được
chia nhỏ ra thành nhiều phân đoạn khác nhau, và các phần này sẽ được chạy
song song trên nhiều node khác nhau.
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 gồm hai thành phần cốt lõi:
 Hadoop Distributed File System: hệ thống lưu trữ.
 MapReduce: xử lý phân tán.
1.3.1 HDFS là gì?
HDFS là viết tắt của Hadoop Distributed File System và nó là một hệ
thống lưu trữ chính được dùng bởi Hadoop. Nó cung cấp truy cập hiệu suất
cao đến dữ liệu trên các cụm. Nó thường được triển khai trên các phần cứng
chi phí thấp. Các máy chủ chi phí thấp này rất dễ xảy ra lỗi phần cứng. Vì lý
do này mà HDFS được xây dựng để có khả năng chịu lỗi cao. Tốc độ truyền
dữ liệu giữa các nodes trong HDFS là rất cao, dẫn đến giảm thiểu nguy cơ lỗi.


11
Kiến trúc của HDFS
Một HDFS cluster luôn gồm một NameNode. NameNode này là một
master server và nó quản lý hệ thống tập tin cũng như điều chỉnh truy cập đến
các tập tin khác nhau. Bổ sung cho NameNode có nhiều DataNodes. Ln có
một DataNode cho mỗi máy chủ dữ liệu. Trong HDFS, một tập tin lớn được
chia thành một hoặc nhiều khối và các khối này được lưu trong một tập các
DataNodes.
Tác vụ chính của NameNode là mở, đóng và đổi tên các tập tin, và thư
mục và điều chỉnh truy cập đến hệ thống tập tin, trong khi tác vụ chính của
DataNode là đọc và ghi vào hệ thống tập tin. DataNode cũng làm nhiệm vụ
tạo, xóa, hoặc nhân rộng dữ liệu dựa trên chỉ dẫn từ NameNode.
Trong thực tế, NameNode và DataNode là phần mềm được thiết kế để
chạy trên máy chủ, được viết bằng Java.
Ví dụ minh họa về kiến trúc HDFS

Hình 1.3: Kiến trúc HDFS



12
Ứng dụng client hoặc HDFS client kết nối đến NameNode cũng như
DataNode. Client app truy xuất đến DataNode được quy định bởi NameNode.
NameNode cho phép Client app kết nối đến DataNode bằng cách trực tiếp.
Một tập tin dữ liệu lớn được chia thành nhiều khối dữ liệu (giả sử các đoạn dữ
liệu là A, B, C, và D). Client app sau đó sẽ ghi các khối dữ liệu trực tiếp lên
DataNode. Client app không ghi trực tiếp lên tất cả các node. Nó chỉ ghi lên
bất kỳ một trong những node và NameNode sẽ quyết định các DataNode nào
khác nó sẽ nhân rộng dữ liệu. Trong ví dụ, Client app ghi trực tiếp lên
DataNode 1 và 3. Tuy nhiên, các khối dữ liệu được tự động nhân rộng đến các
nodes khác. Tất cả thông tin như trong DataNode mà khối dữ liệu được đặt
được ghi trở về NameNode.
1.3.2 Mapreduce
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 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ý 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ó 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 hệ thố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 hệ thống khác nhau thì chúng được gọi là
một lưới (Grid).


13


Hình 1.4: Sơ đồ tổng quan hoạt động Mapreduce

MapReduce được chia thành hàm là Map và Reduce. Những hàm này
được định nghĩa bởi người dùng và là hai giai đoạn liên tiếp trong quá trình
xử lý dữ liệu.


Map nhận input là tập các cặp khóa/giá trị và output là tập các cặp

khóa/giá trị trung gian và ghi xuống đĩa cứng và thông báo cho Reduce nhận
dữ liệu đọc.


Reduce sẽ trộn và sắp xếp dữ liệu trung gian. Sau đó thu thập, tổng

hợp ra kết quả.
Nền tảng MapReduce có 5 bƣớc khác nhau:


Chuẩn bị dữ liệu đầu vào cho Map()



Thực thi mã Map() được cung cấp bởi người dùng



Trộn dữ liệu xuất của Map vào Reduce Processor




Thực thi mã Reduce() được cung cấp bởi người dùng



Tạo dữ liệu xuất cuối cùng


14
Cơ chế hoạt động của quá trình Mapreduce

Hình 1.5: Sơ đồ hoạt động của q trình Mapreduce

(1) Thơng qua thư viện MapReduce ứng dụng với từng ngơn ngữ,
bước
này có nhiệm vụ phân mảnh tệp dữ liệu đầu vào. Dữ liệu vào được chia thành
các phần nhỏ 16 megabytes đến 64 megabytes (MB). Sau đó khởi động việc
sao chép chương trình trên các clusters.
(2)

Hệ thống gồm có: master và worker. Trong đó máy master làm

nhiệm vụ điều phối sự hoạt động của quá trình thực hiện MapReduce trên các
máy worker, các máy worker làm nhiệm vụ thực hiện Map và Reduce với dữ
liệu mà nó nhận được. Bằng cách đặt trạng thái nghỉ máy workers và sau đó
gắn cho từng máy task map hoặc reduce.
(3)

Máy master sẽ thực hiện phân phối các tác vụ Map và Reduce vào


các worker đang rảnh rỗi. Các tác vụ này được master phân phối cho các máy
tính dựa trên vị trí của dữ liệu liên quan trong hệ thống. Máy worker khi nhận


15
được tác vụ Map sẽ đọc dữ liệu mà nó nhận từ phân vùng dữ liệu đã gán cho
nó và thực hiện hàm Map. Kết quả đầu ra là các cặp (keyI,valueI) trung gian.
Các cặp này được lưu tạm trên bộ nhớ đệm của các máy.
(4)

Sau khi thực hiện xong công việc Map, các máy worker làm nhiệm

vụ chia các giá trị trung gian thành R vùng (tương ứng với R tác vụ Reduce)
lưu xuống đĩa và thông báo kết quả, vị trí lưu cho máy master.
(5)

Master sẽ gán giá trị trung gian và vị trí của các dữ liệu đó cho các

máy thực hiện cơng việc Reduce. Các máy reducer làm nhiệm vụ xử lý sắp
xếp các key, thực hiện hàm Reduce và đưa ra kết quả cuối cùng.
(6)

Master sẽ kích hoạt thơng báo cho chương trình người dùng q trình

MapReduce đã hồn tất, kết quả đầu ra được lưu trữ trên R tập tin.
Ƣu điểm của Mapreduce:


Xử lý tốt bài tốn về lượng dữ liệu lớn có các tác vụ phân tích và tính


tố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 phải quan tâm đến sự trao đổi dữ liệu giữa các
clusters với nhau vì chúng hoạt động một cách độc lập, không phải theo dõi
xử lý các tác vụ, xử lý lỗi.


Có thể thực hiên mơ hình Mapreduce trên nhiều ngôn ngữ (Java, C++,

Python, Perl, Ruby, C) với các thư viện tương ứng.
1.4 Apache Spark
1.4.1 Giới thiệu
Apache Spark là một framework mã nguồn mở tính tốn cụm, được phát
triển sơ khởi vào năm 2009 bởi AMPLab. Sau này, Spark đã được trao cho
Apache Software Foundation vào năm 2013 và được phát triển cho đến nay[9].

Spark cho phép xây dựng và phân tích nhanh các mơ hình dự đốn. Hơn
nữa, nó cịn cung cấp khả năng truy xuất tồn bộ dữ liệu cùng lúc, nhờ vậy ta
không cần phải lấy mẫu dữ liệu – địi hỏi bởi các ngơn ngữ lập trình như R.


16
Thêm vào đó, Spark cịn cung cấp tính năng streaming, được dùng để xây
dựng các mơ hình real-time bằng cách nạp tồn bộ dữ liệu vào bộ nhớ.
Khi có một tác vụ nào đó q lớn mà khơng thể xử lý trên một laptop hay
một server, Spark cho phép ta phân chia tác vụ này thành những phần dễ quản lý

hơn. Sau đó, Spark sẽ chạy các tác vụ này trong bộ nhớ, trên các cluster của
nhiều server khác nhau để khai thác tốc độ truy xuất nhanh từ RAM. Spark sử
dụng API Resilient Distributed Dataset (RDD) để xử lý dữ liệu.

Spark khơng có hệ thống file của riêng mình, nó sử dụng hệ thống file
khác như: HDFS, Cassandra, S3,... Spark hỗ trợ nhiều kiểu định dạng file
khác nhau (text, csv, json…), đồng thời nó hồn tồn khơng phụ thuộc vào bất
cứ một hệ thống file nào.
Thành phần sử dụng Apache Spark
Spark nhận được nhiều sự hưởng ứng từ cộng đồng Big data trên thế giới do
cung cấp khả năng tính tốn nhanh và nhiều thư viện đi kèm hữu ích như Spark
SQL (với kiểu dữ liệu DataFrames), Spark Streaming, MLlib (machine learning:
classification, regression, clustering, collaborative filtering, và dimensionality
reduction) và GraphX (biểu diễn đồ thị nhờ kết qủa tính tốn song song).

Hình 1.6: Các thành phần sử dụng Apache Spark [6]


17
Thành phần trung gian của Spark là Spark Core: cung cấp những chức
năng cơ bản nhất của Spark như lập lịch cho các tác vụ, quản lý bộ nhớ, fault
recovery, tương tác với các hệ thống lưu trữ…Đặc biệt, Spark Core cung cấp
API để định nghĩa RDD (Resilient Distributed DataSet) là tập hợp của các
item được phân tán trên các node của cluster và có thể được xử lý song song.
Spark có thể chạy trên nhiều loại Cluster Managers như Hadoop YARN,
Apache Mesos hoặc trên chính cluster manager được cung cấp bởi Spark
được gọi là Standalone Scheduler.


Spark SQL cho phép truy vấn dữ liệu cấu trúc qua các câu lệnh SQL. Spark


SQL có thể thao tác với nhiều nguồn dữ liệu như Hive tables, Parquet, và JSON.

 Spark Streaming cung cấp API để dễ dàng xử lý dữ liệu stream,


MLlib Cung cấp rất nhiều thuật toán của học máy như: classification,

regression, clustering, collaborative filtering…
 GraphX là thư viện để xử lý đồ thị.
1.4.2 Kiến trúc Spark
Spark có kiến trúc gồm một node master và nhiều node worker dưới sự
điều khiển của master. Spark Driver sẽ liên hệ với master node để điều phối
các worker node nơi có chứa các excutor đang thực thi job.

Hình 1.7: Kiến trúc Apache Spark [6]


18
Master node chứa chương trình điều khiển (Spark Standalone /YARN
/MESSO), các worker node, chương trình lập lịch sẽ chịu trách nhiệm lập lịch
cho các tác vụ và yêu cầu các worker node thực hiện. Mỗi worker bao gồm
một hoặc một số Excutor thực hiện việc lưu trữ, đọc ghi khi xử lý dữ liệu.
Mỗi excutor chịu trách nhiệm xử lý các task nhỏ riêng biệt bằng các luồng
độc lập.
1.4.3 Quản lý bộ nhớ của Apache Spark
Xét về khía cạnh memory, Spark giải quyết các vấn đề vấn đề xung
quanh định nghĩa Resilient Distributed Datasets (RDDs). RDDs hỗ trợ hai
kiểu thao tác thao tác: transformations và action... Thao tác chuyển đổi
(tranformation) tạo ra Dataset từ dữ liệu có sẵn. Thao tác actions trả về giá trị

cho chương trình điều khiển (driver program) sau khi thực hiện tính tốn trên
Dataset.
Spark thực hiện đưa các thao tác RDD chuyển đổi vào DAG (Directed
Acyclic Graph) và bắt đầu thực hiện. Khi một action được gọi trên RDD,
Spark sẽ tạo DAG và chuyển cho DAG scheduler. DAG scheduler chia các
thao tác thành các nhóm (stage) khác nhau của các task. Mỗi Stage bao gồm
các task dựa trên phân vùng của dữ liệu đầu vào có thể liên lạc với nhau và có
thể thực hiện một cách độc lập trên một máy worker. DAG scheduler sắp xếp
các thao tác phù hợp với quá trình thực hiện theo thời gian sao cho tối ưu
nhất.
Ví dụ: các thao tác map sẽ được đưa vào cùng một stage do không xảy ra
shuffle dữ liệu giữa các stage. Kết quả cuối cùng của DAG scheduler là một
tập các stage. Các Stages được chuyển cho Task Scheduler. Task Scheduler sẽ
chạy các task thông qua cluster manager (Spark Standalone/Yarn/Mesos).
Task scheduler không biết về sự phụ thuộc của các stages. Nó chỉ chịu trách
nhiệm thực hiện sắp xếp các task một cách tối ưu nhất.


19

Hình 1.8: Thành phần của Apache Spark [6]

Mỗi Worker bao gồm một hoặc nhiều Excutor. Các excutor chịu trách
nhiệm thực hiện các task trên các luồng riêng biệt. Việc chia nhỏ các task giúp
đem lại hiệu năng cao hơn, giảm thiểu ảnh hưởng của dữ liệu khơng đối xứng
(kích thước các file không đồng đều).
1.4.4 Tại sao nên sử dụng Apache Spark
1.4.4.1 Những tính năng nổi bật
“Spark as a Service”: Giao diện REST để quản lí (submit, start, stop,
xem trạng thái) spark job, spark context.

Tăng tốc, giảm độ trễ thực thi job xuống mức chỉ tính bằng giây bằng
cách tạo sẵn spark context cho các job dùng chung.
Stop job đang chạy bằng cách stop spark context.
Bỏ bước upload gói jar lúc start job làm cho job được start nhanh hơn.
Cung cấp hai cơ chế chạy job đồng bộ và bất đồng bộ.


20
Cho phép cache RDD theo tên, tăng tính chia sẻ và sử dụng lại RDD
giữa các job.
Hỗ trợ viết spark job bằng cú pháp SQL.
Dễ dàng tích hợp với các công cụ báo cáo như: Business Intelligence,
Analytics, Data Integration Tools.
Nhờ triển khai Coordination Framework Apache ZooKeeper – cung cấp
giải pháp quản lý, điều phối giao tiếp giữa các hệ thống phân tán (distributed
systems) – mà Spark Server được đảm bảo tính sẵn sàng (high availability)
theo mơ hình active – active (load-balancing).
1.4.4.2 Những điểm sáng giá ngồi tốc độ tính tốn nhanh của Spark
Sự đơn giản: Một trong những chỉ trích thường gặp ở Hadoop đó là sự
phức tạp trong qúa trình phát triển, mặc dù đây là một trong những phương
pháp tính tốn đơn giản và hiệu quả giúp tăng tốc độ xử lý của hệ thống. Thay
vì địi hỏi người dùng phải hiểu rạch ròi về MapReduce và lập trình Java,
Spark sinh ra để giúp mọi người tiếp cận với cơng nghệ tính tốn song song
dễ dàng hơn rất nhiều. Người dùng chỉ cần một vài kiến thức cơ bản về
database cộng với lập trình Python hay Scala là có thể sử dụng được.
Độc lập với các nhà cung cấp dịch vụ Hadoop: Hầu hết các nhà cung cấp
dịch vụ Hadoop đều hỗ trợ Spark. Điều này có nghĩa Spark không phụ thuộc
vào các nhà cung cấp này. Nếu bạn muốn thay đổi nhà cung cấp dịch vụ, ta
chỉ cần đem hệ thống Spark qua nhà cung cấp mới mà không lo ngại việc mất
mát thông tin.

Một trong những lý do khiến Spark chạy nhanh hơn Hadoop MapReduce
đó là ở mỗi tác vụ dữ liệu được nạp lên bộ nhớ và xử lý ở đó, những tác vụ
sau có thể sử dụng dữ liệu nằm trên bộ nhớ thay vì phải đọc ghi liên tục vào
HDFS như Hadoop MapReduce.


21

Hình 1.9: Sự khác nhau giữa Hadoop và Spark

Theo một so sánh, năm 2013 Hadoop sử dụng cluster bao gồm 2100 máy
và mất 72 phút để sắp xếp 100 TB dữ liệu, trong khi Spark cần số lượng máy
bằng 1/10 nhưng sắp xếp chỉ mất 23 phút. Trong nhiều trường hợp Spark có
thể chạy nhanh hơn từ 30-50 lần so với Hadoop MapReduce.

Hình 1.10: So sánh Hadoop và Spark

1.4.4.3 Spark trong những năm gần đây
Để thấy được bức tranh toàn cảnh về Spark, hãy cùng xem một số thống
kê:


Trong các thư viện mà Spark cung cấp thì có 69% người dùng Spark

SQL, 62% sử dụng DataFrames, Spark Streaming và MLlib + GraphX là
58%.


22


Hình 1.11: Thành phần thƣ viện Spark

Lập trình viên có thể viết các ứng dụng Spark bằng nhiều ngôn ngữ khác
nhau. Năm 2014, 84% người dùng sử dụng Scala, trong khi Java và Python
cùng là 38% (Người dùng có thể sử dụng nhiều hơn 1 ngôn ngữ trong các ứng
dụng của mình). Đến năm 2015, Spark hỗ trợ thêm ngơn ngữ R, rất nhanh
chóng có tới 18% người dùng R, Python cũng tăng lên 58%.

Hình 1.12: Các ngơn ngữ Spark trong năm 2014 -2015

Năm 2015, Spark trở thành dự án mã nguồn mở sôi động nhất trong lĩnh
vực dữ liệu lớn khi thường xuyên được cập nhật bởi hơn 800 lập trình viên từ
200 cơng ty trên khắp thế giới.


×