-TasksController chuyển đồ thị GraphX thành định dạng JSON và chuyển đồ thị trong định dạng JSON cho Index. Tham khảo Code 10Code 8 để xem chi tiết hiện thực thuật toán này.
- Input: khơng có.
- Output: đối tượng JSON chứa đỉnh, cạnh và chú thích của đồ thị. 1. Bắt đầu.
2. Lấy đồ thị GraphX được cache.
3. Chuyển các đỉnh của đồ thị GraphX thành JsArray. 4. Chuyển các cạnh của đồ thị GraphX thành JsArray. 5. Lấy các đỉnh chú thích của đồ thị GraphX.
6. Chuyển các đỉnh chú thích của đồ thị GraphX thành JsArray.
7. Trả về đối tượng JSON chứa đỉnh, cạnh và chú thích trong định dạng JsArray. 8. Kết thúc.
-Thuật tốn 3.11 mơ tả chi tiết cơng việc của Index trong biểu diễn trực quan đồ thị.
- Thuật toán 3.11 — Thuật toán Visualize Graph của lớp Index.
-Index đọc đồ thị trong định dạng JSON và thực hiện biểu diễn trực quan đồ thị. Tham khảo Code 11 để xem chi tiết hiện thực thuật tốn này.
- Input: khơng có.
- Output: khơng có. 1. Bắt đầu.
2. Gửi yêu cầu lên Web Server để lấy dữ liệu đồ thị trong định dạng JSON. 3. Khi nhận được đồ thị từ Web Server thì thực hiện:
a. Tạo dataset chứa đỉnh và cạnh của đồ thị. b. Vẽ đồ thị.
c. Vẽ chú thích. 4. Kết thúc.
- CHƯƠNG 4:
- HIỆN THỰC
- & THỰC NGHIỆM
4.1. Hiện thực
-Phần này tơi sẽ trình bày kết quả hiện thực hệ thống Citation Network Explorer (CNE). Hệ thống này là ứng dụng Web với sơ đồ kiến trúc như Hình 3.1. Sau đây là một số màn hình giao diện của hệ thống CNE.
4.1.1. Giao diện chính
-
-
- Hình 4.1 — Giao diện chính của hệ thống CNE.
-Giao diện chính của hệ thống CNE, như Hình 4.1, bao gồm các thành phần sau:
- Thanh menu: gồm các menu: Task, Utilities, Tools, Help. Menu Tasks bao gồm những chức năng quan trọng như mô tả trong Bảng 4.1.
- đỉnh đang chọn trên đồ thị.
- Khung nội dung chính: dùng để biểu diễn trực quan đồ thị.
- Thanh trạng thái: dùng để thơng báo tình trạng hiện tại của ứng dụng.
-Sau đây làng bảng mô tả các chức năng của menu Tasks:
- Bảng 4.1 - Các chức năng của menu Tasks.
-
STT - Chức năng - Mơ tả
-
1
- Find papers - Tìm các bài báo theo: tên tác giả,
tiêu đề và
năm xuất bản.
-
2
- Load the whole graph - Tải toàn bộ cơ sở dữ liệu đồ thị từ OrientDb
vào GraphX.
-
3
- Load a part of the graph
- Tải một phần cơ sở dữ liệu đồ thị từ OrientDb vào GraphX.
-
4
- Visualize the whole graph
Chức
năng này chỉ nên dùng khi đồ thị nhỏ21.
-
5
- Visualize a part of the graph
- Biểu diễn trực quan một phần đồ
thị. Chức
năng này nên dùng khi đồ thị lớn.
-
6
- Calculate PageRank - Tính PageRank cho các đỉnh trên đồ thị.
Đây là công việc tốn nhiều thời gian xử lý.
-
7
- Find the influence of a paper
- Tìm tầm ảnh hưởng của một bài báo.
-
8
- Find the most influential
paper
- Tìm bài báo có tầm ảnh hưởng nhiều nhất. - 9 - Find the connected - component of a paper
- Tìm thành phần liên thơng chứa một bài
báo.
-
10
- Find the propagation of a
paper over time
- Tìm sự lan tỏa của một bài báo theo thời
gian.
21Đồ thị lớn hay nhỏ mang tính chất tương đối và phụ thuộc vào cấu hình hệ thống. Đối với máy thử nghiệm (CPU
4.1.2. Giao diện của chức năng “Find papers”
-
- -
- Hình 4.2 — Giao diện của chức năng “Findpapers”.
-
-
- Hình 4.3 - Giao diện của chức năng “Visualize the whole graph ”.
-Chức năng “Find papers” dùng để tìm các bài báo theo: tên tác giả, tiêu đề và năm
xuất bản. Giao diện của chức năng “Find papers” như hình Hình 4.2. Khung nội dung chính trình bày danh sách các bài báo tìm được. Cuối thanh trạng thái có những nút
7 7
- 78 -
-thể hiện sự lan tỏa của bài báo theo thời gian. Các đỉnh có cùng năm
xuất bản nằm trên
cùng một cột.
4.2. Thực nghiệm
-Trong phần này tơi sẽ trình bày cách triển khai hệ thống thực nghiệm và kết quả thực nghiệm một số chức năng chính của hệ thống Citation Network Explorer (CNE). Việc thực nghiệm nhằm đo đạc thời gian xử lý22 của các chức năng trên các đồ thị với độ lớn khác nhau. Độ lớn đồ thị được xác định dựa vào số cạnh và số đỉnh của đồ thị. Thời gian xử lý được tính bằng giây. Các chức năng được tiến hành thực nghiệm bao gồm:
- loadGraph: đọc cơ sở dữ liệu đồ thị từ OrientDb, chuyển thành đồ thị
GraphX trong Apache Spark Cluster.
- calculatePageRank: tính PageRank cho các đỉnh trên đồ thị.
- findConnectedComponent: tìm thành phần liên thông trong đồ thị chứa
một bài báo.
- findPropagation: tìm sự lan tỏa của một bài báo theo thời gian.
- visualizeGraph: thực hiện việc biểu diễn trực quan đồ thị.
4.2.1. Kiến trúc của hệ thống thực nghiệm
-Kiến trúc của hệ thống thực nghiệm như trong Hình 4.5, gồm sáu node:
- Một node làm Client.
- Một node làm Web Server.
- Một node làm OrientDb Server.
- Ba node còn tại tạo thành Apache Spark Cluster gồm: một Driver Node và hai Worker Node.
- Hệ thống thực nghiệm được hiện thực bằng ba máy tính:
- Một máy làm Client, Web Server, OrientDb Server và Driver Node.
- Hai máy làm Worker Node.
22Ở đây không đo đạc sự tiêu thụ bộ nhớ do hệ thống CNE là hệ thống xử lý phân tán trên Apache Spark Cluster.
- 79 -
-Các máy tính thực nghiệm có cấu hình như sau:
- - Processor: Intel(R) Core™ Ì7-3630QM CPU @ 2.40 GHz 2.40 GHz. - RAM: 8 GB.
- Hard Disk: 500 GB.
-
-
- Hình 4.5 — Sơ đồ kiến trúc của hệ thống thực nghiệm23.
4.2.2. Cài đặt hệ thống
-Việc cài đặt hệ thống CNE được thực hiện như sau:
- Trên máy Client: chỉ cần cài đặt Google Chrome.
- Trên máy Web Server: cài đặt: Java, Scala, Apache Spark, Play
Framework, VisJs, IntelliJ IDEA và dự án cne24.
- Trên Driver Node và Worker Node: cài đặt: Java, Scala, Apache Spark.
- Trên máy OrientDb Server: cài đặt: Java, OrientDb Server.
-Chi tiết cài đặt các thành phần trên được trình bày chi tiết ở phần Phụ Lục 2.
4.2.3. Cách chạy hệ thống thực nghiệm
-Hệ thống CNE là ứng dụng Web kết hợp với Apache Spark Cluster và OrientDb
23Khi cần triển khai hệ thống trong thực tế chỉ cần dùng một máy tính cho mỗi node. Khi cần mở rộng hệ thống chỉ
cần thêm máy tính làm Worker Node.
24cne là tên dự án hiện thực hệ thống CNE.
- 80 -
-Server. Vì vậy, để chạy hệ thống CNE ta thực hiện như sau:
- Chạy OrientDb Server: Trên máy OrientDb Server, vào folder bin của
OrientDb Server, nhấp đúp vào file server.bat.
- Chạy Apache Spark Cluster:
- + Trên Driver Node: Mở cửa sổ Command Prompt, thực hiện lệnh sau:
spark-class org.apache.spark.deploy.master.Master -i 192.168.1.10625
- + Trên Worker Node: Mở cửa sổ Command Prompt, thực hiện lệnh
sau:
- spark-class org.apache.spark.deploy.worker.Worker
spark://192.168.1.106:7077
- Chạy Web Server: Trên máy Web Server, chạy ứng dụng IntelliJ IDEA,
mở dự án cne, nhấn nút Run.
- Chạy thành phần Client: Trên máy Client, mở Google Chrome, nhập
địa chỉ http://localhost:9000 .
4.2.4. Kết quả thực nghiệm
4.2.4.1. Chức năng loadGraph
-Chức năng loadGraph đọc cơ sở dữ liệu đồ thị từ OrientDb, chuyển thành đồ thị GraphX trong hệ thống Apache Spark Cluster. Qui mô của đồ thị được xác định dựa vào (Số Cạnh; Số Đỉnh). Biểu đồ 4.1 cho thấy thời gian xử lý của chức năng loadGraph. Trong biểu đồ, trục hoành biểu diễn qui mô của đồ thị được xác định bằng (Số Cạnh; Số Đỉnh), trục tung biểu diễn thời gian xử lý tính bằng giây. Số liệu thử nghiệm với độ lớn đồ thị từ 1 triệu cạnh cho đến 8 triệu cạnh. Kết quả cho thấy thời gian xử lý của chức năng
loadGraph khá nhanh và tỷ lệ thuận với độ lớn của đồ thị. 4.2.4.2. Chức năng calculatePageRank
-Chức năng calculatePageRank tính PageRank cho các đỉnh trên đồ thị. Biểu đồ 4.2 cho thấy thời gian xử lý của chức năng calculatePageRank. Trong biểu đồ, trục
25192.168.1.106 là IP Address của Driver Node.
- 81 -
-hoành biểu diễn độ lớn của đồ thị được xác định bằng (Số Cạnh; Số
Đỉnh), trục tung biểu
diễn thời gian xử lý tính bằng giây. Các thử nghiệm được tiến hành trên đồ thị
từ 100.000
cạnh cho đến 500.000 cạnh. Kết quả cho thấy thời gian xử lý của chức năng
calculatePageRank khá chậm và tỷ lệ thuận với độ lớn của đồ thị.
-
-
- Biểu đồ 4.1 — Thời gian xử lý của chức năng loadGraph.
4.2.4.3. Chức năng findConnectedComponent
-Chức năng íindConnectedComponent tìm thành phần liên thơng trong đồ thị chứa một bài báo. Chức năng này cần biết id của bài báo và trả về đồ thị con là thành phần liên thông chứa bài báo. Biểu đồ 4.3 cho thấy thời gian xử lý của chức năng
íindConnectedComponent khi tìm thành phần liên thơng chứa bài báo có id = 233.
Trong biểu đồ, trục hồnh biểu diễn qui mơ của đồ thị được xác định bằng (Số Cạnh; Số Đỉnh), trục tung biểu diễn thời gian xử lý tính bằng giây. Các thử nghiệm được tiến hành trên đồ thị từ 100.000 cạnh cho đến 500.000 cạnh. Kết quả cho thấy thời gian xử lý của chức năng íindConnectedComponent khá nhanh và tỷ lệ thuận với độ lớn của đồ thị.
- 82 -
- 600 - 500 - 400 - í,ạ 300 o - 200 - 100
- Biểu đồ 4.2 — Thời gian xử lý của chức năng calculatePageRank.
- 20 - 18 - 16 - 14 - 12 - 10 o - 8 - 6 - 4 - 2 - 0 - Biểu đồ 4.3 - Thời gian xử lý của
chức năng findConnectedComponent.
4.2.4.4. Chức năng findPropagation
-Chức năng íindPropagation tìm sự lan tỏa của bài báo theo thời gian. Chức năng này cần biết id của bài báo, hướng lan tỏa, số năm lan tỏa và trả về đồ thị con là thành phần liên thông chứa bài báo và thể hiện sự lan tỏa của bài báo.
- Có 3 hướng lan tỏa:
- - In: tìm sự lan tỏa từ bài báo được chỉ định bởi id theo hướng In. Tức là tìm
(100,000; 125,254) (200,000;227,584) 318,757)(300,000; 402,629)(400,000; 480,450)(500,000; (Số Cạnh; Số Đỉnh) (100,000; 125,254) (200,000; (300,000; (400,000; (500,000; 227,584) 318,757) 402,629) 480,450) (Số Cạnh; Số Đỉnh) - 83 -
- những bài báo tham khảo bài báo được chỉ định bởi id một cách trực tiếp
hoặc gián tiếp.
- Out: tìm sự lan tỏa từ bài báo được chỉ định bởi id theo hướng Out. Tức là
tìm những bài báo mà bài báo được chỉ định bởi id tham khảo đến một cách trực tiếp hoặc gián tiếp.
- Both: tìm sự lan tỏa từ bài báo được chỉ định bởi id theo cả hai hướng In
và Out. - 12 - 10 - 8 - •? 6 o - 4
- Biểu đồ 4.4 — Thời gian xử lý của chức năng findPropagation.
-Biểu đồ 4.4 cho thấy thời gian xử lý của chức năng íindPropagation khi tìm sự lan tỏa của bài báo có id = 233 theo hướng In và không giới hạn số năm lan tỏa. Trong biểu đồ, trục hoành biểu diễn qui mô của đồ thị được xác định bằng (Số Cạnh; Số Đỉnh), trục tung biểu diễn thời gian xử lý tính bằng giây. Các thử nghiệm được tiến hành trên đồ thị từ 100.000 cạnh cho đến 500.000 cạnh. Kết quả cho thấy thời gian xử lý của chức năng íindPropagation khá nhanh và tỷ lệ thuận với độ lớn của đồ thị.
4.2.4.5. Chức năng visualizeGraph
-Chức năng visualizeGraph thực hiện việc biểu diễn trực quan đồ thị. Khi biểu diễn trực quan đồ thị, Web Server đọc đồ thị GraphX được cache, chuyển thành định dạng JSON theo qui định của VisJs, chuyển kết quả JSON về máy Client, máy Client dùng
(100,000; 125,254) (200,000;227,584) 318,757)(300,000; 402,629)(400,000; 480,450)(500,000; (Số Cạnh; Số Đỉnh) - 84 -
-JavaScript kết hợp với thư viện VisJs để biểu diễn trực quan đồ thị.
Biểu đồ 4.5 cho thấy
thời gian xử lý của chức năng visualizeGraph. Trong biểu đồ, trục hồnh
biểu diễn qui
mơ của đồ thị được xác định bằng (Số Cạnh; Số Đỉnh), trục tung biểu diễn thời
gian xử
lý tính bằng giây. Việc thử nghiệm được tiến hành trên đồ thị từ 100 đỉnh cho
đến 1000
đỉnh. Kết quả cho thấy thời gian biểu diễn trực quan đồ thị khá chậm và tỷ lệ
thuận với độ lớn của đồ thị. - 70 - 60 - 50 - >- 40 <05 - 30 - 20 - 10 - 0
- Biểu đồ 4.5 — Thời gian xử lý của chức năng visualizeGraph.
- 85 -
(100; 171) (250; 408) (500; 815) (750; 1,231) (1,000; 1,622) (Số Cạnh; Số Đỉnh)
- CHƯƠNG 5:
- KẾT LUẬN
- & HƯỚNG PHÁT TRIỀN
5.1. Những thách thức khi thực hiện đề tài
-Khi thực hiện đề tài tôi phải đối mặt với nhiều thách thức trong việc thu thập dữ liệu, tổ chức dữ liệu, làm việc với tập dữ liệu khá lớn, xử lý đồ thị... Nhưng cũng nhờ những thách thức đó đã giúp cho tơi tích lũy thêm nhiều kinh nghiệm.
-Do dữ liệu mạng trích dẫn các bài báo khoa học lấy từ web site https://aminer.org/citation ở dạng text file nên cần phải thực hiện việc xử lý text file để tổ chức và lưu trữ trong OrientDb Server. Hơn nữa, dữ liệu này có nhiều lỗi như: hai bài báo tham khảo lẫn nhau, bài báo tham khảo đến chính nó, bài báo xuất bản trước lại tham khảo đến bài báo xuất bản sau... Do đó phải thực hiện việc chuẩn hóa dữ liệu để loại bỏ các sai sót đó.
-Việc chuyển dữ liệu đồ thị từ OrientDb thành GraphX cũng là một vấn đề không đơn giản. Cần phải hiểu rõ OrientDb API để truy vấn dữ liệu, Apache Spark - GraphX API để tổ chức và xử lý đồ thị GraphX. Một thách thức không nhỏ là chuyển cơ sở dữ liệu đồ thị lớn từ OrientDb thành GraphX phải hiệu quả về thời gian và ít tốn bộ nhớ. Để giải quyết những thách thức đó tơi đã dành khá nhiều thời gian để nghiên cứu và thử nghiệm về Big Data, các kỹ thuật xử lý Big Data, ngơn ngữ lập trình Scala, OrientDb, Apache Spark - GraphX...
-Nội dung chính trong đề tài là xử lý và phân tích đồ thị GraphX như tính PageRank, tìm thành phần liên thơng, tìm sự lan tỏa của một bài báo theo thời gian... Việc làm chủ kỹ thuật xử lý đồ thị GraphX, thuật toán Pregel để giải quyết những vấn đề trên cũng là một thách thức không nhỏ.
-Việc xây dựng ứng dụng Web bằng Scala kết hợp với Play FrameWork cũng là một thách thức nhưng thú vị và đáng giá do đây là lần đầu tiên tiếp xúc với ngôn ngữ Scala và Play FrameWork.
-Một vấn đề rất thú vị nhưng không hề đơn giản là biểu diễn trực quan đồ thị bằng thư viện JavaScript VisJs. Tôi phải dành khá nhiều thời gian để nghiên cứu lý thuyết và thực nghiệm để có thể biểu diễn đồ thị trực quan, đẹp mắt và linh hoạt.
-Mặt khác, do khả năng phần cứng hạn chế nên tơi cũng gặp khó khăn khi xử lý khối lượng dữ liệu lớn như: thiếu bộ nhớ, tốc độ xử lý chậm... Việc giải quyết những