PageRank là thuật toán phân tích các liên kết được dùng trong Google Search để xếp hạng các trang web.Nó là một giá trị số đại diện cho tầm quan trọng của một trang web trong thế giới website.Nó như là quá trình bầu chọn của các trang web trên hệ thống mạng internet .
Trang 1BÁO CÁO MÔN HỌC
DỮ LIỆU LỚN
TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
- • -
Nhóm thực hiện:
1 Nguyễn Thị Thanh Lan M2515005
2 Giang Tuấn Nguyên M2515007
3 Lư Minh Phúc M2515010
Giảng viên hướng dẫn
TS Phan Thượng Cang
THUẬT TOÁN PAGE RANK
1
Trang 2Nội dung báo cáo
1 Thuật toán Page rank
2 Giới thiệu cấu trúc dữ liệu bài toán
3 Ngôn ngữ giả thuật toán Pagerank
4 Chạy Demo
5 Tài liệu tham khảo
2
Trang 3 PageRank là thuật toán phân tích các liên kết đƣợc dùng trong Google Search để xếp hạng các trang web
Nó là một giá trị số đại diện cho tầm quan trọng của một trang web trong thế giới website
Nó nhƣ là quá trình bầu chọn của các trang web trên
hệ thống mạng internet
1 Thuật toán Page rank
Trang 4Top trang web có Page rank cao
4
Trang 52 Giới thiệu cấu trúc dữ liệu
• Cấu trúc dữ liệu ban đầu của bài toán tính
PageRank:
Trang web d có link đến trang web a,b,c
Trang web c chỉ link đến trang web a
Trang web b có link tới trang web a,c
Trang 62 Thuật toán Page rank (tt)
PR(A) = (1-d) + d*(PR(T1)/C(T1) + … + PR(Tn)/C(Tn)
• Trong đó:
PR(A) là pagerank của trang “page A”
đƣợc qua nhiều nghiên cứu )
PR(Tn) là pagerank của trang Tn có liên kết với “trang A”
C(Tn) : tổng số liên kết ra bên ngoài (outgoing links) của trang Tn
6
Trang 73 Ngôn ngữ giả thuật toán
Page rank
7
chúng ta sẽ chia công việc thành 3 jobs bao gồm: chuyển đổi, tính toán và sắp xếp
Trang 83 Ngôn ngữ giả thuật toán Page
rank
8
Trang 9Ngôn ngữ giả thuật toán Page
rank
9
Trang 10• Function Mapper1(Key1: Số dòng , value1: chuỗi giá trị của dòng) {
tab_Index = value1.find("\t");
if (tabIndex > 0) { nodeA = value1 substring(0, tabIndex);
nodeB= value1.substring(tabIndex+1, tabIndex+2);
emit(Key2 : nodeA , value2: nodeB);
} }
Trong đó:
nodeA là tên trang hiện tại
nodeB là tên các trang đƣợc link tới từ trang A
3 Ngôn ngữ giả thuật toán Page
rank
Trang 11Ngôn ngữ giả thuật toán Page
rank
Function Reducer1(Key2 : nodeA , value2[ ]: danh sách các nodeB) {
first = true;
links = 0.5 + "\t";
foreach( value : value2[ ] ) {
if (!first) {
links += ",“
} links += value;
first = false;
}
emit(Key3 = key2, value3: links);
}
Trong đó:
value3 có nội dung là: 0.5 value2[1], value2[2] … value2[n]
11
Trang 12Ngôn ngữ giả thuật toán Page
rank
Function Mapper2(Key3 = key2, value3: nodeA 0.5 value2[1], value2[2] … value2[n])
{
tab_index1 = value3.find("\t");
tab_index2 = value3.find("\t", tab_index1 + 1);
page = value3.substring( 0, tab_index1 );
pageRank = value3.substring(tab_index1 + 1, tab_index2 - (tab_index1 + 1));
links = value3.substring(tab_index2 + 1, value3.getLength() - (tab_index2 + 1)); allOtherPages[ ] = links.split(",");
for (otherPage : allOtherPages) {
pageRankWithTotalLinks = “pageRank + "\t" + allOtherPages.length “;
emit (key4: otherPage, value4: pageRankWithTotalLinks);
}
emit (key5: page, value5: || + links ));
}
12
Trang 13Ngôn ngữ giả thuật toán Page
rank
Function reducer2(key5: page, values : value4 hoặc value5[ ] ){
links = ""
sumShareOtherPageRanks = 0.0;
for (value : values) {
content = value;
if (content == value5) {
links += content.substring(2);
} else if(content == value4) {
split [ ] = content.split("\\t");
pageRank = split[0];
totalLinks = split[1];
sumShareOtherPageRanks += (pageRank / totalLinks);
}
}
newRank = (1 - d) + d * sumShareOtherPageRanks ;
emit (Key7 : key5, value7: newRank + "\t" + links);
}
13
Trang 14Function Mapper3(Key7 : key5, value7: page +”\t”+ newRank + "\t" + links) {
tab_index1= value7.find(“ \t ");
tab_index2 = value7.find(“ \t ", tab_index1 + 1);
page = value7.substring(0, tab_index1);
pageRank = value7 substring(tab_index1 +1, tab_index2 );
emit (key8: pageRank,value8: page );
}
3 Ngôn ngữ giả thuật toán Page
rank
Trang 154 Chạy Demo
• Demo:
Khởi động các dịch vụ HDFS và kiểm tra các tiến trình đang chạy qua các lệnh
• start-all.sh
• jps
– B1: Giải nén tập tin pagerank.tar.gz vào thƣ mục cài đặt hadoop
– B2: Di chuyển vào thƣ mục cài hadoop
cd ~/hadoop
– B3: Tạo thƣ mục input trên hdfs nếu chƣa tạo
hdfs dfs -mkdir /input
15
Trang 164 Chạy Demo
– B4: Di chuyển vào thư mục pagerank vừa giải nén ở trên
cd ~/hadoop/pagerank
– B5: Đưa các file trong thư mục pagerank/input lên hdfs:
hdfs dfs -put /input/* /input
– B6: Biên dịch file java thành file class
hadoop com.sun.tools.javac.Main *.java
– B7 :Biên dịch file class thành file jar
jar cf pg.jar *.class
– Chạy chương trình với số lần lặp là 1
hadoop jar pg.jar PageRank input /input/easy4.txt output
/output
16
Trang 174 Chạy Demo
– Chạy chương trình với số lần lặp là 2
hadoop jar pg.jar PageRank loop 2 input /input/easy4.txt output
/output1
– Xem kết quả tính pagerank với 1 lần lặp
hadoop fs -cat /output/result/*
– Xem kết quả tính pagerank với 2 lần lặp
hadoop fs -cat /output1/result/*
17
Trang 184 Demo
– Kết quả tính Pagerank với 1 lần lặp của tập easy4.txt:
– Kết quả tính Pagerank với 2 lần lặp của tập tin easy4.txt:
Trang 195 Tài liệu tham khảo
http://blog.xebia.com/2011/09/27/wiki-pagerank-with-hadoop/
2
http://www.cs.princeton.edu/~chazelle/cour
ses/BIB/pagerank.htm
http://pr.efactory.de/e-pagerank-algorithm.shtml
19
Trang 20Cảm ơn Thầy và các bạn
đã theo dõi!
20