Thuật toán MapReduce trong xử lý dữ liệu quan hệ

Một phần của tài liệu XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa (Trang 40 - 46)

3 Thiết kế thuật toán cho MapReduce

3.3Thuật toán MapReduce trong xử lý dữ liệu quan hệ

Phép chiếu: 3.3.1

Hình 12. Phép chiếu Phép chiếu trong MapReduce

Map trên các bộ dữ liệu và đƣa lên bộ dữ liệu mới với các thuộc tính thích hợp, không cần Reducer, trừ khi cần gộp nhóm lại hoặc xếp lại các bộ dữ liệu. Hoặc có thể sử dụng cách khác là thực hiện phép chiếu bên Reducer.

Phép chọn: 3.3.2

Hình 13. Phép chọn Phép chọn trong MapReduce

Chỉ cần sử dụng hàm Map, đƣa vào tập dữ liệu vào lấy ra các bộ dữ liệu thỏa điều kiện.

40

Phép gộp (Group by ) 3.3.3

Ví dụ: Thời gian truy cập trung bình của mỗi URL Trong SQL câu select có dạng:

SELECT url, AVG(time) FROM visits GROUP BY url

Trong MapReduce: Trong hàm map đƣa ra cặp giá trị có dạng <url, time>. Sau đó execution framework sẽ tự động gộp giá trị theo key). Ở hàm reduce ta tính giá trị trung bình của nó và đƣa kết quả ra.

Phép kết nối quan hệ (Relational Join) 3.3.4

41

Thuật toán Relational Join trong MapReduce:

Reduce-side join: Ý tƣởng là map 2 tập dữ liệu và dùng khóa kết nối làm khóa trung gian, bộ dữ liệu dùng làm giá trị trung gian. MapRedue framework bảo đảm các khóa trung gian sẽ đƣợc đƣa đến cùng một Reducer, tất cả các bộ dữ liệu (tuple) sẽ đƣợc gộp theo key – đó là những gì ta cần để thực hiện mộp phép join.

Map-side join: Giả sử có 2 tập dữ liệu và cả hai đƣợc sắp xếp theo join key. Chúng ta có thể thực hiện phép join bằng cách quét lần lƣợt hai tập dữ liệu.

Memory-Backed Join: Khi hai tập dữ liệu có thể chứa đƣợc trong bộ nhớ, ta nạp tập dữ liệu nhỏ hơn vào bộ nhớ ở mỗi Mapper, tạo ra một mảng kết hợp để truy cập đến các bộ dữ liệu dựa trên join key.

42

Chƣơng 4: APACHE HADOOP

4 Apache Hadoop

4.1 Giới thiệu

Apache Hadoop là một phần mềm mã nguồn mở đƣợc viết trên Java bởi Doug Cutting, là một hệ thống quản lý file phân tán và xử lý các file theo framework MapReduce. Hadoop có thể chạy các ứng dụng với lƣợng dữ liệu lớn một cách nhanh chóng, chính xác, hiệu quả cao bằng cách lƣu và tính toán dữ liệu trên nhiều node một cách độc lập. Hadoop có 2 thành phần chủ yếu là HDFS (Hadoop Distributed File System) và MapReduce.

4.2 MapReduce Job

Một công việc MapReduce (MapReduce Job – Hadoop Job) trong một cluster thƣờng đƣợc quản lý bởi một JobTracker và các TaskTracker.

JobTracker 4.2.1

JobTracker làm nhiệm vụ liên lạc giữa chƣơng trình ứng dụng và Hadoop. Một khi gửi code lên cluster, JobTracker quyết định kế hoạch thực thi bằng cách quyết định file nào sẽ đƣợc xử lý, phân chia tasks cho các nodes và theo dõi tất cả các tasks đang chạy. Nếu một task bị lỗi, JobTracker sẽ tự động chạy lại task đó trên node bị lỗi hoặc chạy trên một node khác nếu số lần chạy lại vƣợt quá số lần cho phép.

