Hình 1.1: Mô hình tổng quát của Map-Reduce Trong mô hình trên, ngoài hai quá trình cơ bản là Map và Reduce đã được trình bày, còn có thêm hai quá trình nữa là Split và Shuffle,
Trang 1BỘ GIÁO DỤC ĐÀO TẠO
TRƯỜNG ĐẠI HỌC THĂNG LONG
Trang 2MỤC LỤC
CHƯƠNG 1 TỔNG QUAN VỀ MAP-REDUCE 5
1.1 Giới thiệu chung 5
1.2 Map-Reduce là gì ? 5
CHƯƠNG 2 KIẾN TRÚC MAP-REDUCE ENGINE 7
2.1 Các thành phần 7
2.2 Cơ chế hoạt động 8
CHƯƠNG 3 NGUYÊN LÝ HOẠT ĐỘNG CỦA MAP-REDUCE 12
3.1 Quá trình Split 12
3.2 Quá trình Map và Shuffle 12
3.3 Quá trình Reduce 13
3.4 Ví dụ bài toán WordCount 14
CHƯƠNG 4 ƯU NHƯỢC ĐIỂM CỦA MAP-REDUCE 16
4.1 Ưu điểm 16
4.1.1 Khả năng mở rộng 16
4.1.2 Giải pháp hiệu quả̉̉̉ 16 ̉̉
4.1.3 Nhanh 16
4.2 Nhược điểm 16
CHƯƠNG 5 ỨNG DỤNG CỦA MAP-REDUCE 17
5.1 Thiết kế hệ thống phân tích và xử lý mã độc 17
5.1.1 Phát biểu bài toán 17
5.1.2 Phân tích mã độc dựa trên mô hình MapReduce 18
5.1.3 Cơ chế Map mã độc 19
5.1.4 Cơ chế Reduce mã độc 20
5.1.5 Thiết kế xây dựng hệ thống 21
CHƯƠNG 6 TỔNG KẾT 23
Tài liệu tham khảo 24
Trang 3DANH MỤC MINH HỌ
Trang 4Hình 1.1: Mô hình tổng quát của Map-Reduce 5
Hình 2.1: Kiến trúc map-reduce 7
Hình 2.2: Cơ chế hoạt động của MapReduce 8
Hình 2.3: Mối quan hệ giữa JobTracker và Task Tracker 9
Hình 2.4: Mô hình Task Tracker 9
Hình 2.5: Mô hình JobTracker 10
Hình 2.6: Cơ chế hoạt động của JobTracker 11
Hình 3.1: Quá trình Split 12
Hình 3.2: Quá trình Mapper và Shuffle trên 1 máy 13
Hình 3.3: Quá trình Reducer 13
Hình 3.4: Sơ đồ hoạt động 14
Hình 3.4: Ví dụ về bài toán đếm từ 14
Hình 5.1: Mô hình tổng quan hệ thống 18
Hình 5.2: Mô hình hệ thống phân tích mã độc 18
Hình 5.3: Xử lý kết quả phân tích 20
Hình 5.4: Sơ đồ hoạt động phân tích tĩnh 21
Hình 5.5: Sơ đồ hoạt động phân tích động 22
Trang 5CHƯƠNG 1 TỔNG QUAN VỀ MAP-REDUCE
1.1 Giới thiệu chung
Năm 2004, Google công bố mô hình xử lý dữ liệu phân tán MapReduce, Mô hình này làsáng kiến của một nhóm các kỹ sư Google, khi nghiên cứu tìm kiếm giải pháp mở rộng cỗ máytìm kiếm của họ Có thể coi MapReduce là một mô hình lập trình, hay một giải thuật lập trình,chuyên dùng để giải quyết vấn đề về xử lý dữ liệu lớn Mô hình này cơ bản gồm hai thao tácchính là Map và Reduce, với ý tưởng là chia công việc lớn ra thành nhiều công việc nhỏ, giaocho nhiều máy tính cùng thực hiện - thao tác Map, sau đó tổng hợp kết quả lại - thao tácReduce
Hình 1.1: Mô hình tổng quát của Map-Reduce
Trong mô hình trên, ngoài hai quá trình cơ bản là Map và Reduce đã được trình bày, còn
có thêm hai quá trình nữa là Split và Shuffle, hai quá trình này lần lượt giữ vai trò: phân chia dữliệu đầu vào, tạo tiền đề cho quá trình Map và gom nhóm dữ liệu đầu ra của quá trình Map, tạotiền đề cho quá trình Reduce
MapReduce định nghĩa dữ liệu dưới dạng các cặp <key, value> - <khóa, giá trị> ; ví dụ,key có thể là tên của tập tin và value nội dung của tập tin, hoặc key là địa chỉ URL và value lànội dung tại URL, v.v Dữ liệu được định nghĩa theo dạng này linh hoạt hơn các bảng dữ liệuquan hệ hai chiều truyền thống (quan hệ cha - con hay còn gọi là khóa chính - khóa phụ)
1.2 Map-Reduce là gì ?
Mô hình Map-Reduce là một mô hình lập trình giúp các ứng dụng có thể xử lý nhanh một lượng lớn dữ liêụ trên các máy phân tán hoạt động song song, độc lập với nhau từ đó giúp rút ngắn thời gian xử lý toàn bộ dữ liệu lớn MapReduce có thể chạy trên các phần cứng thông thường (commodity hardware), không đòi hỏi các server chạy MapReduce phải là các máy tính
có khả năng tính toán, lưu trữ và truy xuất mạnh mẽ Do vậy, chi phí triển khai MapReduce sẽ
rẻ hơn
Map-Reduce làm đơn giản hoá các giải thuật tính toán phân tán Với Map-Reduce, bạn chỉcần cung cấp hai hàm Map và Reduce cùng với một số thành phần xử lý dữ liệu đầu vào Do
Trang 6vậy, các nhà phát triển ứng dụng phân tán có thể tập trung nhiều hơn cho phần logic của ứng dụng, bỏ qua các chi tiết phức tạp của việc phân tán xử lý.
Sự ra đời của Map-Reduce đã mở ra cho các doanh nghiệp cơ hội xử lý các nguồn dữ liệu
đồ sộ với chi phí thấp và thời gian nhanh hơn Với việc áp dụng MapReduce, Amazon có thể xử
lý được các file log phát sinh trong quá trình bán hàng trên mạng, phục vụ cho việc dự đoán xuhướng mua hàng của khách hàng, các sản phẩm đang được mua nhiều… Facebook có thể xử lýđược khối lượng hơn 10 tỷ hình ảnh mà họ đang lưu trữ để rút trích các thông tin về kích thướchình ảnh, phát hiện các hình ảnh xấu
Trang 7CHƯƠNG 2 KIẾN TRÚC MAP-REDUCE ENGINE
2.1 Các thành phần Client Program: Chương trình HadoopMapReduce mà client đang sử dụng và tiến hành
chạy một MapReduce Job
JobTracker: Tiếp nhận job và đảm nhận vai trò điều phối job này, nó có vai trò như bộ
não của Hadoop MapReduce Sau đó, nó chia nhỏ job thành các task, tiếp theo sẽ lên lịch phâncông các task (map task, reduce task) này đến các tasktracker để thực hiện Kèm theo vai tròcủa mình, JobTracker cũng có cấu trúc dữ liệu riêng của mình để sử dụng cho mục đích lưu trữ,
ví dụ như nó sẽ lưu lại tiến độ tổng thể của từng job, lưu lại trang thái của các TaskTracker đểthuận tiện cho thao tác lên lịch phân công task, lưu lại địa chỉ lưu trữ của các output của cácTaskTracker thực hiện maptask trả về
TaskTracker: Đơn giản nó chỉ tiếp nhận maptask hay reducetask từ JobTracker để sau đó
thực hiện Và để giữ liên lạc với JobTracker, Hadoop Mapreduce cung cấp cơ chế gửi heartbeat
từ TaskTracker đến JobTracker cho các nhu cầu như thông báo tiến độ của task do TaskTracker
đó thực hiện, thông báo trạng thái hiện hành của nó (idle, in-progress, completed)
HDFS: là hệ thống file phân tán được dùng cho việc chia sẻ các file dùng trong cả quá
trình xử lý một job giữa các thành phần trên với nhau
Hình 2.1: Kiến trúc map-reduce
Trang 82.2 Cơ chế hoạt động
Hình 2.2: Cơ chế hoạt động của MapReduce
Đầu tiên chương trình client sẽ yêu cầu thực hiện job và kèm theo là dữ liệu đầu vào tớiJobTracker JobTracker sau khi tiếp nhận job này, nó sẽ thông báo ngược về chương trình clienttình trạng tiếp nhận job Khi chương trình client nhận được thông báo nếu tình trạng tiếp nhậnhợp lệ thì nó sẽ tiến hành phân rã dữ liệu đầu vào này thành các split (khi dùng HDFS thì kíchthước một split thường bằng với kích thước của một đơn vị Block trên HDFS) và các split này
sẽ được ghi xuống HDFS Sau đó chương trình client sẽ gửi thông báo đã sẵn sàng đểJobTracker biết rằng việc chuẩn bị dữ liệu đã thành công và hãy tiến hành thực hiện job
Khi nhận được thông báo từ chương trình client, JobTracker sẽ đưa job này vào một stack
mà ở đó lưu các job mà các chương trình client yêu cầu thực hiện Tại một thời điểmJobTracker chỉ được thực hiện một job
Trang 9Sau khi một job hoàn thành, block hay fail, JobTracker sẽ lấy job khác trong stack này(First in first out) ra thực hiện Trong cấu trúc dữ liệu của mình, JobTrack có một job schedulervới nhiệm vụ lấy vị trí các split (từ HDFS do chương trình client tạo), sau đó nó sẽ tạo mộtdanh sách các task để thực thi Với từng split thì nó sẽ tạo một maptask để thực thi, mặc nhiên
số lượng maptask bằng với số lượng split Còn đối với reduce task, số lượng reduce task đượcxác định bởi chương trình client Bên cạnh đó, JobTracker còn lưu trữ thông tin trạng thái vàtiến độ của tất cả các task
Hình 2.3: Mối quan hệ giữa JobTracker và Task Tracker
Ngay khi JobTracker khởi tạo các thông tin cần thiết để chạy job, thì bên cạnh đó cácTaskTracker trong hệ thống sẽ gửi các heartbeat đến JobTracker Hadoop cung cấp cho cácTaskTracker cơ chế gửi heartbeat đến JobTracker theo chu kỳ thời gian nào đó, thông tin bêntrong heartbeat này cho phép JobTrack biết được TaskTracker này có thể thực thi task hay NếuTaskTracker còn thực thi được thì JobTracker sẽ cấp task và vị trí split tương ứng đếnTaskTracker này để thực hiện
Hình 2.4: Mô hình Task Tracker
Khi một TaskTracker nhận thực thi maptask, kèm theo đó là vị trí của input split
trên HDFS Sau đó, nó sẽ nạp dữ liệu của split từ HDFS vào bộ nhớ, rồi dựa vào kiểu
format của dữ liệu input do chương trình client chọn thì nó sẽ parse split này để phát
Trang 10sinh ra tập các record, và record này có 2 trường: key và value Cho ví dụ, với kiểu input format
là text, thì tasktracker sẽ cho phát sinh ra tập các record với key là offset đầu tiên của dòng(offset toàn cục), và value là các ký tự của một dòng Với tập các record này, tasktracker sẽchạy vòng lặp để lấy từng record làm input cho hàm map để trả ra out là dữ liệu gồmintermediate key và value Dữ liệu output của hàm map sẽ ghi xuống bộ nhớ chính, và chúng sẽđược sắp xếp trước ngay bên trong bộ nhớ chính
Hình 2.5: Mô hình JobTracker
Trước khi ghi xuống local disk, các dữ liệu output này sẽ được phân chia vào các partition(region) dựa vào hàm partition, từng partition này sẽ ứng với dữ liệu input của reduce task saunày Và ngay bên trong từng partition, dữ liệu sẽ được sắp xếp (sort) tăng dần theo intermediatekey, và nếu chương trình client có sử dụng hàm combine thì hàm này sẽ xử lý dữ liệu trên từngpartition đã sắp xếp rồi Sau khi thực hiện thành công maptask thì dữ liệu output sẽ là cácpartition được ghi trên local, ngay lúc đó TaskTracker sẽ gửi trạng thái completed của maptask
và danh sách các vị trí của các partition output trên localdisk của nó đến JobTracker
Trang 11Hình 2.6: Cơ chế hoạt động của JobTracker
Sau khi nạp thành công tất cả các region thì TaskTracker sẽ tiến hành merge dữ liệu củacác region theo nhiều đợt mà các đợt này được thực hiện một cách đồng thời để làm gia tănghiệu suất của thao tác merge Sau khi các đợt merge hoàn thành sẽ tạo ra các file dữ liệu trunggian được sắp xếp Cuối cùng các file dữ liệu trung gian này sẽ được merge lần nữa để tạothành một file cuối cùng TaskTracker sẽ chạy vòng lặp để lấy từng record ra làm input chohàm reduce, hàm reduce sẽ dựa vào kiểu format của output để thực hiện và trả ra kết quả outputthích hợp Tất cả các dữ liệu output này sẽ được lưu vào một file và file này sau đó sẽ được ghixuống HDFS
Trang 12CHƯƠNG 3 NGUYÊN LÝ HOẠT ĐỘNG CỦA MAP-REDUCE
Ý tưởng:
Chia vấn đề cần xử lý thành các phần nhỏ để xử lý
Xử lý các phần nhỏ đó một cách song song và độc lập trên các máy tính phân tán
Tổng hợp các kết quả thu được để dưa ra kết quả cuối cùng
3.1 Quá trình Split.
Để có thể phân tán công việc trên hệ thống máy tính, trước tiên cần phải phân nhỏ khối dữliệu đầu vào cần xử lý ra thành nhiều phần, rồi sau đó mới có thể phân công cho mỗi máy xử lý một phần trong số đó Quá trình phân chia dữ liệu này được gọi là Split, Split sẽ dựa vào một
bộ tiêu chí được đặt ra trước để chia nhỏ dữ liệu, mỗi mảnh dữ liệu được chia nhỏ như vậy gọi
là một input split
Hình 3.1: Quá trình Split.
3.2 Quá trình Map và Shuffle
Sau khi các input split được tạo ra, Quá trình Map được thực hiện - hệ thống sẽ phân bố các input split về các máy xử lý, các máy được phân công sẽ tiếp nhận và xử lý input split được giao, ta gọi quá trình diễn ra trên nội bộ mỗi máy trong quá trình Map là Mapper Trước khi được xử lý, input split được định dạng lại thành dữ liệu chuẩn của MapReduce - dữ liệu có dạngcác cặp Kết thúc quá trình Mapper trên mỗi máy, dữ liệu đầu ra cũng có dạng các cặp , chúng
sẽ được chuyển sang cho quá trình Shuffle để phân nhóm theo tiêu chí đã được định trước, chuẩn bị cho bước xử lý phân tán tiếp theo Như vậy, quá trình Shuffle sẽ được thực hiện một cách nội bộ trên mỗi máy chạy Mapper
Hình 2.2: Quá trình Mapper và Shuffle trên 1 máy.
Trang 133.3 Quá trình Reduce
Quá trình Shuffle diễn ra trên nhiều máy nhưng do sử dụng chung một tiêu chí đã được định trước, nên việc phân nhóm dữ liệu trên các máy có sự thống nhất Các nhóm dữ liệu tương ứng với nhau trên tất cả các máy chạy Shuffle sẽ được gom lại chuyển về cho cùng một máy xử
lý, cho ra kết quả cuối cùng Toàn bộ quá trình này được gọi là Reduce, quá trình xử lý trên từng máy trong quá trình Reduce là quá trình Reducer
Hình 3.3: Quá trình Reducer
Hoạt động của MapReduce có thể được tóm tắt như sau:
Đọc dữ liệu đầu vào
Xử lý dữ liệu đầu vào (thực hiện hàm map)
Sắp xếp và trộn các kết quả thu được từ các máy tính phân tán thích hợp nhất
Tổng hợp các kết quả trung gian thu được ( thực hiện hàm reduce)
Đưa ra kết quả cuối cùng
Hình 3.4: Sơ đồ hoạt động
Trang 143.4 Ví dụ bài toán WordCount
Hình 3.4: Ví dụ về bài toán đếm từ
Bài toán word-count (đếm từ) là bài toán dễ hiểu nhất minh hoạ cho MapReduce (MR) Bài toán có những đặc điểm sau:
File cần đếm rất lớn (quá lớn để có thể được tải lên bộ nhớ chính của 1 máy)
Mỗi cặp <từ ngữ, số lượng> quá lớn cho bộ nhớ
Về mặt định nghĩa thuật toán, ta có thể mô tả MapReduce như sau:
Input: dữ liệu dưới dạng Key → Value
Lập trình viên viết 2 thủ tục:
Map(k, v) → <k', v'>*
Reduce(k', <v'>*) → <k', v''>*
Với:
Map biến mỗi key k thu được bằng thành cặp <k', v'>
Reduce nhận đầu vào là khoá k' và danh sách cách giá trị v' và trả về kết quả là cặp <k',v''>
Ví dụ với hình mô tả ở trên thì Map trả về danh sách: <Bear, 1>, <Bear, 1> còn Reduce nhận kết quả trên và trả về <Bear, 2>
Trang 15CHƯƠNG 4 ƯU NHƯỢC ĐIỂM CỦA MAP-REDUCE
4.1 Ưu điểm
4.1.1 Khả năng mở rộng
Hadoop là một nền tảng có khả năng mở rộng cao Điều này phần lớn là do khả nănglưu trữ cũng như phân phối các tập dữ liệu lớn trên nhiều máy chủ Các máy chủ này cóthể không tốn kém và có thể hoạt động song song Và với mỗi bổ sung của một máychủ cung cấp thêm sức mạnh xử lý
Trái ngược với các hệ thống quản lý cơ sở dữ liệu quan hệ truyền thống (RDMS) khôngthể quy mô để xử lý số lượng lớn dữ liệu, lập trình Hadoop MapReduce cho phép các tổchức kinh doanh chạy các ứng dụng từ một số lượng lớn các nút có thể liên quan đếnviệc sử dụng hàng ngàn terabytes dữ liệu
4.1.2 Giải pháp hiệu quả̉̉̉ ̉̉
Cấu trúc có thể mở rộng của Hadoop cũng hàm ý rằng nó là một giải pháp rất hiệu quả
về chi phí cho các doanh nghiệp cần lưu trữ dữ liệu ngày càng tăng theo yêu cầu hiệnnay
Trong trường hợp các hệ thống quản lý cơ sở dữ liệu quan hệ truyền thống, nó trở nêntốn kém để đạt mức độ nhất định với Hadoop, chỉ để xử lí dữ liệu
Hadoop không có mô hình bảo mật và tính phức tạp cao
Hadoop không cung cấp lưu trữ hoặc mã hóa dữ liệu mức mạng, trong khi đây là mốiquan tâm rất lớn đối với dữ liệu ứng dụng đối tượng khách hàng cần độ bảo mật thôngtin như chính phủ, ngân hàng…
HDFS không hiệu quả để xử lý các tập tin nhỏ
MapReduce không thích hợp để sử dụng các trường hợp có nhu cầu truy cập dữ liệuthời gian thực
MapReduce khó biểu diễn dữ liệu đầu ra theo nhu cầu cần sử dụng
Trang 16CHƯƠNG 5 ỨNG DỤNG CỦA MAP-REDUCE
Các job dễ dàng sử dụng Mapreduce:
Thống kê số từ khóa xuất hiện trong các documents
Thống kê số documents có chứa từ khóa
Thống kê số câu match với pattern trong các documents
Thống kê số URLs xuất hiện trong các web pages
Thống kê số lượt truy cập các URLs
Thống kê số từ khóa trên các hostnames
Distributed Sort
Một số bài toán ứng dụng mô hình Map-Reduce
Khi áp dụng mô hình MapReduce, trong quá trình Map, mỗi Mapper sẽ làm việc với mộttập con của tập dữ liệu văn bản, công việc của mỗi Mapper là tìm kiếm và đánh dấu nhữngdòng khớp với biểu thức tìm kiếm trong tập dữ liệu văn bản mà mình phụ trách Kết quả củacác Mapper sẽ được quá trình Reduce gom lại tạo thành kết quả cuối cùng
Mô hình MapReduce rất phù hợp với bài toán sắp xếp dữ liệu Trong quá trình Map, mỗiMapper sẽ chỉ giữ nhiệm vụ đọc dữ liệu lên, Shuffle sẽ phân nhóm dữ liệu theo từng khoảng giátrị, Quá trình Reduce sẽ chịu trách nhiệm sắp xếp dữ liệu, mỗi Reducer sẽ sắp xếp dữ liệu trênkhoảng giá trị được phân công
5.1 Thiết kế hệ thống phân tích và xử
lý mã độc
5.1.1 Phát biểu bài toán
Với nhu cầu xử lý dữ liệu lớn, các mã độc trên mạng ngày càng nhiều, quá trình phát hiện
và xử lý mã độc rất phức tạp, mã độc cần thời gian xử lý ngắn hơn, do đó hướng ứng dụng môhình xử lý phân tán MapReduce để phân tích và xử lý mã độc đang được quan tâm hiện nay.Yêu cầu của hệ thống phân tích và xử lý mã độc: Tính phân tán, Tính an toàn, Tính tựđộng, Tính hiệu năng
5.1.2 Phân tích mã độc dựa trên mô hình MapReduce
Mô hình phân tích mã độc: