TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÁO CÁO
BÀI TOÁN NHÂN HAI MA TRẬN KÍCH THƯỚC LỚN
Giảng viên hướng dẫn:
Học viên thực hiện:
TS. Phan Thượng Cang
Trần Văn Tiên
Mã Tuấn Duy
Bài toán Nhân hai ma trận
kích thước lớn
1. Mô tả bài toán
Nhân hai ma trận
2. Bài toán Nhân hai ma trận
trong mô hình Map Reduce
Nội Dung
3. Demo chương trình
4. Thảo luận
Mô tả
Bài toán Nhân hai ma trận
1 . Giới Thiệu Bài Toán Nhân Hai Ma Trận
Bài toán
Hai ma trận A có kích thước m dòng và n cột; Ma trận B có kích thước n
dòng và p cột, được ký hiệu như sau
A = [aij]mxn
B = [bij]nxp
Cần tính ma trận tích C = AB
1 . Giới Thiệu Bài Toán Nhân Hai Ma Trận
Ma Trận Tích
Ma trận tích C=AB có kích thước m*p xác định bằng công thức:
cij=ai1b1j+ai2b2j+..+ainbnj
Ví dụ:
với i=1..m; j=1..p
Bài toán Nhân hai ma trận
trong mô hình MapReduce
2 . Nhân hai ma trận trong MapReduce
Tập dữ liệu input
[Tên ma trận],[Hàng],[Cột],[Giá trị]
Ví dụ:
A=
File input.txt
A,0,0,1
A,0,1,-1
A,0,2,0
A,1,0,2
A,1,1,1
A,1,2,1
2 . Nhân hai ma trận trong MapReduce
Tập dữ liệu input
A=
A,0,0,12
A,0,1,-51
A,0,2,4
A,1,0,6
A,1,1,167
B=
A,1,2,-68
A,2,0,-4
A,2,1,24
A,2,2,-41
B,0,0-2
B,0,1,1
B,1,0,1
B,1,1,2
B,2,0,0
B,2,1,3
3. MapReduce Và
Bài Toán Nhân Hai Ma Trận
Giải Thuật Map
Giải Thuật Reduce
3 . Nhân hai ma trận trong MapReduce – Mô hình
Input files
Mapping
Shuffling
Reducing
(Key, Value)
(Key, Value)
(Key, Value)
(0,0),(A,0,12)
(0,1),(A,0,12)
Input.txt
A,0,0,12
A,0,1,-51
A,0,2,4
A,1,0,6
A,1,1,167
A,1,2,-68
B,0,0-2
B,0,1,1
B,1,0,1
B,1,1,2
B,2,0,0
B,2,1,3
(0,0),[(A,0,12),(A,1,-51),…,(B,2,0)]
Key (0,0)
List A = [(A,0,12)…]
List B = [(B,0,-2),…]
(0,0),(A,1,-51)
(0,1),(A,1,-51)
(0,0),(A,2,4)
(0,1),(A,2,4)
(0,1),[(A,0,12),(A,1,-51),…,(B,2,3)]
Key (0,1)
List A = [(A,0,12)…]
List B = [(B,0,1),…]
(1,0),(A,2,-68)
(1,1),(A,2,-68)
…
(0,0),(B,0,-2)
(1,0),(B,0,-2)
(0,0),(B,1,1)
(1,0),(B,1,1)
(0,0),(B,2,0)
(1,0),(B,2,0)
(1,0),[(A,0,6),(A,1,-51),…,(B,2,0)]
(1,1),[(A,0,6),(A,1,-51),…,(B,2,3)]
Key (1,0)
List A = [(A,0,6)…]
List B = [(B,0,-2),…]
…
(0,1),(B,2,3)
(1,1),(B,2,3)
Result
…
P=
Giải Thuật Map
Giải Thuật Map
map(key,value): // value is(“A”,i,j,a_ij) or
(“B”,j,k,b_jk)
if value[0]==”A”:
i=value[1]
j=value[2]
a_ij=value[3]
for k=0 to p-1:
context.write((i,k) as key, (A,j,a_ij) as
value)
//p: so cot cua Ma tran B
Giải Thuật Map
else:
j=value[1]
k=value[2]
b_jk=value[3]
for i=0 to m-1:
context.write((i,k) as key, (B,j,b_jk) as
value)
//m: so dong cua ma tran A
Giải Thuật Map
A,0,0,12
(0,0),(A,0,12)
(0,1),(A,0,12)
Sau khi tạo ra các cặp key,value và sắp xếp các value theo key ta được:
((0,0),[(A,0,12),(A,1,-51),(A,2,4),(B,0,-2),(B,1,1),(B,2,0)])
Giải Thuật Reduce
Giải Thuật Reduce
reduce(key,values):
// key is (i,k)
// values is a list of (“A”,j,a_ij) and (“B”,j,b_jk)
hash_A={j:a_ij for (x,j,a_ij) in values if x==A}
hash_B={j:b_jk for (x,j,b_jk) in values if x==B}
Result=0
for j=1 to n:
Result + =hash_A[j] * hash_B[j]
context.write(key,result)
Nhân Hai Ma Trận Trong Hadoop MapReduce
Giải Thuật Reduce
((0,0),[(A,0,12),(A,1,-51),(A,2,4),(B,0,-2),(B,1,1),(B,2,0)])
reduce
12*(-2)+(-51)*1+4*0=-75
phần tử P00
Demo
Nhân Hai Ma Trận Trong Hadoop MapReduce
Demo
Khởi động dịch vụ:
●
hadoop/sbin/start-all.sh
●
Tạo thư mục input:
●
hdfs dfs -mkdir /input
●
Đưa file matrix.txt lên hadoop:
●
hdfs dfs -put ~/matran/input/* /input
●
Demo
Biên dịch chương trình:
●
hadoop com.sun.tools.javac.Main *.java
●
Tạo file jar
●
jar cf mt.jar *.class
Chạy chương trình
●
hadoop jar mt.jar Matrix /input /output
●
Xem kết quả
●
hdfs dfs -cat /output/*
●
Xin cảm ơn!