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

Phân cụm dữ liệu dùng giải thuật ĐA KMEAN ++ trên Hadoop Mapreduce và Spark (tt)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 30 trang )

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 kỳ công trình nào khác.
Tp. Hồ Chí Minh, ngày 20 tháng 4 năm 2018
Học viên thực hiện luận văn

Nguyễn Anh Vinh


ii

MỤC LỤC
LỜI CAM ĐOAN ....................................................................................................... i
MỤC LỤC .................................................................................................................. ii
DANH SÁCH HÌNH VẼ .......................................................................................... iv
MỞ ĐẦU .....................................................................................................................1
1. Tính cấp thiết của đề tài .......................................................................................1
2. Tổng quan vấn đề nghiên cứu ..............................................................................1
3. Mục đích nghiên cứu ...........................................................................................2
4. Đối tượng và phạm vi nghiên cứu .......................................................................2
5. Phương pháp nghiên cứu .....................................................................................3
Chương 1 - TỔNG QUAN VỀ ĐỀ TÀI .....................................................................4
Chương 2 – CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ ..............................................6
2.1 Thuật toán K-Means ..........................................................................................6
2.1.1 Giới thiệu thuật toán K-Means ....................................................................6
2.1.2 Hạn chế và nhược điểm ...............................................................................6
2.2 Thuật toán Silhouette Index ...............................................................................7
2.2.1 Biểu thức toán học ..........................................................................................7


2.2.2 Độ phức tạp của thuật toán ..........................................................................7
2.3 Các công trình liên quan ....................................................................................7
2.4 Apache Hadoop..................................................................................................7
2.4.1 Kiến trúc Hadoop cluster .............................................................................8
2.4.2 Thành phần của Hadoop ..............................................................................8
2.5 Hadoop Distributed File System (HDFS) ..........................................................8
2.5.1 Kiến trúc HDFS ...........................................................................................8


iii

2.5.2 Đọc file từ HDFS ........................................................................................8
2.5.3 Ghi file xuống HDFS ..................................................................................8
2.6 MapReduce ........................................................................................................8
2.7 Apache Spark .....................................................................................................8
2.8 Kết luận chương 2 ..............................................................................................9
Chương 3 – PHƯƠNG PHÁP LUẬN.......................................................................10
3.1 Multiple K-means MapReduce (MKMeansMR) .............................................10
3.1.1 Đọc hình ảnh .............................................................................................11
3.1.2 Khởi tạo Scalable K-Means++ với MapReduce ......................................11
3.1.3 Phân cụm đa K-means ...............................................................................13
3.1.4 Xác định các cụm ......................................................................................14
3.2 Công cụ Spark trong Multiple Scalable K-means++ ......................................15
3.2.1 Xử lý hình ảnh Spark job ..........................................................................15
3.2.2 Xác định các cụm ......................................................................................17
3.3 Kết luận chương 3 ............................................................................................18
Chương 4 - THỰC NGHIỆM ...................................................................................19
4.1 Giai đoạn phân cụm .........................................................................................21
4.2 Giai đoạn đa xác định (Multiple Validation Phase) ........................................23
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ................................................................24

DANH MỤC TÀI LIỆU THAM KHẢO ..................................................................25


iv

DANH SÁCH HÌNH VẼ

Hình 3.1: Thí nghiệm MapReduce ........................................................................ 11
Hình 4.1: Block size và Replication ...................................................................... 19
Hình 4.2: Lịch sử ghi nhận quá trình thực hiện MapReduce (MR) ...................... 20
Hình 4.3: Stages for jobs ....................................................................................... 20
Hình 4.4: Executors ............................................................................................... 21
Hình 4.5: MapReduce Clustering Phase Speedup ................................................. 22
Hình 4.6: Spark Clustering Phase Speedup ........................................................... 22
Hình 4.7: MapReduce Validation Phase Speedup ................................................ 23
Hình 4.8: Spark Validation Phase Speedup .......................................................... 23


1

MỞ ĐẦU
1. Tính cấp thiết của đề tài
Những năm gần đây, sự phát triển mạnh của công nghệ thông tin đã làm cho
khả năng thu thập và lưu trữ thông tin của các hệ thống thông tin tăng nhanh một cách
chóng mặt. 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.
Sự bùng nổ này đã dẫn tới yêu cầu cấp thiết là cần có những kỹ thuật và công
cụ mới để tự động chuyển đổi lượng dữ liệu khổng lồ thành các tri thức có ích. Trong
đó phải kể đến công nghệ tính toán phân tán.