Mỗi cluster có một JobTracker và thƣờng chạy trên cùng server với Namenode.

TaskTracker 4.2.2

Cũng nhƣ HDFS, JobTracker và TaskTracker cũng sử dụng kiến trúc master-slave: JobTracker là master theo dõi toàn bộ việc thực thi của mộ MapReduce Job và TaskTracker quản lý việc thực thi của các task riêng lẻ trên mỗi slave node.

Hình 14 là sơ đồ tƣơng tác giữa các TaskTracker và JobTracker trong một Hadoop cluster. Sau khi nhận nhiệm vụ từ client, JobTracker phân hoạch công việc thành các tác vụ Map và Reduce và giao cho từng TaskTracker trong cluster. Theo định kỳ trong lúc đang hoạt động, TaskTracker gởi tín hiệu về JobTracker. Nếu vƣợt quá một khoảng thời gian nào đó mà JobTracker không nhận đƣợc tín hiệu từ một TaskTracker, có nghĩa là TaskTracker đó bị lỗi, khi đó JobTracker hủy nhiệm vụ đã giao cho TaskTracker lỗi và khởi động một TaskTracker khác để giao nhiệm vụ cho nó.

43 (adsbygoogle = window.adsbygoogle || []).push({});

Hình 15. Sự liên hệ giữa JobTracker và TaskTracker

Hình 16. Sơ đồ đầy đủ của một Hadoop Cluster

Sơ đồ trên cho thấy rõ kiến trúc master-slave, NameNode và JobTracker là masters, trong khi DataNode và TaskTracker là slaves.

Hình 17 là một sơ đồ thực thi một ứng dụng MapReduce trong Hadoop. Đầu tiên, tập dữ liệu đầu vào hệ thống HDFS chia thành các block (kích thƣớc mặc định thƣờng

44 là 64MB) và gởi tới thành phần InputFormat và đƣợc InputFormat chia thành các cặp key-value. Tiếp theo, thành phần Record Reader (RR) đọc các cặp key-value và chuyển vào đầu vào của các Map. Các cặp key-value ở đầu ra của Map đƣợc thành phần Partitioner chia thành các partition (mỗi partition tƣơng ứng với một Reduce) tƣơng ứng với Reducer mà chúng sẽ đƣợc chuyển đến bởi tiến trình shuffling. Trƣớc khi đƣợc chuyển đến Reduce, các cặp key-value đƣợc tiến trình Sort sắp xếp sao cho các cặp có cùng key đƣợc xếp cạnh nhau (nhóm các cặp key-value theo key). Đầu ra của hàm reduce là các cặp key-value đƣợc thành phần OutputFormat ghi ngƣợc trở lại hệ thống HDFS.

45

4.3 Các hàm API cơ bản của Hadoop

public interface Mapper<K1, V1, K2, V2> extends JobConfigurable, Closeable { void map(K1 key, V1 value, OutputCollector<K2, V2> output, Reporter reporter) throws IOException;

}

public interface Reducer<K2, V2, K3, V3> extends JobConfigurable, Closeable { void reduce(K2 key, Iterator<V2> values, OutputCollector<K3, V3> output, Reporter reporter) throws IOException;

}

OutputCollector dùng để đƣa dữ liệu ra (vì thế tham số của nó cùng kiểu với đầu ra). Reporter dùng để cập nhật bộ đếm (counters) và trạng thái. Chú ý: trong các phiên bản Hadoop sau này (từ 0.20 trở đi) thì OutputCollector và Reporter đƣợc viết chung thành một lớp Context.

public interface Partitioner<K2, V2> extends JobConfigurable { int getPartition(K2 key, V2 value, int numPartitions);

}

Hàm getPartition lấy giá trị đầu vào là cặp key-value trung gian (K2, V2) và số lƣợng partition và trả về chỉ mục của partition .

Một phần của tài liệu XỬ lý dữ LIỆU PHÂN tán với MAPREDUCE và xây DỰNG ỨNG DỤNG MINH họa (Trang 40 - 46)