NHÂN HAI MA TRẬN TRONG
HADOOP MAPREDUCE
Thành viên thực hiện:
Phạm Hồng Cẩm - M2515002
Dương Bích Chi - M2515018
Lý Minh Phương - M2515027
Phan Thúy Quỳnh - M2515028
Giảng viên hướng dẫn:
TS. Phan Th ượng Cang
NỘI DUNG
Sơ lược về Mapreduce và Hadoop
Giới thiệu bài toán nhân hai ma trận
Mapreduce bài toán nhân hai ma trận
Demo
Tham khảo: /> />MapReduce
Sơ lược về Mapreduce và Hadoop
Mapreduce là gì?
MapReduce được thiết kế bởi Google như 1 mô
hình lập trình xử lý tập dữ liệu lớn song song, thu ật
toán được phân tán trên 1 cụm.
Sơ lược về Mapreduce và Hadoop
●
●
●
●
Nền tảng MapReduce thường gồm các máy chủ phân tán
và nó chạy nhiều tác vụ khác nhau song song.
Có nhiều thành phần quản lý việc giao tiếp gi ữa các
nodes khác nhau của dữ liệu và cung cấp tính sẵn sàng
cao và mức độ chịu lỗi.
Chương trình được viết theo chức năng MapReduce đ ược
tự động được phân tán và thực thi song song trên các máy
chủ.
Trong khi xử lý nếu có lỗi, nền tảng cung c ấp tính s ẵn
sàng cao và các node khác thực hiện thay th ế nhi ệm v ụ
của node bị lỗi.
Sơ lược về Mapreduce và Hadoop
Hadoop là gì?
●
●
Hadoop là một Apache framework mã nguồn mở được
viết bằng java, cho phép xử lý phân tán (distributed
processing) các tập dữ liệu lớn trên các cụm máy tính
(clusters of computers) thông qua mô hình l ập trình
đơn giản.
Hadoop framework gồm 4 module:
+ Hadoop Common
+ Hadoop YARN
+ Hadoop Distributed File System (HDFS)
+ Hadoop MapReduce
Giới thiệu bài toán nhân hai ma trận
●
Cho ma trận A với m dòng n cột được ký hiệu:
A aij
mn
Giới thiệu bài toán nhân hai ma trận
Nếu ma trận A có kích thước m x n và ma trận B
có kích thước n x p, thì ma trận tích C=AB có
kích thước m x p có phần tử đứng ở hàng thứ i, cột
thứ j xác định bởi:
Cij=ai1b1j+ai2b2j+..+ainbnj
Ví dụ:
với i=1..m; j=1..p
Mapreduce bài toán nhân hai ma trận
Cho hai ma trận A(m x n) và B(n x p). Tính ma
trận C (m x p)= AB.
Tập tin lưu ma trận A và B có dạng:
[Tên ma trận],[Hàng],[Cột],[Giá trị]
Ví dụ:
A,0,0,1
A,0,1,-1
A,0,2,0
A,1,0,2
A,1,1,1
A,1,2,1
Mapreduce bài toán nhân hai ma trận
Cho bài toán:
Ma trận A và B được lưu
vào tập tin:
A,0,0,12
A,0,1,-51
A,0,2,4
A,1,0,6
A,1,1,167
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
Mapreduce bài toán nhân hai ma trận
Giải thuật hàm Map
a_ij
b_jk
nxp
=
col k
mxn
X
row i
((i,0), (A, j, a_ij))
a_ij
Map
((i,p-1), (A, j, a_ij))
((0,k), (B, j, b_jk))
b_jk
Map
((m-1,k), (B, j, b_jk))
Mapreduce bài toán nhân hai ma trận
Giải thuật hàm 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)
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)
Mapreduce bài toán nhân hai ma trận
Giải thuật hàm 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)])
Mapreduce bài toán nhân hai ma trận
Giải thuật hàm 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ử C00
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)
Demo
Các bước chạy chương trình:
Tại thư mục home/username/matran/demo lưu các
file .java
Tại thư mục home/username/matran/input lưu các
file .txt là input đầu vào của chương trình
●
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
Các bước chạy chương trình:
●
Biên dịch chương trình:
cd ~/matran/demo
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/*
Cảm ơn đã lắng nghe!