Bài báo cáo và code demo cho bài toán Nhân hai ma trận trong Hadoop, NHÂN HAI MA TRẬN TRONG HADOOP MAPREDUCE BigData: Dữ liệu lớn là một thuật ngữ rộng cho việc xử lý một tập hợp dữ liệu rất lớn và phức tạp mà các ứng dụng xử lý dữ liệu truyền thống không xử lý được. Bao gồm các thách thức phân tích, thu thập, giám sát dữ liệu, tìm kiếm, chia sẻ, lưu trữ, truyền nhận, trực quan hóa, truy vấn và tính riêng tư. Thuật ngữ này thường đơn giản là sử dụng để phân tích dự đoán hoặc là một số phương pháp tiên tiến khác rõ ràng để trích xuất giá trị từ dữ liệu mà ít khi đề cập đến kích thước của bộ dữ liệu. Độ chính xác trong dữ liệu lớn có thể dẫn tới ra quyết định tự tin hơn, và những quyết định tốt hơn có thể đưa đến kết quả hoạt động tốt hơn như giảm chi phí và rủi ro. Sơ lược về Mapreduce và Hadoop: Về cơ bản, Hadoop framework (khung công tác Hadoop) của Apache là một cơ chế dùng để phân tích các tập dữ liệu rất lớn mà không cần đặt trong một kho dữ liệu. Hadoop trừu tượng hóa công cụ phân tích dữ liệu to lớn của MapReduce, làm nó trở nên dễ tiếp cận hơn với các nhà phát triển. Hadoop có khả năng mở rộng vô số các node và có thể xử lý tất cả hoạt động và phối hợp liên quan đến việc phân loại dữ liệu. Hadoop với các tính năng và tùy chỉnh phong phú đã trở thành một framework có ích và mạnh mẽ đến không ngờ. Yahoo và vô số các tổ chức khác đã tìm thấy ở nó một cơ chế hiệu quả để phân tích các núi dữ liệu bit, byte. Hadoop cũng khá dễ thực hiện trên một node đơn; tất cả những gì bạn cần là dữ liệu nào đó để phân tích và biết rõ về mã Java, bao gồm một phương tiện lập trình tổng quát (generics). Hadoop cũng làm việc với Ruby, Python và C++. Thông tin thêm về MapReduce Nếu bạn là độc giả của loạt bài này, thì có thể bạn đã tìm hiểu cách hoạt động của MapReduce. Trong bài Tìm hiểu dịch vụ REST với CouchDB và RESTClient của Groovy (REST up with CouchDB and Groovys RESTClient), tôi đã trình bày cách CouchDB sử dụng MapReduce cho các khung nhìn, sau đó tôi lại sử dụng nó trong bài MongoDB: Một kho dữ liệu NoSQL với các di chuyển RDBMS (tất cả đều đúng)) (MongoDB: A NoSQL datastore with (all the right) RDBMS moves), như là cơ chế dùng để xử lý các tài liệu MongoDB. Là một framework dựa trên các khái niệm dùng để xử lý các tập hợp dữ liệu khổng lồ, MapReduce được tối ưu hóa rất cao để giải quyết vấn đề phân tán bằng cách sử dụng một số lượng lớn các máy tính. Framework này bao gồm hai hàm, như tên gọi của nó cho thấy. Hàm map (ánh xạ) được thiết kế để nhận một đầu vào dữ liệu lớn và phân chia nó thành từng mảnh nhỏ hơn, rồi nó chuyển chúng đến các quá trình khác có thể làm điều gì đó với nó. Hàm reduce (giảm) phân loại các câu trả lời riêng lẻ do hàm map thu thập và đưa chúng tới một đầu ra cuối cùng. Trong Hadoop, bạn định nghĩa các việc thực hiện map và reduce bằng cách mở rộng các lớp cơ sở riêng của Hadoop. Các việc thực hiện này được gắn chặt với nhau bằng một cấu hình quy định chúng, cùng với các định dạng đầu vào và đầu ra. Hadoop rất thích hợp cho việc xử lý các tệp rất lớn chứa dữ liệu có cấu trúc. Một khía cạnh rất tiện dụng của Hadoop là ở chỗ nó xử lý phân tích cú pháp thô của một tệp đầu vào, do đó bạn có thể xử lý một dòng tại một thời điểm. Vì thế việc định nghĩa một hàm map thực ra chỉ là vấn đề xác định những gì bạn cần nắm lấy từ một dòng văn bản gửi đến. 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
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 Mapreduce Hadoop Giới thiệu toán nhân hai ma trận Mapreduce toán nhân hai ma trận Demo Tham khảo: http://hadoopgeek.com/mapreducematrix-multiplication/ https://github.com/GitJit/hadoop_kitchen/tree/master/ MapReduce Sơ lược Mapreduce Hadoop Mapreduce gì? MapReduce thiết kế Google mô hình lập trình xử lý tập liệu lớn song song, thu ật toán phân tán cụm Sơ lược Mapreduce Hadoop ● ● ● ● Nền tảng MapReduce thường gồm máy chủ phân tán chạy nhiều tác vụ khác song song Có nhiều thành phần quản lý việc giao tiếp gi ữa nodes khác liệu cung cấp tính sẵn sàng cao mức độ chịu lỗi Chương trình viết theo chức MapReduce đ ược tự động phân tán thực thi song song máy chủ Trong xử lý có lỗi, tảng cung c ấp tính s ẵn sàng cao node khác thực thay th ế nhi ệm v ụ node bị lỗi Sơ lược Mapreduce Hadoop Hadoop gì? ● ● Hadoop Apache framework mã nguồn mở viết java, cho phép xử lý phân tán (distributed processing) tập liệu lớn 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 module: + Hadoop Common + Hadoop YARN + Hadoop Distributed File System (HDFS) + Hadoop MapReduce Giới thiệu toán nhân hai ma trận ● Cho ma trận A với m dòng n cột ký hiệu: A aij mn Giới thiệu toán nhân hai ma trận Nếu ma trận A có kích thước m x n ma trận B có kích thước n x p, 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 toán nhân hai ma trận Cho hai ma trận A(m x n) B(n x p) Tính ma trận C (m x p)= AB Tập tin lưu ma trận A 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 toán nhân hai ma trận Cho toán: Ma trận A B 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 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 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 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 tạo cặp key,value xếp 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 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 file java Tại thư mục home/username/matran/input lưu file txt input đầu vào 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 hdfs dfs -cat /output/* Cảm ơn lắng nghe! [...]...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... 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... 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... ~/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!