MapReduce có thể hiểu là một phương thức thực thi để giúp các ứng dụng có
thể xử lý nhanh một lượng dữ liệu lớn. Các dữ liệu này được đặt tại các máy tính
phân tán. Các máy tính này sẽ hoạt động song song độc lập với nhau. Điều này làm
rút ngắn thời gian xử lý toàn bộ dữ liệu. MapReduce có thể chạy trên các máy tính
thông thường không yêu cầu cấu hình cao, chi phí triển khai MapReduce rẻ.
Sự ra đời của MapReduce đã mở ra cho các doanh nghiệp cơ hội xử lý các
nguồn dữ liệu đồ sộ với chi phí thấp và thời gian nhanh hơn. Với việc áp dụng
MapReduce, Amazon có thể xử lý được các file log phát sinh trong quá trình bán
hàng trên mạng, phục vụ cho việc dự đoán xu hướng mua hàng của khách hàng, các
sản phẩm đang được mua nhiều [2]... Facebook có thể xử lý được khối lượng hơn 10
tỷ hình ảnh mà họ đang lưu trữ để rút trích các thông tin về kích thước hình ảnh, phát
hiện các hình ảnh xấu.
Vì những lý do trên mà tôi chọn đề tài “Phân cụm dữ liệu dùng giải thuật Đa
K-Means++ dựa trên Hadoop MapReduce và Spark” làm đề tài luận văn của mình.

2. Tổng quan vấn đề nghiên cứu
Đề tài này giới thiệu khái niệm, phân tích, nghiên cứu mô hình MapReduce,
trình bày giải pháp hadoop, phân cụm dữ liệu dựa vào thuật toán k-mean. Bài viết


2

này tìm hiểu các hành vi của các thuật toán phân nhóm nói trên khi chạy trên nền tảng
dữ liệu lớn như MapReduce job.
Phân cụm hình ảnh là một trong những bước quan trọng của việc khai thác các
hình ảnh (vệ tinh, rừng, đồi..). Trong thử nghiệm của tôi, tôi đã chạy đồng thời nhiều
thuật toán K-means với các tâm ban đầu khác nhau và các giá trị của k trong cùng
một lần lặp lại các MapReduce jobs. Để khởi tạo các tâm ban đầu, chúng ta sẽ triển
khai Scalable K-Means ++ MapReduce (MR) job [1]. Chúng tôi cũng đã chạy một
thuật toán đánh giá Simplified Silhouette Index [2] cho các kết quả phân cụm nhiều

lần trong cùng một lần lặp lại các MR job. Luận văn này đã khám phá ra hành vi của
các thuật toán phân cụm được đề cập ở trên khi chạy trên các nền tảng dữ liệu lớn
như MapReduce và Spark. Nền tảng Spark đã được chọn vì nó phổ biến dành cho xử
lý nhanh, đặc biệt là nơi các vòng lặp có quan hệ với nhau.

3. Mục đích nghiên cứu
Nghiên cứu khái niệm, vai trò, ứng dụng và các kỹ thuật phân cụm dữ liệu.
Nghiên cứu và triển khai phân cụm dữ liệu bằng giải thuật K-Means++ dựa
trên mô hình lập trình MapReduce.

4. Đối tượng và phạm vi nghiên cứu
Nghiên cứu phân cụm dữ liệu dựa trên MapReduce, tìm hiểu MapReduce và
Hadoop, nghiên cứu thuật toán K-means. Hiểu và áp dụng phân cụm được dữ liệu.
Nghiên cứu mô hình lâp ̣ trình MapReduce trong viêc ứng dung vào các bài
toán xử lý môṭ lươṇg lớn dữ liệu. Sử dụng Hadoop, môt thể hiện của MapReduce cho
viêc ̣ phân tích dữ liêụ .
Áp dụng cấu trúc, tham chiếu các đăc trưng của mô hình MapReduce vào bài
toán phân phân cụm dữ liệu.
Phạm vi nghiên cứu: nghiên cứu trên các tập dữ liệu chuẩn Dataset trong khai
thác dữ liệu lớn; Nguồn dữ liệu được lấy từ tập dữ liệu chuẩn Dataset.


3

5. Phương pháp nghiên cứu
Phương pháp tài liệu: Nghiên cứu, tìm hiểu lý thuyết về các kỹ thuật phân cụm
dữ liệu.
Phương pháp thực nghiệm: Cài đặt mô hình lập trình MapReduce dựa trên
Hadoop. Sử duṇg ngôn ngữ lâp ̣ trình Java tích hợp Framework Hadoop.
Luận văn này, chúng tôi đã thực hiện MapReduce để tìm giá trị tối ưu của k

bằng cách thực thi thuật toán K-means với giá trị thay đổi của K trong cùng một bộ
lặp MapReduce.


4

Chương 1 - TỔNG QUAN VỀ ĐỀ TÀI
Ngày nay, cùng với sự phát triển vượt bậc của xã hội cũng như các lĩnh vực
khoa học kĩ thuật, nhu cầu xử lý dữ liệu trên máy tính lại càng trở nên cấp thiết hơn
bao giờ hết. Với công nghệ hiện đại, nhiều petabyte dữ liệu có độ phân giải cao được
tạo ra hàng ngày. Trong lĩnh vực viễn thám, nạn phá rừng, thay đổi khí hậu, hệ sinh
thái và nhiệt độ bề mặt mặt đất là một số lĩnh vực nghiên cứu chính, nơi mà việc khai
thác thông tin và sự phân cụm các hình ảnh đóng một vai trò quan trọng. Kể từ đó,
phân cụm là một trong những kỹ thuật cơ bản để xử lý dữ liệu.
Phân cụm toàn bộ dữ liệu vào cụm, hoặc gom những nhóm có tính chất tương
tự thành cụm. Những điểm dữ liệu trong cùng 1 cụm thì tính năng tương tự trong
khi các điểm dữ liệu của cụm khác được nhóm lại trong một cụm riêng biệt. K-Means
là thuật toán rất quan trọng và được sử dụng phổ biến trong kỹ thuật phân cụm, được
sử dụng trên tất cả các lĩnh vực, bao gồm viễn thám [3]. Giả sử D là một tập dữ liệu
chứa n đối tượng. Phân nhóm các đối tượng vào các cụm k, trong đó Cx ⊂ D và Cx
∩ Cy = φ cho (1 ≤ x, y ≤ k).
Do số lượng dữ liệu lớn, xử lý nó là một thách thức đối với các nhà nghiên
cứu và các chuyên gia ngành công nghiệp. Hadoop là một trong những nền tảng tiêu
chuẩn cung cấp khả năng lưu trữ và xử lý dữ liệu lớn trong môi trường phân tán. Nó
có khả năng để phân phối dữ liệu và xử lý riêng biệt trên các nút trong cụm từ đó
giảm thiểu đường chuyền. Hadoop Distributed File System (HDFS) giúp việc phân
phối các phần của tập tin một cách hiệu quả [9].
Hadoop đã được kế thừa bởi các nhà nghiên cứu để chạy K-means trên nó [18],
[10]. Các nghiên cứu đã được tiến hành để chạy các thuật toán trên Hadoop để cải
thiện hiệu suất và khả năng mở rộng của Hadoop [1], [16]. Mở rộng kết quả của

những quan sát, nghiên cứu này khám phá các thuật toán chạy đa song song Scalable
K-means ++ clustering dữ liệu cho các giá trị khác nhau của k trong cùng một bộ lặp
thay vì chạy lặp đi lặp lại cho mỗi giá trị của k khác nhau.


5

Giá trị k thích hợp quyết định kết quả tối ưu clustering. Trong các ứng dụng
thực tế, số lượng cụm thường không được biết trước. Vì vậy để xác định k có thể chạy
k tăng dần nhiều lần nhằm xác định số lượng chính xác của cụm. Các giá trị thích hợp
của k được chọn bằng cách đánh giá chỉ số hiệu lực của cụm cho tất cả các lần thực
hiện. Tùy thuộc vào cụm tìm thấy cho các giá trị khác nhau của k, chúng tôi cũng xác
nhận số lượng thích hợp của các cụm yêu cầu. Chính các cơ quan doanh nghiệp và
chính phủ như NASA đã sử dụng Spark để xử lý petabyte dữ liệu [4]. Do đó, nó trở
nên cần thiết để nghiên cứu và thực hiện thí nghiệm như vậy trên Spark cùng với
Hadoop MapReduce.
Chương 2 của luận văn cung cấp nền tảng và công trình liên quan, thảo luận
về hệ sinh thái Hadoop với các thông tin cơ bản về các framework như MapReduce
và Apache Spark. Chương 3 là các phương pháp luận, phân cụm dữ liệu dùng giải
thuật Đa k-means++ dựa trên Hadoop MapReduce và Spark, bao gồm các thuật toán
mà chúng tôi đã sử dụng cho MapReduce và Spark tương ứng. Chương 4 cung cấp
tất cả các chi tiết các thí nghiệm và phần cuối của bài báo kết luận những phát hiện
của chúng tôi.


6

Chương 2 – CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ
2.1 Thuật toán K-Means
2.1.1 Giới thiệu thuật toán K-Means

K-Means là 1 thuật toán đơn giản nhưng lại khá hiệu quả và được sử dụng
rộng rãi.
Thuật toán k-means có 2 giai đoạn chính:
- Khởi tạo: Chọn k điểm bất kỳ làm các tâm ban đầu.
- Lặp đi lặp lại các bước sau:
Bước 1: Đối với tất cả các điểm, tính toán khoảng cách giữa mỗi điểm và tâm.
Phân mỗi điểm dữ liệu vào cluster có tâm gần nó nhất.
Bước 2: Tìm điểm tâm mới bằng cách lấy trung bình cộng của tất các các điểm
dữ liệu đã được gán vào cluster đó.
Bước 3: Lặp lại bước 1, bước 2 cho đến khi các tiêu chuẩn hội tụ được đáp
ứng các tiêu chuẩn hội tụ được đáp ứng khi các cụm ổn định.
Các tiêu chí hội tụ được đáp ứng khi cụm ổn định. Không có sự thay đổi trong
cluster thành phần, tức là không có sự thay đổi nào xảy ra ở giai đoạn gán nữa. Độ
phức tạp của thuật toán là O (nki) trong đó n là viết tắt của tổng số điểm, k là tổng
số phân vùng (các cụm) được tạo và i là là số lần lặp được thực hiện [6].

2.1.2 Hạn chế và nhược điểm
Việc lựa chọn tâm ban đầu có thể không dẫn đến sự phân nhóm tối ưu. Nếu
tâm ban đầu không được chọn một cách khôn ngoan thì K-Means có thể hội tụ cục
bộ.
Thứ hai, tính chất tuần tự của thuật toán làm cho nó khó khăn để xử lý song
song. Các thí nghiệm đã được tiến hành để khắc phục tính chất tuần tự này bằng cách
chạy thuật toán trong các môi trường phân tán.
Thứ ba, giá trị của k cần phải được biết trước. K-Means đã trải qua nhiều cải
tiến đối với các vấn đề trên nhưng thuật toán cốt lõi thì vẫn vậy.


7

2.2 Thuật toán Silhouette Index

Silhouette là một trong những biện pháp phổ biến và hiệu quả nhất để đánh
giá tính hợp lệ của cụm. Simplified Silhouette là một phiên bản được đơn giản hóa
của Silhouette. Tuy nhiên, đến nay Simplified Silhouette đã không được phân tích
theo thời gian trong một thuật toán phân cụm cụ thể. Bài báo này áp dụng Simplified
Silhouette tới việc đánh giá tính hợp lệ của k-means clustering.
Dựa vào phân tích, kết luận rằng đối với một tập dữ liệu nhất định thì
Simplified Silhouette phù hợp hơn Silhouette gốc trong việc lựa chọn kết quả tốt nhất
từ k-means clustering với các giá trị k khác nhau.

2.2.1 Biểu thức toán học
2.2.2 Độ phức tạp của thuật toán
Độ phức tạp tổng thể tính toán của Silhouette được ước tính là O (mn2), trong khi đó
của Simplified Silhouette được ước tính là O (kmn). Khi k nhỏ hơn nhiều so với n,
Silhouette có độ phức tạp hơn Simplified Silhouette. Ngoài ra, trong quá trình phân
cụm k-means, khoảng cách của mỗi điểm dữ liệu đến tâm cụm của nó đã được tính
toán trong mỗi lần lặp lại, làm giảm đáng kể tính toán của cả hai là hàm chức năng
và Simplified Silhouette. Do đó, hàm chức năng và Simplified Silhouette hiệu quả
hơn rất nhiều trong việc đánh giá hiệu lực k-means clustering.

2.3 Các công trình liên quan
2.4 Apache Hadoop
Apache Hadoop là một framework dùng để chạy những ứng dụng trên 1 cluster
lớn được xây dựng trên những phần cứng thông thường và được thiết kế để hỗ trợ
cho các ứng dụng sử dụng lượng lớn dữ liệu cấu trúc và phi cấu trúc. Hệ thống phần
mềm mã mở này được tối ưu cho tính tin cậy, khả năng mở rộng và tính toán phân
tán. Hadoop được thiết kế để làm việc với nhiều loại dữ liệu. Hadoop cho phép lưu
trữ khối lượng lớn bằng cách chia thành các khối dữ liệu nhỏ hơn phân phối trên các
phần cứng của một cluster để xử lý nhanh hơn. Công nghệ này đã được sử dụng rộng
rãi trên thế giới như Facebook, eBay, Amazon,…



8

2.4.1 Kiến trúc Hadoop cluster
2.4.2 Thành phần của Hadoop
2.5 Hadoop Distributed File System (HDFS)
Là một hệ thống tập tin phân phối thiết kế để chạy trên phần cứng. Nó có nhiều
điểm tương đồng với hệ thống tập tin phân tán hiện có. Tuy nhiên, sự khác biệt từ hệ
thống tập tin phân tán khác là rất lớn. HDFS chịu lỗi rất tốt và được thiết kế để triển
khai trên phần cứng chi phí thấp. HDFS cung cấp khả năng truy cập cao ứng dụng dữ
liệu và phù hợp cho các ứng dụng có tập dữ liệu lớn.

2.5.1 Kiến trúc HDFS
2.5.2 Đọc file từ HDFS
2.5.3 Ghi file xuống HDFS
2.6 MapReduce
Năm 2004, Google công bố nền tảng MapReduce [1]. MapReduce là giải pháp
được các kỹ sư của Google tìm ra khi họ đang cố gắng mở rộng bộ máy tìm kiếm của
mình. Có thể hiểu một cách đơn giản, 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ả.

2.7 Apache Spark
Tương tự như Hadoop MapReduce, còn có một framework tính toán
clustering, gọi là Spark [7].
Spark có thể được triển khai trên HDFS độc lập. Spark có một số khả năng xử
lý trong bộ nhớ, mặc dù nó không lưu trữ tất cả dữ liệu trong bộ nhớ. Trong thí nghiệm
của tôi sử dụng Spark, tôi đã triển khai nó qua HDFS.
Spark sử dụng API Resilient Distributed Dataset (RDD) để xử lý dữ liệu giúp
Spark đạt được hiệu suất cao là RDD (Resilient Distributed Datasets). Vì dữ liệu được

phân phối trên HDFS qua nhiều nút, quá trình xử lý có thể xảy ra trên các nút cá nhân
giảm thiểu việc truyền dữ liệu qua mạng. Điều này cũng tương tự như cách tiếp cận
MapReduce. Spark đọc tất cả các hoạt động được thực hiện cho đầu ra cụ thể và
không thực hiện chúng cho đến khi đầu ra được yêu cầu rõ ràng.


9

2.8 Kết luận chương 2
Chương 2 của bài viết cung cấp nền tảng, các thuật toán và công trình liên
quan. Cũng như thảo luận về hệ sinh thái Hadoop với các thông tin cơ bản về các
framework như Map Reduce and Apache Spark.


10

Chương 3 – PHƯƠNG PHÁP LUẬN
Thí nghiệm của tôi chia thành ba giai đoạn. Giai đoạn khởi tạo, Phân cụm và
giai đoạn đánh giá. Tất cả ba giai đoạn chạy lặp lại trên cùng MR cho các giá trị k
khác nhau. Điều này giúp giảm đáng kể thời gian dành để chạy lặp lại khác nhau cho
các giá trị của k.
Trong giai đoạn đầu, tôi đã áp dụng Scalable K-Means ++ để khởi tạo các cụm
cho các giá trị k khác nhau.
Mặc dù [10] có hiệu suất tốt hơn [1] nhưng kể từ khi Spark có hỗ trợ tích hợp
cho Scalable K-Means++, vì vậy đối với MapReduce tôi thực hiện Scalable KMean++ để khởi tạo.
Giai đoạn thứ hai thì thực hiện phân cụm đơn giản K-Means giúp trong việc
trả lại các cụm. Điều này có nghĩa giá trị của k bằng hai lần lặp lại sẽ trả lại hai cụm.
Đối với giá trị của k bằng bốn nó sẽ trở về bốn cụm, và như vậy...
Giai đoạn thứ ba là đánh giá và gợi ý giá trị của k phù hợp nhất với hình ảnh.
Trong giai đoạn này, phương pháp Simplified Silhouetteindex đã được sử dụng [2].


3.1 Multiple K-Means MapReduce (MKMeansMR)
Như đã thảo luận trong các phần trước, Sequence Files được tạo ra để xử lý
dữ liệu hình ảnh. Bản tóm tắt các bước mà tôi đã thực hiện cho thí nghiệm của tôi
được thể hiện trong hình 3.1


11

Hình 3.1: Thí nghiệm MapReduce

Với lợi ích của MapReduce, Scalable K-Means ++ có thể được thực hiện đồng
thời cho nhiều giá trị của k thay vì chạy MR jobs riêng biệt cho mỗi giá trị của k.
Trong thí nghiệm của tôi, tôi cũng đã thực hiện thuật toán Simplified Silhouette Index
cho nhiều giá trị của k để xác định giá trị thích hợp của số lượng các cụm. Phần này
mô tả ba thuật toán, tất cả đều làm việc cho nhiều giá trị của k.

3.1.1 Đọc hình ảnh
3.1.2 Khởi tạo Scalable K-Means++ với MapReduce
Trong MapReduce thứ hai (MapReduce 2 hoặc MR2), tôi đã triển khai Khởi
tạo Scalable K-Means++ phương pháp [1]. Chọn ngẫu nhiên một điểm trong ảnh làm
Centroid đầu tiên.


12

Tập tin, initialpoints.txt chứa tất cả các centroids. Trong thiết lập của
MapReduce 2, chúng ta đọc tập tin này và điền vào danh sách centroid cho các mapper
của chúng tôi. Tệp được tạo sau khi MapReduce 1 gửi một đầu vào cho MapReduce
2 chứa thông tin của tất cả các pixel.

MapReduce jobs này được thực hiện lặp đi lặp lại chỉ trong vài vòng vì chúng
cho kết quả đủ tốt [1]. Đối với mỗi lần chạy MR2, các vị trí centroid mới được tính
và tệp initialpoints.txt được cập nhật. MapReduce 2 tiếp tục thực hiện một vài vòng
để lấy k tâm ban đầu từ các cụm lấy mẫu C.
Công việc MapReduce này được chạy lặp đi lặp lại cho chỉ một vài vòng khi
chúng phải đủ để có kết quả tốt [3.]. Mỗi lần chạy MR2, vị trí centroid mới được tính
và tệp initialpoints.txt được cập nhật tương ứng. Các MapReduce 2 tiếp tục thực hiện
một vài vòng để có được các centroids ban đầu k từ các cụm lấy mẫu C.
Mapper:
a.

Pre-requisite: initpoints.txt: centroids file [Different files for different

value of k].
b. Input: File containing all information
c. setup: Read initpoints.txt and populate list of cluster centroids.
d. map():
-

Với mỗi điểm ảnh:

-Lặp qua tất cả các cụm centroids và tính khoảng cách Euclide giữa giá trị
Lab của centroid và pixel đầu vào. Khoảng cách thấp nhất được coi là khoảng cách
gần nhất. Một đối tượng của Initial Points Detail được tạo ra có tọa độ điểm ảnh,
màu sắc và bình phương của khoảng cách gần nhất, d2 (x, C), trong đó x là điểm và
C là tập các điểm trong cụm.
-Một key chứa giá trị k hoặc Id phân vùng và đối tượng Initial Point Details
dưới dạng một giá trị được ghi trong một ngữ cảnh.
- Kết thúc vòng for.
Reducer

Nhiều reducers được gọi tùy thuộc vào số phân vùng, k.


13

a.

Input: danh sách của Initial Point Details object.

b.

reduce():

Đối với tất cả các điểm chi tiết điểm ban đầu:
-

Tính tổng của các khoảng cách tối thiểu φx (C)

-

Kết thúc for

-

Các cụm được lấy dựa trên yếu tố tần số lấy mẫu l và sử dụng công thức,
l * d2 (x, c) / φx (C) theo Scalable K-Means++ [1]
c.

Cleanup():


Nội dung của initialpoints.txt được cập nhật bao gồm điểm centroid mới được
tìm thấy trong bước 5. Từ khi có một tập tin không thể được cập nhật trong HDFS,
một tệp mới được tạo ra để giữ nội dung trước đây của nó.
Trong suốt quá trình lặp lại cuối cùng, các tâm k được lấy mẫu từ danh sách
các cụm lấy mẫu C. Chúng ta có thể nhận được một tập tin centroid tương ứng với
mỗi giá trị của k.

3.1.3 Phân cụm Đa K-means
Đầu ra của MR2 tạo ra nhiều tập hợp các tập tin chứa tất cả các centroids ban
đầu k. Vì chúng ta chạy K-Means nhiều lần, vì vậy các bản sao khác nhau của tập tin
centroids ban đầu được tạo ra tùy thuộc vào số lượng các cụm sẽ được hình thành. Ví
dụ, cho tính 5 clusters, một file nên chứa 5 centroids ban đầu, tương tự cho 7 cụm thì
nên có 7 centroids ban đầu…
Mapper:
a. Pre-requisite: Các tệp Centroid (centroid_k.txt) cho mỗi giá trị của k. Mỗi
dòng của các tệp này đều chứa tọa độ pixel, clusterId và màu sắc. Đây cũng là đầu ra
của MR 2.
b. Setup(): Đọc tất cả các tệp tin centroid và lưu trữ thông tin trong HashMap
(partitionCentersHashMap) trong đó key là giá trị của k và giá trị có chứa danh sách
các centroids đối với k.
c. map (): Phương pháp này được gọi cho mỗi tọa độ.
-

Đối với mỗi khoá trong partitionCentersHashMap:


14

-


Lặp qua tất cả các cụm.

-

Khoảng cách Euclide được tính giữa màu sắc điểm ảnh và màu sắc cụm.

- Tìm cụm gần nhất, tạo một đối tượng PixelWritable có chứa thông tin điểm
ảnh cùng với cụm trong đó nó lỗi trong thời gian run job.
Context Output: k là khoá và PixelWritable đối tượng.

-

Reducer:
Số Reduce được xác định bằng giá trị k. Điều này sẽ nhận được tất cả các điểm
ảnh có cùng giá trị k.
+Thông tin pixel được lặp lại và các giá trị mới của các cụm được tìm thấy.
+Cập nhật các tệp tin centroids (centroid_k.txt) thường xuyên theo thông tin cập
nhật này.

3.1.4 Xác định các cụm
Thuật toán Silhouette Index được sử dụng để đánh giá tính nhất quán của các
cụm dữ liệu. Mục đích của thuật toán này là để gắn kết giữa các đối tượng trong cụm.
Nhiều sự gắn kết, tốt hơn các clustering. Trong trường hợp của tôi, tôi cần phải có
các thuật toán có thể được phù hợp trong các hạn chế của MapReduce. Đối với điều
này, [7] đã chọn Simplified Silhouette Index (SSI) là một trong số biến thể của
Silhouette Index ban đầu. Cách tiếp cận chỉ số Silhouette ban đầu tính toán tất cả
khoảng cách giữa tất cả các điểm dữ liệu. Trong SSI, cách tiếp cận được đơn giản hóa
và khoảng cách được tính giữa centroid và điểm dữ liệu
MapReduce 4 đề cập đến việc đánh giá hợp lệ các cụm cho mỗi phân vùng.
Mapper:

a. Pre-requisite: File chứa tất cả các phân vùng và centroids tương ứng với
những phân vùng đó. Mỗi dòng chứa partition Id, cluster Id, tọa độ X, Y của cụm
và màu sắc cụm.
File chứa danh sách các điểm cùng với thông tin về cụm và phân vùng. Mỗi
dòng chứa Id phân vùng, Id Cụm cụm, Nhóm Màu, điểm X, điểm Y, điểm Màu.


15

b. Setup(): Lặp qua tệp đầu tiên và tạo một hashmap (partition Center Map)
chứa Id phân vùng làm thông tin khóa và thông tin cụm như giá trị.
c. map (): Điều này được gọi cho mỗi dòng của tập tin thứ hai.
- Mỗi dòng của tệp tương ứng với partitionId (k-value) và thông tin pixel.
- Tùy thuộc vào điểm ảnh và cụm được chỉ định của nó, tính khoảng cách giữa
hai (khoảng cách).
- Ngoài ra, từ tất cả các cụm trong phân vùng tương ứng tìm thấy cụm với
khoảng cách tối thiểu (minClusterDistance) từ điểm.
-Áp dụng công thức Simplified Silhouette Index formula-(minClusterDistance
– distance) /minClusterDistance.
- SSI với partitionID là khoá.
Reducer:
- Một Reducer cho mỗi phân vùng là nhanh chóng.
- Tính tổng của tất cả SSI và chia cho số pixel.
- Đầu ra PartitionId cùng tương ứng với SSI.

3.2 Công cụ Spark trong Multiple Scalable K-Means++
Apache Spark là framework mã nguồn mở phù hợp với lớp HDFS trong hệ
sinh thái Hadoop. Nó thật dễ dàng để phát triển trong ba ngôn ngữ Scala, Python và
Java. Nó có thể được tích hợp với các hệ thống tập tin khác nhau như HDFS, hệ thống
tập tin cục bộ và Amazon EC2.


3.2.1 Xử lý hình ảnh Spark job
Spark đi kèm với các thư viện khác nhau dành cho mục đích đặc biệt. Chúng
bao gồm Spark SQL cho xử lý dữ liệu có cấu trúc, GraphX để xử lý đồ thị và Spark
Streaming để phát trực tuyến. Tương tự, Mllib cung cấp khả năng out-of-the-box cho
việc học máy.
Mllib hỗ trợ cung cấp cho các thuật toán phân cụm khác nhau trong đó KMeans là một trong số chúng [7].
Thư viện Mllib cung cấp việc thực hiện K-Mean 2 [1]. Trong thử nghiệm của
tôi, tôi đã sử dụng các lớp Mllib để chạy Scalable K-Means ++ trên Spark.


16

Mã giả của Spark job được mô tả sau đây.
a.

Read sequence file: Đọc Sequence File dùng spark context and lưu trữ

trong Java Pair RDD.
b.

Apply transformation: Áp dụng chuyển đổi để trả về danh sách đối

tượng PixelInformation cho mỗi tệp. Lớp PixelInformation chứa tọa độ pixel và màu
sắc.
c.

For each file:
 Chuyển đổi RGB sang giá trị Lab và tạo ra một véc tơ của giá trị a*
và b *.

 Song song với danh sách vectơ giá trị Lab để tạo ra JavaRDD.
 Với mỗi giá trị của k:
. Run KMeans trên JavaRDD để return model
. Lưu trữ các cụm trung tâm của mô hình trong các đối tượng của
Cluster Info.
. So sánh danh sách Cluster Info để tạo một RDD và lưu nó vào
một tệp. Các cột được lưu trữ trong tệp sẽ là Id phân vùng, Id cụm,
Màu nhóm.
. Đối với mỗi điểm ảnh màu, dự đoán chỉ số cluster từ mô hình.
. Tạo một đối tượng thông tin điểm bằng cách sử dụng thông tin
này.
. Lưu các thông tin thu thập được vào các tập tin văn bản mà mỗi
dòng sẽ có những cột: ID phân vùng, Id cụm, cluster Color, điểm X,
điểm Y, điểm Màu.
 Kết thúc với mỗi giá trị của k.

Chương trình Spark của chúng tôi có ba bước tương tự như MapReduce. Là
pre-requisite, Chuyển đổi dữ liệu hình ảnh thành một tập tin trình tự. Trong tập tin
trình tự, dữ liệu được lưu trữ dưới dạng giá trị trong cặp key-value với tên tệp là khoá.
Các tập tin trình tự sau đó đọc các mảng byte và chuyển dổi thành Buffered Image.
Tất cả các dữ liệu hình ảnh trong chuổi tập tin đã được đọc và thông tin của mỗi
pixcel được lưu trữ trong lớp PixelInformation chứa tọa độ pixcel và màu. Sau đó
danh sách thông tin cho mỗi tệp tin được lưu trữ trong RDD của Java Pair. Thuật toán
mô tả ở trên được thực hiện. Như đã đề cập trong thuật toán, K-Means việc thực hiện
MLLib đã được áp dụng lặp đi lặp lại cho mỗi giá trị của k. Ta không thể chạy nhiều


17

Scalable K-Means ++ trên dữ liệu hình ảnh của chúng tôi song song như các RDD

lồng nhau không thể sử dụng trong các biến đổi. Các thuật toán tạo ra hai tập tin văn
bản. Tập tin đầu tiên chứa danh sách các cụm với các thông tin. Tập tin thứ hai chứa
thông tin của mỗi tọa độ cùng với cụm và phân vùng mà nó thuộc về.

3.2.2 Xác định các cụm
Các tập tin văn bản được tạo ra trong thuật toán đầu tiên hoạt động như một
đầu vào cho thuật toán thứ hai. Chúng tôi đã triển khai Simplified Silhouette Index
trên Spark sử dụng Java. SSI được thực hiện song song cho mỗi giá trị k. Với sự trợ
giúp của chỉ số Silhouette Index, số lượng các cụm thích hợp cho hình ảnh có thể
được tính toán.
Nếu người dùng muốn biết số lượng các cụm mà trong đó hình ảnh cần phải
được phân chia, sau khi Simplified Silhouette Index được áp dụng cho các điểm của
cụm. Điều này cần phải được chạy trên mỗi giá trị của k. Clustering được xem là tốt
hơn khi giá trị của SI là nhỏ. Thay vì tính toán lặp lại giá trị của Silhouette Index cho
các giá trị khác nhau của k, chương trình của tôi thực hiện SSI song song với nhiều
giá trị k.
Các tệp đầu ra của thuật toán đầu tiên là điều kiện tiên quyết cho jobs này. Tệp
đầu tiên chứa thông tin cụm. Tệp thứ hai chứa thông tin về các điểm ảnh cho cụm
tương ứng.
a. Setup Phase
- Đọc tệp có chứa các phân vùng cùng với thông tin cụm được tạo ra như là
một đầu ra của thuật toán đầu tiên.
- Một quá trình chuyển đổi map khác được áp dụng trên RDD của bước trước
đó trong đó chứa ID phân vùng HashMap và danh sách các cụm.
b. Computing Phase
- Trong bước đầu tiên, đọc nội dung của tệp tin thứ hai được tạo ra như một
đầu ra của Thuật toán 4. Tạo JavaRDD của Point Information.
- Đối với mỗi phân vùng:



18

o Lấy danh sách các cụm. Áp dụng map chuyển đổi trên RDD của bước 1 để
tính toán các giá trị hình ảnh của mỗi pixel.
o Tính tổng của các giá trị Silhouette cách sử dụng Reduce biến đổi trên RDD
của bước trước và sau đó tính Silhouette Index của phân vùng cụ thể.

3.3 Kết luận chương 3
Trong chương này, sẽ cung cấp phương pháp và cover lại các thuật toán mà
tôi đã sử dụng cho MapReduce và Spark tương ứng, qua đó làm tiền đề để nghiên
cứu sâu hơn về phân cụm dữ liệu dùng giải thuật Đa K-Means++ dựa trên nền tảng
Hadoop.


19

Chương 4 - THỰC NGHIỆM
Các thí nghiệm được tiến hành trên cụm 1 nút với một master và slave, nút
được cài đặt trên phần mềm chạy máy ảo Oracle VM VirtualBox version 5.2.6 với
Operation System là: CentOS 7. Cài đặt và cấu hình Hadoop cluster được thực hiện
theo [20]. Chúng tôi sử dụng Apache Hadoop 2.8.1, Tổng số bản sao trên cụm là
3(replication factor), kích thước Block là 128, Các phần mềm được cài đặt trong
trong hadoop cluster: Java JDK, SSH và Spark 2.2.0.

Hình 4.1: Block size và Replication

Cả hai chương trình MapReduce and Spark sử dụng cụm giống nhau. Chúng
tôi đã cấu hình Spark 2.2.0 cho thí nghiệm. Đối với MapReduce, chúng tôi đã cấu
hình 8GB bộ nhớ cho Map và Reduce. Tương tự đối với Spark, executor memory là
8GB với 4 executor-cores máy thực hiện chạy trên data node.

Bộ dữ liệu của chúng tôi bao gồm các dữ liệu hình ảnh có kích thước khác
nhau từ 33KB đến 13MB với số điểm ảnh lên đến hơn 13.000.000 điểm ảnh. Nhiều
tập tin Sequence Files (information_rgb.hseq) được tạo ra với bộ dữ liệu khác nhau
lên đến 1GB.
Tôi đã chạy các thí nghiệm của tôi với ba giá trị k=5, 6 & 7 cụm. Thuật toán
có thể được áp dụng cho nhiều tệp tin và cho bất kỳ giá trị nào của k.


20

Hình 4.2: Lịch sử ghi nhận quá trình thực hiện MapReduce (MR)

K-Means-MR1: làm nhiệm vụ convert ảnh dưới dạng Sequence dưới hệ màu
RGB về ảnh chứa pixel information dưới hệ màu L*a*b (chứa thông tin điểm ảnh).
K-Means-MR2: làm nhiệm vụ sinh tâm của các cluster. Việc sinh tâm này
chính là cải tiến thuật toán KMeans thành KMeans++.
K-Means-MR3: thực hiện KMeans để phân cụm ảnh
K-Means-MR4: đánh giá xem cluster nào được phân cụm tốt hơn theo thuật
toán Silhoutte.
Bên dưới là một số hình ảnh ghi nhận quá trình thực hiện của Spark.
Stage Details: cho thấy các chi tiết nhiệm vụ cho một giai đoạn với id của nó
và attempt (thất bại) id.

Hình 4.3: Stages for jobs


21

StagePage hiện thị trang có sắn: http://192.168.176.3:4040/Stage/ . Nó là một
phần của Stages tab

StagePage sử dụng ExecutorsListener để hiển thị các bản ghi stdout và stderr
của các executors trong phần Task.

Hình 4.4: Executors

4.1 Giai đoạn phân cụm
Đối với quy mô, tôi đã tăng kích thước bộ dữ liệu đầu vào. Các bộ dữ liệu đầu
vào là 3MB, 20MB, 100MB, 200MB, 300MB, 0.5G và 1GB với hơn 1000 record
chạy trên Single Node Cluster. Tăng quy mô giúp hiểu được hành vi thuật toán nếu
tăng kích thước dữ liệu và tăng kích thước cụm.
Đồ thị hình 4.5 cho thấy khả năng thuật toán tăng tốc tốt trên Hadoop
MapReduce khi kích thước dữ liệu tăng lên.


×