1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thuật toán đánh chỉ mục ngược với mapreduce và ứng dụng trong việc đánh giá ý kiến của học sinh hòa bình trên mạng xã hội

77 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 77
Dung lượng 2,98 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mô hình MapReduce là một mô hình lập trình giúp các ứng dụng có thể xử lý nhanh hơn một lượng dữ liệu lớn dữ liệu trện các máy phần tán song song, độc lập với nhau từ đó giúp rút ngắn th

Trang 1

i

ĐẠI HỌC THÁI NGUYÊN

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

Lê Đinh Hợp

Thuâ ̣t toán đánh chỉ mục ngược với MapReduce

và ư ́ ng du ̣ng trong việc đánh giá ý kiến của học sinh Hòa Bình trên mạng xã hội

Chuyên ngành: Khoa học máy tính

Mã số : 60 48 01 01

Người hướng dẫn khoa học: PGS TS Đỗ Trung Tuấn

Thái Nguyên, 12 - 2016

Trang 2

Lời cam đoan

Tôi xin cam đoan:

Những kết quả nghiên cứu được trình bày trong luận văn là hoàn toàn trung thực, của tôi, không vi phạm bất cứ điều gì trong luật sở hữu trí tuệ và pháp luật Việt Nam Nếu sai, tôi hoàn toàn chịu trách nhiệm trước pháp luật

TÁC GIẢ LUẬN VĂN

Lê Đinh Hợp

Trang 3

Lời cám ơn

Tôi xin chân thành cảm ơn Trường Đại học Công nghệ thông tin và Truyền thông - Đại học Thái Nguyên đã tạo điều kiện thuận lợi cho tôi hoàn thành khóa học này

Tôi xin chân thành cảm ơn các Thầy Cô giáo – Các nhà khoa học đã trực tiếp giảng dạy truyền đạt những kiến thức chuyên ngành Khoa học máy tính cho tôi trong những tháng năm học tập tại trường

Đặc biệt tôi xin bày tỏ lòng biết ơn chân thành và sâu sắc tới PGS TS Đỗ Trung Tuấn đã tận tình hướng dẫn, dìu dắt và chỉ bảo cho tôi những kiến thức về chuyên môn thiết thực và những chỉ dẫn khoa học quý báu để tôi hoàn thành bản luận văn này

Luận văn này còn nhiều thiếu sót, rất mong được các thầy cô giáo trong hội đồng chấm luận văn xem xét, góp ý kiến để luận văn được hoàn thiện hơn

Tôi xin chân thành cảm ơn!

Thái Nguyên, tháng 12 năm 2016

Trang 4

Mục lục

Lời cam đoan i

Lời cám ơn iii

Mục lục iv

Danh sách các từ viết tắt vi

Danh mục các hình vẽ, bảng biểu vii

Chương mở đầu 9

Đặt vấn đề 9

Đối tượng và phạm vi nghiên cứu 11

Hướng thực hiện đề tài 11

Những nội dung nghiên cứu chính 11

CHƯƠNG 1MÔ HÌNH MapReduce 12

1.1 Tổng quan về MapReduce 12

1.1.1 Sự quan trọng của MapReduce 12

1.1.2 Các ý tưởng của MapReduce 13

1.1.3 Cấu trúc dữ liệu trong MapReduce 15

1.1.4 Mapper và Reducer 15

1.1.5 Partitioner và Combiner 17

1.2 Bộ khung thực thi 19

1.2.1 Lập lịch 19

1.2.2 Di chuyển dữ liệu và mã lệnh 19

1.2.3 Đồng bộ hóa 20

1.2.4 Xử lý lỗi 20

1.3 Hệ thống file phân tán 20

1.3.1 Kiến trúc của HDFS 21

1.3.2 Nhiệm vụ của NameNode 21

1.3.3 Nhiệm vụ của DataNode 22

1.3.4 Nhiệm vụ của Secondary NameNode 23

CHƯƠNG 2THUẬT TOÁN XỬ LÝ DỮ LIỆU VĂN BẢN VỚI MapReduce 25 2.1 Thiết kế thuật toán MapReduce cơ bản 25

Trang 5

2.1.1 Gộp lớn cục bộ 26

2.1.2 Bộ hai và bộ ba 30

2.1.3 Tính toán tần số tương đối 33

2.1.4 Sắp xếp thứ cấp 36

2.2 Thuật toán tính chỉ mục ngược để tìm kiếm dữ liệu văn bản 36

2.2.1 Dò tìm Web 37

2.2.2 Thuật toán chỉ mục ngược 39

2.2.3 Cài đặt theo cơ bản 41

2.2.4 Cài đặt thuật toán cải tiến 43

2.2.5 Nén chỉ mục 45

2.3 Về tìm kiếm 52

CHƯƠNG 3THỬ NGHIỆM THUẬT TOÁN ĐÁNH GIÁ Ý KIẾN TRÊN MẠNG XÃ HỘI 56

3.1 Mã nguồn mở Solr 56

3.1.1 Giới thiệu 56

3.1.2 Các tính năng chính của Solr: 56

3.2 Mã nguồn mở Nutch 56

3.2.1 Các lý do để tự xây dựng một Search Engine 56

3.2.2 Các tính năng chính của Nutch 57

3.3 API biểu đồ Facebook 58

3.4 Solr trên Hadoop và tìm kiếm thử nghiệm 60

3.4.1 Sơ đồ 60

3.4.1 Cài đặt cụm máy Hadoop 62

3.4.2 Cài đặt Nutch tích hợp với Solr 67

3.4.3 Thu thập dữ liệu 69

3.5 Thực hiện tìm kiếm thử nghiệm trên tập chỉ mục đã thu thập được 72

Kết luận 75

Trang 6

Danh sách các từ viết tắt

CNTT Công nghệ Thông tin

HDFS Hadoop Distributed File System URL Uniform Resource Locator

HTML HyperText Markup Language

HPC High-Performance Computing NAS Network-Attach Storage

SAN Storage Area Network

SPOF Single Point Of Failure

APW Associated Press Wordstream REST Representational State Transfer PRAM Parallel Random Access Machine BSP Bulk Synchronous Parallel

Trang 7

Danh mục các hình vẽ, bảng biểu

Hình 1.1 Mô hình chia để trị 14

Hình 1.2 Hàm Map và Fold trong Functional Programming 15

Hình 1.3 Hai pha Map và Reduce của một MapReduce job 16

Hình 1.4 Mô hình MapReduce đầy đủ các thành phần 19

Hình 1.5 Kiến trúc của HDFS 21

Hình 1.6 Vai trò của NameNode và DataNode trong HDFS 23

Hình 1.7 Kiến trúc HDFS đầy đủ 23

Hình 2.1 Bảo toàn trạng thái trong Hadoop 26

Hình 2.2 Tiến trình hoạt động của chương trình WordCount 27

Hình 2.3 Thời gian chạy của thuật toán "pairs" và "stripes" 32

Hình 2.4 Ví dụ minh họa cặp giá trị 35

Hình 2.5 Minh họa đơn giản của một chỉ mục ngược 40

Hình 2.6: Minh họa đơn giản cơ sở thuật toán lập chỉ mục ngược trong MapReduce với ba mapper và hai reducer 43

Hình 2.7 Mười số nguyên dương đầu tiên trong nguyên phân, γ, và mã Golomb (b = 5, 10) 49

Hình 2.8 Ma trận Term-document 53

Hình 3.1 Sơ đồ hoạt động của Nutch khi sử dụng như một Crawler 57

Hình 3.2 Sơ đồ đầy đủ của Nutch khi sử dụng như một Search Engine 58

Hình 3.3 Facebook 58

Hình 3.4 Trao đổi qua API 59

Hình 3.5: Mô hình tổng quan của hệ thống khảo sát 60

Hình 3.6: Sơ đồ giai đoạn đánh chỉ mục 61

Hình 3.7: đánh chỉ mục với MapRedece trên Solr 61

Hình 3.8: Giao diện làm việc của Solr 68

Hình 3.9: Giao diện làm việc của Facebook Graph API 69

Hình 3.10: Access Token của một trình Facebook Graph API 70

Trang 8

Hình 3.11: Thu thập dữ liệu từ trang mạng của trường THPT Hoàng Văn Thụ 70

Hình 3.12:Giao diên theo dõi quá trình làm việc của MapReduce 71

Bảng 3.2: Kết quả thu thập dữ liệu ở 2 chế độ 72

Hình 3.13: Giao diện trang web tìm kiếm trên Solr 73

Bảng 3.3: Một số kết quả truy vấn theo chủ đề 73

Trang 9

Chương mở đầu Đặt vấn đề

Trong thời đại hiện nay, công nghệ thông tin được ứng dụng tại mọi lĩnh vực trong cuộc sống, với một hệ thống máy tính người ta có thể làm được rất nhiều công việc, tiết kiệm được thời gian, công sức và tiền bạc Với sự phát triển vượt bậc của Internet hiện nay, lượng thông tin ngày càng nhiều, sự tăng trưởng

có thể nói là được tính bằng cấp số nhân, theo một nghiên cứu thì cứ khoảng 5 năm thì lượng tri thức của nhân loại sẽ tăng gấp đôi, với lượng thông tin đồ sộ trên mạng hiện nay thì việc tìm kiếm và khai thác thông tin là một công việc hết sức quan trọng, mang lại nhiều lợi ích về khoa học và kinh tế

Cùng với sự ra đời của Internet, sự xuất hiện và phát triển không ngừng của lĩnh vực thương mại điện tử, các lĩnh vực nghiên cứu xã hội khiến cho việc xúc tiến các hoạt động kinh doanh hoặc nghiên cứu, quảng bá sản phẩm dịch vụ diễn ra trên khắp các kênh thông tin xã hội, đặc biêt là trên Internet

Như chúng ta đã biết ngày nay mọi thông tin đều được đưa lên các trang mạng xã hội dưới dạng các Posts và rất nhiều người dùng để lại các nhận xét (comments) về các thông tin được đưa lên, ta thấy đó chính là một kho thông tin

vô cùng hưu ích, nếu ta có thể tìm kiếm và phân loại dữ liệu ấy, chúng ta có thể thu được các kết quả khảo sát cần thiết phục vụ cho các hoạt động nghiên cứu hoặc các hoạt động sản xuất kinh doanh Kết quả khảo sát ấy có thể là những tỉ lệ như "thích" (like) hay là không có ý kiến gì đối với một vấn đề được đưa ra Việc tìm kiếm và xử lý và tổng hợp các thông tin hưu ích đó cần phải có một mô hình đáp ứng được nhu cầu về việc có thể làm việc trên một lượng dữ liệu lớn và tốc

độ cao

Mô hình MapReduce là một mô hình lập trình giúp các ứng dụng có thể

xử lý nhanh hơn một lượng dữ liệu lớn dữ liệu trện các máy phần tán 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 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ó cấu hình đặc biết mạnh

mẽ Do vậy chi phí triển khai Mapreduce sẽ rẻ hơn

MapReduce làm đơn giản hóa các giải thuật tính toán phân tán Với MapReduce, 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 vậ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

Trang 10

tạp của việc phân tán xử lý Sự ra đời của MapReduce đã mở ra cho các doanh nghiện và các trung tâm nhiên cứu 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 Hiện nay, đã có nhiều công ty lớn triển khai sử dụng mô hình MapReduce trong việc kinh doanh và khảo sát

Công ty Amazon sử dụng MapReduce để xử lý các file log trong quá trình mua hàng của khách hàng để dự đoán được xu hướng mua hàng

Facebook có thể xử lý được khối lượng hơn 10 tỷ hình ảnh mà hộ đang lưu trữ để thu thập các thông tin về hình ảnh, và thu thập 15 terabyte dữ liệu mỗi ngày vào một kho dữ liệu quy mô Petabyte để thực hiện việc khảo sát và đánh giá

xu hướng người dùng

Việc nghiên cứu về xu hướng, đánh giá khảo sát một vấn đề trên quy mô lớn luôn là 1 vấn đề gặp nhiều khó khăn Trước đây các nhà khảo sát, đánh giá ý kiến trên các đối tượng nghiên cứu thường sử dụng phương pháp thủ công rất tốn kém và mất rất nhiều thời gian để tổng hợp tin tức, chẳng hạn như muốn khảo sát

ý kiến của học sinh đối với một số thay đổi trong chương trình học, người ta không thể lựa chọn hỏi ý kiến của tất cả các học sinh mà chỉ có thể lựa chọn một

số địa điểm đặc trưng để thực hiện khảo sát, và đôi khi, kết quả của những khảo sát này không mang được tính khách quan vì tâm lý e ngại của các em học sinh

Và những cuộc khảo sát này, đôi khi phải thực hiện trong vòng một vài năm mới

có thể có kết quả tổng hợp Như vậy là mất rất nhiều công sức, của cải và thời gian Với việc thực trạng hiện nay hầu hết rất cả các em trong lứa tuổi học sinh, sinh viên đều biết sử dụng và thích tham gia các mạng xã hội trên Internet ( đặc biết là Facebook) thì việc tìm kiếm một từ khóa có tần suất xuất hiện cao sẽ phản ánh được những xu hướng, những ý kiến của người dùng hơn là việc khảo sát thủ công rất nhiều và việc nhận về những kết quả khảo sát ý kiến Tổng hợp các thông tin trên máy tính với sự hỗ trợ của mô hình MapReduce sẽ giúp chúng ta

có thể thực hiện quá trình đánh giá, khảo sát ý kiến hết sức nhanh chóng và mang lại hiệu quả, cũng như tiết kiệm được rất nhiều thời gian và tiền bạc

Với những nhu cầu cấp thiết trên, học viên thực hiện nghiên cứu kỹ thuật chỉ mục ngược (Inverted Indexing) đó là phương pháp thực hiện quét một lần trên văn bản sau đó lập danh sách các thuật ngữ (từ, cụm từ) trong file đó và bao gồm cả những thông tin đi kèm với mỗi thuật ngữ (term) ( vị trí, tần suất, độ quan trọng ) Các thông tin này sẽ được tổ chức theo một cấu trúc dữ liệu riêng và được gọi là chỉ mục Với phương pháp đánh chỉ mục ngược kết hợp với mô hình MapReduce sẽ giải quyết được những hạn chế trước đây trong phương pháp thông kê, đánh giá ý kiến trên một quy mô lớn, và đó là lý do học viên lựa chọn

Trang 11

đề tài "Thuật toán đánh chỉ mục ngược với MapReduce và ứng dụng trong việc

đánh giá ý kiến của học sinh Hòa Bình trên mạng xã hội"

Đối tượng và phạm vi nghiên cứu

Luận văn tập trung nghiên cứu vào mô hình MapReduce, cấu trúc và cách thức hoạt động Từ đó kết hợp với thuật toán đánh chỉ mục và chỉ mục ngược để thực hiện việc tìm kiếm và thống kê kết quả

Hướng thực hiện đề tài

 Nghiên cứu về mô hình MapReduce

 Nghiên cứu về thuật toán đánh chỉ mục và chỉ mục ngược

 Thực hiện thử nghiệm và cài đặt

Những nội dung nghiên cứu chính

Luận văn được trình bày trong 3 chương Các nội dung cơ bản của luận văn được trình bày theo cấu trúc như sau:

1 Chương 1: Tổng quan về MapReduce; Giới thiệu khái niệm về MapReduce, một số các thành phần, mô hình lập trình của MapReduce và hệ thống phân phối tập tin của nó; Trình bày nhu cầu về đánh giá ý kiến trên mạng xã hội và khả năng áp dụng

2 Chương 2: Thuật toán xử lý dữ liệu văn bản với MapReduce; Trình bày về thiết kế thuật toán MapReduce cơ bản và thuật toán chỉ mục ngược để tìm kiếm văn bản;

3 Chương 3: Thử nghiệm ứng dụng MapReduce và thuật toán đánh chỉ mục ngược để đánh giá ý kiến trên mạng xã hội; Trình bày mô hình hoạt động của ứng dụng đánh giá ý kiến trên mạng xã hội Các kết quả thử nghiệm của hệ thống tìm kiếm và đánh giá ý kiến trên

dữ liệu văn bản có sử dụng MapReduce và thuật toán tính chỉ mục ngược

Trang 12

CHƯƠNG 1

MÔ HÌNH MapReduce

1.1 Tổng quan về MapReduce

1.1.1 Sự quan trọng của MapReduce

Về tính thiết thực, MapReduce cung cấp một công cụ rất hiệu quả để giải quyết các bài toán dữ liệu lớn Ngoài ra, MapReduce còn quan trọng trong cách nó đã thay đổi việc sắp xếp tính toán trên quy mô lớn

Nói một cách công bằng thì MapReduce không phải là mô hình tính toán song song đầu tiên được đưa ra Mô hình phổ biến nhất trong lý thuyết khoa học máy tính có từ mấy thập kỷ trước là PRAM1 (Parallel Random Access Machine) Trong mô hình này, một lượng lớn các vi xử lý chia sẻ một bộ nhớ lớn không giới hạn, hoạt động đồng thời trên một lượng dữ liệu chia sẻ để tạo

ra kết quả Các mô hình khác như LogP2

và BSP3 (Bulk Synchronous Parallel), tuy nhiên không có mô hình nào có được sự thành công như MapReduce

MapReduce là mức trừu tượng thành công nhất trên các tài nguyên tính toán mở rộng cho đến nay Tuy nhiên, mức trừu tượng giải quyết sự phức tạp bằng cách che dấu sự chi tiết và đưa ra các hành vi được thiết kế tốt cho người

sử dụng ứng với mức trừu tượng đó Chính vì thế, mức trừu tượng không thể hoàn hảo, nó làm cho một số công việc dễ hơn, nhưng cũng làm một số công việc khác khó hơn hoặc có khi là không thể thực hiện được Vấn đề này làm cho việc ứng dụng MapReduce trong một số bài toán cũng có mặt hạn chế Điều đó có nghĩa MapReduce không phải là mô hình cuối cùng trong lớp mô hình lập trình mới cho phép xử lý tính toán trên quy mô lớn một cách hiệu quả

1 http://en.wikipedia.org/wiki/Parallel_Random_Access_Machine

2 http://en.wikipedia.org/wiki/LogP_machine

3 http://en.wikipedia.org/wiki/Bulk_Synchronous_Parallel

Trang 13

1.1.2 Các ý tưởng của MapReduce

Giải quyết các bài toán dữ liệu lớn đòi hỏi cách tiếp cận riêng biệt mà nhiều khi đối lập với mô hình tính toán truyền thống Dưới đây là các ý tưởng chính của MapReduce:

Scale “out” not “up” (mở rộng chứ không nâng cấp): Để tăng sức mạnh

xử lý thay vì nâng cấp bộ vi xử lý cũng như khả năng lưu trữ của máy tính (mua các server có khả năng xử lý cao – high-end server) giải pháp đưa ra là tăng số lượng các server thông dụng (low-end server) Giải pháp này kinh tế hơn nhiều so vì nó chỉ bổ sung một số máy tính và tận dụng được các server sẵn có trong khi giải pháp nâng cấp có thể dẫn đến việc mua sắm mới lại toàn

bộ các server Hơn nữa giá thành của một server chuyên dụng đắt hơn nhiều so với một cụm máy tính thông thường với khả năng xử lý tương đương

Assume failures are common (chấp nhận việc xảy ra lỗi là thường xuyên): Với sự gia tăng về số lượng của các server trong một cluster, lỗi xảy ra

là điều bình thường Do đó các dịch vụ phân tán trên nhiều server phải tính toán đến các lỗi về phần cứng cũng như phần mềm thường xuyên xảy ra Mô hình lập trình MapReduce có khả năng xử lý các lỗi thông qua một số cơ chế như tự động khởi động lại các task trên cluster node khác nhau

Move processing to the data (đưa xử lý đến dữ liệu): Trong các ứng

dụng tính toán hiệu năng cao truyền thống (High – Prefomance Computing - HPC) Thông thường, một siêu máy tính có các nút xử lý (processing node) và các nút lưu trữ (storage node) được kết nối với nhau qua một kết nối tốc độ cao Nhiều công việc nặng nề về dữ liệu không phải là những đòi hỏi xử lý cao Do đó việc tách rời việc lưu trữ dữ liệu và tính toán tạo ra sự thắt cổ chai trong mạng Do đó sẽ hiệu quả hơn nếu chuyển sự thực thi xử lý đến dữ liệu thay vì chuyển dữ liệu đến nơi xử lý chúng MapReduce sử dụng một kiến trúc trong đó các bộ xử lý và đĩa lưu trữ được đặt cùng với nhau Trong sự thiết lập như vậy, chúng ta có thể tận dụng lợi thế của dữ liệu cục bộ bằng cách chạy đoạn mã trên bộ xử lý một cách trực tiếp trên khối dữ liệu cần xử lý Hệ thống tập tin phân tán có nhiệm vụ quản lý dữ liệu mà MapReduce xử lý

Process data sequentially and avoid random access (xử lý dữ liệu tuần

tự và tránh truy cập ngẫu nhiên): Trong trường hợp xử lý một lượng lớn dữ

liệu, dung lượng bộ nhớ thường không đủ cho toàn bộ dữ liệu xử lý Do đó dữ liệu phải được lưu trữ trên đĩa Thời gian cho việc truy cập ngẫu nhiên thường hạn chế bởi sự di chuyển của đầu đọc cũng như tốc độ đĩa do đó làm chậm công việc xử lý Để tránh hạn chế này, MapReduce được thiết kế để xử lý các

Trang 14

khối dữ liệu của một tập dữ liệu lớn

Hide system-level details from the application developer (che giấu mức chi tiết hệ thống đối với nhà phát triển): Để dễ dàng cho các lập trình viên

khi viết ứng dụng xử lý phân tán, MapReduce che giấu sự thực thi phức tạp bên dưới Thay vào đó, MapReduce cung cấp một mô hình lập trình trừu tượng với các interface đơn giản được định nghĩa sẵn

Phương pháp thường được sử dụng để giải quyết các bài toán dữ liệu lớn hiện nay là chia để trị Ý tưởng là phân mảnh một bài toán lớn thành các bài toán con nhỏ Các bài toán nhỏ độc lập với nhau để có thể được giải quyết song song bởi các workers khác nhau – workers có thể là các tiến trình trong bộ vi xử lý hoặc các bộ vi xử lý trong trong bộ vi xử lý đa nhân, các bộ xử lý trên một máy, các máy trên một cụm máy tính Các kết quả trung gian từ các worker cụ thể sẽ được gộp lại để tạo thành kết quả cuối cùng

Hình 1.1 Mô hình chia để trị

MapReduce có nguồn gốc từ lập trình hàm (Functional Programming) Ví

dụ điển hình như các ngôn ngữ lập trình Lispvà ML Tính năng chính của lập trình hàm là khái niệm về các hàm bậc cao (higher-order functions), hoặc các hàm chấp nhận tham số của nó là một hàm Hai hàm bậc cao thường được xây dựng sẵn là Map và Fold

Như hình dưới, cho một danh sách, Map lấy tham số là một hàm f (có 1 tham số) và áp dụng cho toàn bộ phần tử trong danh sách Cho một danh sách, Fold lấy tham số là một hàm g (có 2 tham số) và một giá trị khởi tạo: g đầu tiên được áp dụng cho giá trị khởi tạo và phần tử đầu tiên trong danh sách, kết quả

Trang 15

được lưu trong biến trung gian, tiếp tục dùng biến trung gian này để phần tử thứ

2 trong danh sách để làm tham số cho hàm g, công việc tiếp lặp đi lặp lại đến khi hết toàn bộ danh sách Fold trả về kết quả cuối cùng là giá trị cuối cùng của biến trung gian

Hình 1.2 Hàm Map và Fold trong Functional Programming

Hàm Map trong MapReduce tương ứng với hàm Map, hàm Reduce tương ứng với hàm Fold trong lập trình hàm

1.1.3 Cấu trúc dữ liệu trong MapReduce

Các cặp key-value là cấu trúc dữ liệu cơ bản trong MapReduce Key và value có thể nhận các giá trị có kiểu cơ bản như số nguyên, số thực, chuỗi hay có thể nhận các kiểu giá trị có cấu trúc do người dùng định nghĩa

Một phần quan trọng của giải thuật MapReduce là việc xác định cấu trúc key-value trên các tập dữ liệu cần xử lý Ví dụ, đối với một tập các trang web, các key có thể là các URL và các value có thể là nội dung của các trang HTML, đối với một đồ thị, key có thể là node id và value có thể là danh sách kề của node

đó Trong một số thuật toán key được sử dụng để phân biệt các bộ dữ liệu (giống như khái niệm khóa trong cơ sở dữ liệu), trong khi ở một số thuật toán, các input key không quan trọng và thường được bỏ qua

Trang 16

Mapper và Reducer Mapper được áp dụng cho mọi cặp key-value để tạo ra các cặp key-value trung gian Reducer được áp dụng cho tất cả các giá trị (value) ứng với cùng một key trung gian để tạo các cặp key-value ở đầu ra Giữa 2 pha map

và reduce là một phép xử lý nhóm phân tán các cặp key-value trung gian dựa trên các key Dữ liệu trung gian được gởi đến mỗi reducer theo thứ tự được sắp xếp bởi các key Tuy nhiên không có một quan hệ thứ thự nào được thiết lập cho các key giữa các reducer với nhau Các cặp key-value ở đầu ra của các reducer được ghi vào hệ thống file phân tán (các cặp key-value trung gian được bỏ qua) Đầu

ra cuối cùng là r file trên hệ thống file phân tán, trong đó r là số các reducer Trong phần lớn các trường hợp, việc tổng hợp các đầu ra của các reducer là không cần thiết bởi vì r files thường lại là đầu vào cho một MapReduce job khác Hình 5 mô tả 2 giai đoạn của một MapReduce job

Hình 1.3 Hai pha Map và Reduce của một MapReduce job

Ví dụ minh họa MapReduce: Ứng dụng đếm từ (Word count) trong một tập văn bản

Trang 17

for all term t ϵ doc d do Emit (term t, count 1)

1.1.5 Partitioner và Combiner

Phần trên chúng ta đã làm đơn giản cái nhìn về MapReduce, ngoài hai thành phần Mapper và Reducer, thường thì lập trình viên phải chỉ thêm 2 thành phần phụ nữa:

1.1.5.1 Thành phần Partitioner

Nó có nhiệm vụ chia không gian khóa (key) trung gian sau bước Map và gán các cặp key-value trung gian tới các Reduce Hay nói một cách khác, partitioner chỉ định tác vụ (task) mà cặp key-value trung gian phải được chuyển đến đó Trong mỗi Reducer, các khóa được xử lý theo thứ tự đã được sắp xếp Partitioner đơn giản nhất bao gồm việc tính toán giá trị băm của key và sau đó thực hiện phép chia lấy phần dư của giá trị này với số lượng reducer Do đó các partitioner có thể gán một key và danh sách value của nó tới một reducer có số hiệu là giá trị băm vừa tính được Thông thường hàm băm phải được tính toán sao cho số lượng key gửi đến mỗi reducer xấp xỉ bằng nhau Tuy nhiên partitioner không chú ý đến giá trị value trong cặp key-value, do đó có thể xảy ra tình trạng phân bố dữ liệu không đồng đều trên các reducer

1.1.5.2 Thành phần Combiner

Thành phần này trong MapReduce đóng vai trò như một thành phần tối ưu giúp giảm tải việc chuyển dữ liệu giữa từ các Mapper đến các Reducer Có thể

Trang 18

xem combiner như là một reducer nhỏ (mini-reducer) đặt tại đầu ra của mapper, trước pha trộn và sắp xếp (shuffle and sort phase) gởi các cặp key-value tới các reducer Mỗi combiner hoạt động cô lập và do đó nó không truy xuất đến các cặp key-value của các mapper khác Đầu vào của combiner là các cặp key-value từ đầu ra của mapper và nó xử lý tất cả các cặp key-value có key giống nhau để chuyển thành cặp key-value (cùng định dạng như ở đầu vào của combiner có key không thay đổi nhưng value đã bị biến đổi) ở đầu ra Tuy nhiên, Reducer và Combiner không thể hoán đổi vai trò cho nhau

Trang 19

Hình 1.4 Mô hình MapReduce đầy đủ các thành phần

1.2 Bộ khung thực thi

Một trong những ý tưởng quan trọng nhất trong MapReduce là tách biệt việc xử

lý phân tán cái gì (what) ra khỏi việc xử lý phân tán như thế nào (how) Một chương trình MapReduce (Mapreduce Job), bao gồm đoạn mã cho Mapper, Reducer và có thể thêm Partioner và Combiner được đóng gói lại với nhau với các tham số cấu hình (ví dụ

vị trí các tập tin đầu vào và nơi lưu trữ đầu ra) Nhà phát triển đưa chương trình lên cho node quản lý tác vụ trong cluster (trong Hadoop gọi là JobTracker) và execution framework xử lý tất cả những thứ khác: xử lý trong suốt các vấn đề của việc thực thi mã lệnh phân tán Các chức năng chính của Execution framework bao gồm:

1.2.1 Lập lịch

Mỗi chương trình MapReduce được chia nhỏ thành các đơn vị nhỏ gọi là tasks

Ví dụ, một map task có thể chịu trách nhiệm xử lý một khối các cặp key-value nào đó (trong Hadoop gọi là input split), tương tự, một reduce task có thể xử lý một phần của không gian khóa

1.2.2 Di chuyển dữ liệu và mã lệnh

Ý tưởng của MapReduce là di chuyển mã lệnh, không phải di chuyển dữ liệu

Trang 20

Tuy nhiên, trong một số trường hợp – để cho việc tính toán có thể thực hiện chúng ta phải đưa dữ liệu đến mã lệnh Trong MapReduce, việc này phụ thuộc phần lớn vào hệ thống file phân tán Để có được việc cục bộ dữ liệu, scheduler phải khởi động task tại node có chứa khối dữ liệu cần thiết cho task đó Nếu không thể được (do đang chạy quá nhiều task), một task mới sẽ được khởi tạo ở node khác và dữ liệu được truyền qua mạng đến node đó để xử lý

1.2.3 Đồng bộ hóa

Việc đồng bộ hóa chỉ đến các cách thức để các tiến trình đang xử lý đồng thời có thể hợp lại (“join up”), ví dụ chia sẻ kết quả trung gian hoặc trao đổi thông tin trạng thái Trong MapReduce, việc đồng bộ hóa xảy ra giữa pha map và reduce Các cặp key-value trung gian phải được gộp theo khóa, điều này đạt được bằng một phép toán sắp xếp phân tán lớn trên tất cả các node đã chạy map tasks và tất cả các node sẽ chạy reduce tasks

Dữ liệu trung gian được copy qua mạng, vì thế tiến trình này thường được gọi là

“shuffle and sort” Một chương trình MapReduce với m mapper và r reducer có thể có tới m x r phép toán copy vì mỗi mapper có thể có đầu ra đến tất cả các reducer

1.2.4 Xử lý lỗi

MapReduce framework phải hoàn thành tất cả các tasks trong môi trường xảy ra lỗi thường xuyên Vì MapReduce được thiết kế dành cho các cụm máy giá rẻ (low-end) nên việc thực thi có thể sẽ dễ xảy ra lỗi, đặc biệt trong các cụm lớn, lỗi đĩa cứng và RAM sẽ xảy ra thường xuyên MapReduce frame work phải xử lý được các việc này

1.3 Hệ thống file phân tán

Chúng ta đã tập trung nhiều vào việc xử lý dữ liệu lớn Nhưng một điều không kém phần quan trọng đó là: nếu không có dữ liệu thì chúng ta không có gì để xử lý cả Trong tính toán hiệu năng cao (HPC – High-Performance Computing) và các kiến trúc cụm truyền thống, việc lưu trữ được xem là một thành phần tách biệt với việc tính toán

Có nhiều cách cài đặt khác nhau, trong đó có Network-Attach Storage (NAS) và Storage Area Network (SAN) là được sử dụng thường xuyên Tuy nhiên với cách cài đặt nào đi nữa thì chu trình xử lý vẫn không thay đổi: các node tính toán lấy đầu vào từ nơi lưu trữ, nạp dữ liệu vào bộ nhớ, xử lý dữ liệu và ghi kết quả ngược trở lại

Khi kích thước dữ liệu càng tăng lên thì khả năng xử lý cũng phải tăng lên Nhưng khi khả năng xử lý tăng thì sự liên kết giữa node lưu trữ và node xử lý lại trở thành một trở ngại Lúc này để có hiệu năng cao thì cần phải có đường truyền mạng tốc

độ cao (vd: 10 gigabit Ethernet, InfiniBand) Đây không phải là giải pháp hiệu quả về kinh tế Một cách khác đó là bỏ qua sự tách biệt giữa lưu trữ và tính toán Đây chính là ý tưởng của hệ thống file phân tán bên dưới MapReduce Google File System (GFS) là cài đặt hệ thống file phân tán riêng của Google và Hadoop Distributed File System (HDFS)

Trang 21

là một cài đặt mã nguồn mở của GFS

Ý tưởng chính là chia dữ liệu thành các khối và sao lưu thành các khối đó trên đĩa của các node trong cluster (mặc định là 3) Các khối dữ liệu thường có kích thước mặc định là 64MB Hệ thống file phân tán sử dụng kiến trúc master-slave, master duy trì không gian tên file (metadata, cấu trúc thư mục, ánh xạ file đến block, vị trí các block, quyền truy cập) và slave quản lý các khối dữ liệu cụ thể Trong GFS, master được gọi là GFS Master và slave được gọi là GFS ChunkServer Trong Hadoop, master được gọi là NameNode và slave được gọi là DataNode Cả 2 hệ thống này hoạt động hầu như giống nhau, tuy nhiên, trong HDFS thì không có ghi thêm vào file và hiệu suất của HDFS cũng hơi chậm hơn so với GFS

1.3.1 Kiến trúc của HDFS

Hình 1.5 Kiến trúc của HDFS

1.3.2 Nhiệm vụ của NameNode

Việc quản lý không gian tên: NameNode chịu trách nhiệm duy trì không gian tên

file, bao gồm metadata, cấu trúc thư mục, ánh xạ file đến block, vị trí của các block và quyền truy cập Các dữ liệu này được nạp vào bộ nhớ để truy cập cho nhanh

Trang 22

Định vị các phép toán trên file: Namenode điều khiển các ứng dụng khách

(clients) đến datanode để đọc và cấp phát các block thích hợp để ghi Tất cả việc trao đổi diễn ra trực tiếp giữa client và datanode Khi một file bị xóa, HDFS không lập tức thu lại không gian lưu trữ, thay vào đó, các block sẽ được thu gom từ từ (lazily garbage collected)

Duy trì sự hoạt động của hệ thống file: Định kì, namenode sẽ gửi các thông điệp

báo hiệu (heartbeat messages) đến datanode để bảo đảm sự toàn vẹn của hệ thống Nếu namenode thấy một block nào có số bản sao thập hơn yêu cầu, nó sẽ điều khiển để tạo ra các bản sao mới Cuối cùng, namenode chịu trách nhiệm cân bằng hệ thống file Trong các phép toán thông thường, một datanode có thể sẽ chứa nhiều blocks hơn những cái khác, namenode sẽ cân bằng bằng cách chuyển các blocks từ các datanode có nhiều blocks đến các datanode có ít blocks hơn

Thiết kế có một master của GFS và HDFS là một điểm yếu dễ thấy Vì nếu master

bị lỗi thì toàn bộ hệ thống và tất các MapReduce jobs sẽ bị dừng Yếu điểm này được giảm bớt đi một phần nhờ vào bản chất của các phép toán của hệ thống file: không có dữ liệu đi qua NameNode và toàn bộ sự giao tiếp của clients và DataNode chỉ chứa metadata Vì thế, NameNode cũng ko hẳn là một yếu điểm, trong hầu hết trường hợp đều tránh được lỗi do tràn dữ liệu Trong thực tế, điểm chết (Single Point Of Failure - SPOF) này ko phải là một hạn chế lớn – với việc theo dõi NameNode thường xuyên thì thời gian

bị lỗi sẽ không quá lâu trong các triển khai thương mại Hơn nữa, Hadoop cũng được thiết kế thêm một NameNode dự phòng (Secondary NameNode) để có thể chuyển đổi nhanh chóng khi NameNode bị lỗi

1.3.3 Nhiệm vụ của DataNode

DataNode có nhiệm vụ đọc và ghi các block của HDFS vào hệ thống file cục bộ Khi muốn đọc hay ghi một file HDFS, file này sẽ được chia nhỏ thành các block và namenode sẽ cho client biết DataNode nào đang chứa block nào Client truy cập trực tiếp đến DataNode để lấy block dữ liệu cần xử lý Ngoài ra, các DataNode cũng giao tiếp với nhau để sao lưu dữ liệu

Hình trên thể hiện vai trò của NameNode và DataNode Trong hình này, ta có hai files: một tại /user/chuck/data1 và một tại /user/james/data2 File 1 có 3 block 1, 2, 3 và file 2 có 2 block 4 và 5 Nội dung của các file được lưu trữ phân tán giữa các DataNode, mỗi block có 3 bản sao Ví dụ, block 1 được sao lưu trên 3 DataNode bên phải, điều này đảm bảo rằng nếu một DataNode bị lỗi thì vẫn có thể đọc được file trên các DataNode khác

Trang 23

Hình 1.6 Vai trò của NameNode và DataNode trong HDFS

Các DataNode liên tục báo cáo lên NameNode Sau khi khởi tạo, mỗi DataNode sẽ báo cáo lên NameNode các block nó đang lưu trữ Sau khi hoàn tất, DataNode sẽ tiếp tục liên lạc với NameNode để cung cấp thông tin về sự thay đổi dữ liệu cục bộ và nhận các chỉ thị để tạo, di chuyển hay xóa các block từ đĩa cục bộ

1.3.4 Nhiệm vụ của Secondary NameNode

job submission node

namenode daemon jobtracker

tasktracker tasktracker tasktracker

Trang 24

theo dõi trạng thái của HDFS cluster Cũng như NameNode, mỗi cluster cũng có một SNN và thường chạy trên một server riêng Không có DataNode hoặc TaskTracker nào chạy trên server này Điểm khác của SNN so với NameNode là nó không nhận và lưu lại

sự thay đổi thời gian thực của HDFS Thay vào đó, nó liên hệ trực tiếp với NameNode để lưu lại trạng thái của HDFS sau một khoảng thời gian do người dùng cấu hình

Như đã nói ở trên, NameNode là một yếu điểm của Hadoop cluster và SNN giúp giảm thiểu thời gian lỗi và mất dữ liệu Tuy nhiên, khi một NameNode gặp sự cố, thì cần

có con người can thiệp và cấu hình lại cluster để SNN có thể trở thành NameNode

Trang 25

CHƯƠNG 2

THUẬT TOÁN XỬ LÝ DỮ LIỆU VĂN BẢN VỚI

MapReduce

2.1 Thiết kế thuật toán MapReduce cơ bản

Phần lớn sức mạnh của MapReduce đến từ sự đơn giản: để chuẩn bị cho dữ liệu đầu vào, lập trình viên chỉ cần cài đặt mapper và reducer, hoặc thêm partioner và combiner Tất cả phần thực thi được xử lý trong suốt bởi Execution framework – trên các clusters từ một đến hàng nghìn node, trên các tập dữ liệu từ gigabytes đến petabytes Tuy nhiên, nó cũng có nghĩa là bất cứ thuật toán nào người lập trình muốn phát triển cũng phải được diễn tả theo một cách nghiêm ngặt theo các thành phần đã được định nghĩa sẵn Điều đó có nghĩa không phải bất kỳ thuật toán nào cũng có thể chuyển sang

mô hình lập trình này Mục đích của chương này là cung cấp, chủ yếu qua các ví dụ để thiết kế thuật toán cho MapReduce

Đồng bộ hóa có lẽ là phần khó nhất của việc thiết kế thuật toán cho MapReduce (và các thuật toán song song hoặc phân tán nói chung) Trong các bài toán xử lý song song, các tiến trình trong các node khác nhau trong một cụm tại một thời điểm nào đó phải dồn lại với nhau, ví dụ: phân tán các kết quả từng phần từ các nodes tạo ra chúng đến các nodes sẽ sử dụng chúng Với một MapReduce Job, chỉ có một lần đồng bộ hóa trên toàn cluster – giai đoạn sort và shuffle, lúc mà các cặp key-value trung gian được copy từ mapper đến reducer và gộp theo key Ngoài lúc đó, mapper và reducer chạy độc lập và không có cơ chế liên lạc trực tiếp giữa chúng Hơn nữa, người lập trình có rất ít

sự điều khiển trên nhiều khía cạnh của sự thực thi, ví dụ:

 Chỉ định Node cho một Mapper hoặc Reducer cụ thể

 Chỉ định thời gian bắt đầu và kết thúc của Mapper hoặc Reducer Chỉ định Mapper sẽ xử lý cặp key-value cụ thể

 Chỉ định Reducer sẽ xử lý các cặp key-value trung gian

Tuy nhiên, lập trình viên cũng có một số kĩ thuật để điều khiển việc thực thi và quản lý dòng dữ liệu trong MapReduce Bao gồm:

 Khả năng xây dựng các cấu trúc dữ liệu phức tạp dùng làm keys và values

để lưu trữ và giao tiếp các kết quả từng phần

 Khả năng thực thi các đoạn mã của người dùng lúc bắt đầu và kết thúc map và reduce task

Trang 26

 Khả năng bảo toàn trạng thái giữa các mapper và reducer qua nhiều khóa đầu vào hoặc trung gian

 Khả năng điều khiển thứ tự sắp xếp của các keys trung gian, do đó có thể biết được thứ tự các key mà reducer sẽ nhận

 Khả năng điều khiển phân mảnh không gian khóa, do đó có thể biết được thứ tự tập khóa mà một reducer nào đó sẽ nhận

Một MapReduce Job không thể biểu diễn tất cả các thuật toán Người lập trình thường phải phân tích thuật toán phức tạp thành một chuỗi các jobs, yêu cầu chuỗi các

dữ liệu liên tục, vì thế đầu ra của một job trở thành đầu vào của job kế tiếp Nhiều thuật toán thường có bản chất lặp đi lặp lại, đòi hỏi sự thực thi lặp đi lặp lại để đạt được một ngưỡng hội tụ cần thiết

Chương này sẽ giải thích các kĩ thuật khác nhau để điều khiển sự thực thi lệnh và dòng dữ liệu có thể được áp dụng để thiết kế thuật toán trong MapReduce

2.1.1 Gộp lớn cục bộ

Trong việc xử lý dữ liệu lớn, một phần quan trọng nhất của sự đồng bộ hóa là việc trao đổi các kết quả trung gian từ các tiến trình tạo ra nó đến các tiến trình sẽ sử dụng nó Trong môi trường xử lý song song thì các kết quả trung gian này phải được truyền qua mạng Hơn nữa, trong Hadoop các kết quả trung gian được ghi vào đĩa cục

bộ trước khi được gửi qua mạng Vì độ trễ của mạng và đĩa cao hơn nhiều so với các phép toán khác nên việc giảm số lượng các kết quả trung gian sẽ làm tăng tính hiệu quả của thuật toán Trong MapReduce, việc gộp cục bộ các kết quả trung gian là một trong các cách giúp cho thuật toán nhanh hơn Thông qua việc sử dụng Combiner và khả năng bảo toàn trạng thái giữa các đầu vào, ta có thể giảm một lượng lớn các cặp key-value dùng cho pha shuffle and sort giữa các Mapper và Reducer

Hình 2.1 Bảo toàn trạng thái trong Hadoop

Trang 27

Hình mô tả việc tạo đối tượng và bản toàn trạng thái trong Hadoop, một đối tượng Mapper và Reducer được tạo ra tương ứng với một task, hàm Configure được chạy lúc khởi tạo đối tượng, hàm map/reduce chạy tương ứng với mỗi cặp key-value, hàm close được chạy khi hủy đối tượng Trạng thái của đối tượng được bảo toàn qua các lần gọi hàm map/reduce

2.1.1.1 Combiner và In-Mapper combining

Để minh họa các kỹ thuật khác nhau của hàm gộp cục bộ Ta sử dụng ví dụ là chương trình Wordcount:

 Input: Tập các văn bản

 Output: Các từ và số lượng của chúng trong tập các văn bản

Hình 2.2 Tiến trình hoạt động của chương trình WordCount

Chương trình Wordcount cơ bản:

Class MAPPER Method MAP (docid a, doc d) For all term t in doc d do EMIT (term t, count 1)

Class REDUCER Method REDUCE (term t, counts [C1, C2, …]) Sum ← 0

For all count c in counts [C1, C2, …] do Sum ← Sum + c

EMIT (term t, count sum)

Mapper đưa lên các key-value trung gian ứng với mỗi từ nó tìm thấy với key là từ

đó và value là 1, Reducer tổng các giá trị trung gian để đưa ra kết quả cuối cùng

Trang 28

Word Count: Version 1 (Reducer vẫn giữ nguyên)

Class MAPPER Method MAP (docid a, doc d)

H ← new ASSOCIATIVEARRAY For all term t in doc d do

H{t} ← H{t} + 1 >Đếm số lượng tổng cộng một tài liệu

For all term t in H do EMIT (term t, count H{t})

Thuật toán này cải thiện hơn so với chương trình wordcount cơ bản, sử dụng một mảng kết hợp để đếm số lượng các từ trong một tài liệu sau đó mới đưa lên các từ và số lượng của các từ đó trong mảng Dễ thấy cách này sẽ làm giảm đi số lượng các key-value trung gian

Word Count: Version 2

Class MAPPER Method INITIALIZE

H ← new ASSOCIATIVEARRAY >bảo toàn trạng thái giữa các cặp

key/value

Method MAP (docid a, doc d) For all term t in doc d do

H{t} ← H{t} + 1 >Đếm số lượng tổng cộng trên nhiều tài liệu

Method CLOSE For all term t in H do EMIT (term t, H{t})

Cũng với ý tưởng trên, thuật toán này dựa vào sự bảo toàn trạng thái của đối tượng Mapper để khởi tạo một mảng kết hợp bên ngoài hàm map, sau đó dùng mảng này

để đếm số từ giữa nhiều tài liệu trong một map task Đến khi tất cả hàm Map đã xử lý hết dữ liệu trung gian thì hàm CLOSE sẽ được gọi, lúc này ta gửi cặp key-value tương tứng với các phần tử trong mảng kết hợp Với kĩ thuật này, ta đang sử dụng chức năng của hàm Combiner trực tiếp ở trong Mapper Ta không cần phải chạy các Combiner khác, vì tất cả khả năng gộp cục bộ đã được chỉ rõ Mẫu thiết kế này trong MapReduce thường được gọi là “In-Mapper Combining” Có hai lợi ích khi sử dụng mẫu thiết kế này:

1 Thứ nhất, nó điều khiển được khi nào việc gộp cục bộ xảy ra và chính xác xảy ra như thế nào Ngược lại, ý nghĩa của hàm Combiner không được chỉ

rõ trong MapReduce Ví dụ: Hadoop không bảo đảm hoặc Combiner được thực hiện bao nhiêu lần hoặc có thể không thực hiện lần nào Combiner được xem là một tối ưu hóa trong execution framework, có thể sử dụng hoặc không, có thể được gọi không hoặc nhiều lần Trong nhiều trường hợp, sự không chắc chắn này không chấp nhận được, chính vì thế nhiều lập trình viên tự viết hàm gộp trong Mapper

2 Thứ hai, In-Mapper Combining sẽ hiệu quả hơn các Combiner thực sự Combiner làm giảm số lượng các key-value trung gian trong pha shuffle

Trang 29

and sort nhưng không làm giảm số lượng các key-value tạo ra trong pha map, việc này làm tạo ra nhiều việc tạo và hủy đối tượng Ngược lại, trong In-Mapper Combining chỉ tạo các cặp key- value cần thiết cho pha shuffle and sort

Tuy nhiên, trong mẫu In-Mapper Combining cũng có hạn chế Nó làm mất đi ý tưởng ban đầu của MapReduce vì có bảo toàn trạng thái giữa các cặp key-value Bảo toàn trạng thái giữa các dữ liệu đầu vào, có nghĩa thuật toán có thể phụ thuộc vào thứ tự của các cặp key-value, dẫn đến có thể xảy ra các lỗi về thứ tự Thứ hai, khi dữ liệu quá lớn thì có thể làm cho dữ liệu trung gian không thể chứa đủ trong bộ nhớ dẫn đến vấn đề

về bộ nhớ Giải pháp là giới hạn kích thước của Block và thường xuyên hủy các cấu trúc

dữ liệu không dùng tới trong bộ nhớ

2.1.1.2 Sự chính xác của thuật toán trong Local Aggregation

Mặc dù Combiner có thể làm giảm thời gian chạy của chương trình nhưng cũng cần cẩn thận khi sử dụng chúng Vì Combiner trong Hadoop được xem là các tối ưu phụ nên sự chính xác của thuật toán không thể phụ thuộc vào sự tính toán trên Combiner hoặc phụ thuộc vào nó Trong các chương trình MapReduce, kiểu dữ liệu đầu vào trong Reducer phải cùng kiểu dữ liệu đầu ra của Mapper, vì thế kiểu dữ liệu đầu vào và đầu ra của Combiner phải cùng kiểu với dữ liệu đầu ra của Mapper Trong trường hợp kiểu dữ liệu đầu vào và đầu ra của Reducer giống nhau thì Reducer có thể dùng như Combiner

Ví dụ: Computing the Mean (Tính giá trị trung bình)

 Input: Tập dữ liệu với input key kiểu string và input value kiểu integer

 Output: Giá trị trung bình ứng với mỗi key

Class MAPPER Method MAP (string t, integer r) EMIT (string t, integer r) Class REDUCER

Trang 30

Method REDUCE (string t, integers [r1, r2, …]) Sum ← 0 Cnt ← 0

For all integer r in integers [r1, r2, …]) do Sum ← Sum + r Cnt ← Cnt + 1 ravg ← Sum/Cnt

EMIT (string t, integer ravg)

Thuật toán này không thể sử dụng combiner như reducer vì trung bình của các giá trị trung bình cục bộ không bằng trung bình của toàn bộ các giá trị

Ví dụ: ( (3+4)/2 + (8+9+10)/3)/2 = 6.25 (3 + 4 + 8 + 9 + 10)/5 = 6.8

Dễ thấy trong ví dụ trên, hai cách tính toán cho ra hai kết quả khác nhau Computing the Mean: Version 2

Class MAPPER Method MAP (string t, integer r) EMIT (string t, integer r) Class COMBINER

Method COMBINE (string t, integers [r1, r2, …]) Sum ← 0 Cnt ← 0

For all integer r in integers [r1, r2, …]) do Sum ← Sum + r Cnt ← Cnt + 1

EMIT (string t, pair (Sum,Cnt) >Sum và Count riêng phần Class REDUCER

Method REDUCE (string t, pairs [ (s1,c1), (s2,c2), …]) Sum ← 0 Cnt ← 0

For all pair (s,c) in pairs [ (s1,c1), (s2,c2), …] do Sum ← Sum + s Cnt ← Cnt + c ravg ← Sum/Cnt

EMIT (string t, integer ravg)

Thuật toán này không chính xác vì sự khác nhau về kiểu dữ liệu của key-value giữa Combiner và Reducer (nếu Combiner không được gọi lần nào thì sẽ sai)

Computing the Mean: Version 3

Class MAPPER Method MAP (string t, integer r) EMIT (string t, pair (r,1)) Class COMBINER

Method COMBINE (string t, pairs [ (s1,c1), (s2,c2), …])) Sum ← 0 Cnt ← 0

For all pair (s,c) in pairs [ (s1,c1), (s2,c2), …] do Sum ← Sum + s Cnt ← Cnt + c

EMIT (string t, pair (Sum,Cnt) >Sum và Count riêng phần Class REDUCER

Method REDUCE (string t, pairs [ (s1,c1), (s2,c2), …]) Sum ← 0 Cnt ← 0

For all pair (s,c) in pairs [ (s1,c1), (s2,c2), …] do Sum ← Sum + s Cnt ← Cnt + c ravg ← Sum/Cnt

EMIT (string t, integer ravg)

Thuật toán đúng vì kiểu dữ liệu của Combiner và Reducer giống nhau

Trang 31

Computing the Mean: Version 4

Thuật toán sử dung In-Mapper combining

Class MAPPER Method INITIALIZE

S ← new ASSOCIATIVEARRAY C ← new ASSOCIATIVEARRAY

Method MAP (string t, integer r) S{t} ← S{t} + r C{t} ← C{t} + 1

Method CLOSE For all term t in S do EMIT (term t, pair (S{t}, C{t}))

2.1.2 Bộ hai và bộ ba

Một phương pháp phổ biến cho đồng bộ hóa trong MapReduce là xây dựng các khóa và giá trị phức tạp theo một cách mà dữ liệu cần thiết cho một tính toán được tự nhiên gom lại bởi các khung thực thi Trong một quá trình “đóng gói” từng phần sums

và counts trong một giá trị phức tạp được qua một quá trình từ Mapper cho tới

Combiner rồi tới Reducer Mẫu thiết kế “bộ hai (Pairs)” và “bộ ba (Stripes)” tiêu biểu cho chiến lược này

Bài toán tập trung vào xây dựng các ma trận số lần các từ đồng xuất hiện occurrence word) trong một tập văn bản lớn

(co-Computer the mean

class Mapper

method Map (string t, integer r)

Emit (string t, pair (r, 1))

class Combiner

method Combine (string t, pairs [ (s1, c1), (s2, c2) ])

sum ← 0 cnt ← 0

for all pair (s, c) ∈ pairs [ (s1, c1), (s2, c2) ] do

sum ← sum + s cnt ← cnt + c Emit (string t, pair (sum, cnt))

class Reducer

method Reduce (string t, pairs [ (s1, c1), (s2, c2) ])

sum ← 0 cnt ← 0

for all pair (s, c) ∈ pairs [ (s1, c1), (s2, c2) ] do

sum ← sum + s cnt ← cnt + c ravg ← sum/cnt Emit (string t, integer ravg )

Mapper này minh họa các mẫu thiết kế in-Mapper Reducer cũng giống như ở Computer the mean Version 4

Trang 32

Trên đây sẽ mô tả 2 thuật toán MapReduce mà nhiệm vụ thực hiện trên văn bản quy mô lớn

Đếm từ trùng lặp (Tiếp cận “bộ hai”)

1: class Mapper

2: method Map (docid a, doc d)

3: for all term w ∈ doc d do

4: for all term u ∈ Neighbors (w) do

5: Emit (pair (w, u), count 1) Þ Emit count for each

co-occurrence

1: class Reducer

2: method Reduce (pair p, counts [c1, c2, ])

3: s ← 0

4: for all count c ∈ counts [c1, c2, ] do

5: s ← s + c Þ Sum co-occurrence counts

6: Emit (pair p, count s)

Trong cách tiếp cận bộ hai “Pair”, như thường lệ, các id của tài liệu và các nội dung tương ứng tạo nên các cặp key-value Mapper xử lý mỗi tài liệu đầu vào và phát

đi các cặp key-value trung gian cùng với số lần mỗi cặp từ đồng xuất hiện như là một khóa và một số nguyên như là giá trị Điều này được thực hiện bằng cách lồng 2 vòng lặp: vòng lặp ngoài duyệt tất cả các từ (thành phần bên trái của cặp), và vòng lặp trong

sẽ duyệt tất cả các từ gần với từ đầu tiên (thành phần bên phải của cặp) Số lần đồng xuất hiện các từ có thể được xác định trong cửa sổ thuật ngữ hoặc một số đơn vị theo ngữ cảnh khác như một câu Khung thực thi MapRecude đảm bảo rằng tất cả các giá trị liện quan tới khóa được gom lại với nhau trong Reducer Như vậy trong trường hợp Reducer đơn giản chỉ tóm tắt các các trị liên quan với cặp từ đồng xuất hiện cho tới giá trị tuyệt đối của sự kiện trong tập văn bản, sau đó sẽ được phát đi như cặp key-values cuối cùng ấy Mỗi cặp tương ứng tới một ô trong ma trận các từ đồng hiện Thuật toán này trình bày cách sử dụng các tổ hợp khóa để phối hợp xử lý dữ liệu phân tán

Giống như bộ hai (Pair), lần các cặp từ đồng xuất hiện được tạo ra bởi 2 vòng lặp lồng nhau Tuy nhiên, sự khác biệt lớn nhất giữ chúng là thay vì phát ra cặp key-value trung gian cho mỗi cặp từ đồng hiện, các thông tin đồng thời được lưu lần đầu trong một mảng kết hợp, biểu thị là H Mapper phát ra các cặp key-value cùng với các

từ như là các khóa và các mảng kết hợp tương ứng như là các giá trị Nơi mà các mảng kết hợp mã hóa các lượt đếm của các từ cụ thể gần nghĩa (ví dụ: ngữ cảnh) Khung thực thi của MapReduce đảm bảo rẳng tất cả các mảng kết hợp cùng các khóa tương ứng sẽ được gom lại trong giai đoạn Reduce (rút gọn) Reducer thực hiện theo từng phần tử tổng của các mảng kết hợp cùng các khóa tương ứng, tích lũy với các số lượng tương ứng các ô trong ma trận đồng hiện Cuối cùng mảng kết hợp đã phát ra các từ tương ứng như là khóa Ngược lại với phương pháp tiếp cận bộ hai (Pair), mỗi cặp key-value cuối cùng mã hóa một hàng trong một ma trận đồng hiện

Trang 33

Đếm từ trùng lặp (Tiếp cận “bộ ba”)

1: class Mapper

2: method Map (docid a, doc d)

3: for all term w ∈ doc d do

4: H ← new AssociativeArray

5: for all term u ∈ Neighbors (w) do

6: H{u} ← H{u} + 1 Þ Tally words co-occurring with w

7: Emit (Term w, Stripe H)

1: class Reducer

2: method Reduce (term w, stripes [H1, H2, H3, ])

3: Hf ← new AssociativeArray

4: for all stripe H ∈ stripes [H1, H2, H3, ] do

5: Sum (Hf, H) Þ Element-wise sum

6: Emit (term w, stripe Hf )

Hình 2.3 Thời gian chạy của thuật toán "pairs" và "stripes"

Dưới đây là thí nghiệm thực hiện cả 2 thuật toán trong Hadoop và áp dụng chúng vào một tập văn bản lớn gồm 2.27 triệu tài liệu từ Associated Press Wordstream (APW) với tổng dung lượng là 5,7 GB

Hình cho thấy thời gian để tính toán ma trận đồng hiện trên các phần phân đoạn khác nhau của tập văn bản APW Các thí nghiệm được thực hiện trên một cụm Hadoop với 19 slave, đều có hai bộ vi xử lý lõi đơn và hai đĩa

Thấy rằng các thuật toán bộ hai (Pairs) tạo ra số lượng lớn các cặp key-value so với phương pháp tiếp cận bộ ba (stripes) Bộ ba thể hiện chặt chẽ hơn, khi cùng với các thành phần trái của pair được lặp lại cho mỗi cặp từ đồng hiện Cách tiếp cận bộ ba (stripes) cũng tạo ra các các khóa trung gian ít hơn và ngắn hơn, và vì thế khung thực thi đã ít thực hiện xắp xếp Tuy nhiên, giá trị trong cách tiếp cận stripes phức tạp hơn,

và đi kèm với nhiều seriallization và deserialization hơn là các tiếp cận pairs

Trang 34

2.1.3 Tính toán tần số tương đối

Ta sẽ xây dựng trên các cặp và các thuật toán Pairs trình bày trong phần trước

và tiếp tục với ví dụ chạy của chúng ta xây dựng từ thể hiện ma trận M cho một ngữ liệu lớn Nhớ lại rằng trong n vuông lớn × ma trận n, trong đó n = | V | (Kích thước từ vựng), tế bào mij chứa số lần từ wi đồng xảy ra với từ wj trong một bối cảnh cụ thể Hạn chế của số lượng tuyệt đối là nó không đưa vào tài khoản thực tế là một số từ xuất hiện thường xuyên hơn những người khác Lời wi có thể cùng xảy ra thường xuyên với wj đơn giản chỉ vì một trong những từ này là rất phổ biến Một phương thuốc đơn giản là chuyển đổi số lượng tuyệt đối vào tần số tương đối, f (wj | wi) Đó là, những gì

tỷ lệ thời gian, không có gì wj xuất hiện trong bối cảnh wi? Điều này có thể được tính toán bằng cách sử dụng phương trình sau:

Ở đây, N (•, •) cho biết số lần xảy ra đồng thời cặp từ cụ thể được quan sát thấy trong các ngữ liệu Chúng tôi cần đếm các sự kiện chung (từ cooccurrence), chia cho những gì được gọi là cận biên (tổng của số đếm của máy biến xảy ra đồng thời với bất

cứ điều gì khác)

Tính toán tần suất tương đối với cách tiếp cận Pairs là đơn giản Trong giảm, số lượng của tất cả các từ mà cùng xảy ra với các biến điều (wi trong ví dụ trên) có sẵn trong các mảng kết hợp Do đó, nó cũng đủ để tổng hợp tất cả những tính để đi đến biên (tức là,.wt N (wi, wr)), và sau đó chia cho tất cả các tính chung của các biên để đi đến các tần số tương đối cho tất cả các từ Điều này thực hiện yêu cầu sửa đổi tối thiểu

để các thuật toán sọc gốc trong thuật toán, và minh họa việc sử dụng các cấu trúc dữ liệu phức tạp để phối hợp tính toán phân phối trong MapReduce Thông qua cơ cấu thích hợp của các phím và các giá trị, người ta có thể sử dụng lập bản đồ Giảm khuôn khổ thực hiện để mang lại cùng tất cả các mảnh của dữ liệu cần thiết để thực hiện một tính toán Lưu ý rằng, như với trước đây, thuật toán này cũng tổng hợp như mỗi mảng kết hợp phù hợp với bộ nhớ

Làm thế nào người ta có thể tính toán tần suất tương đối với cách tiếp cận cặp? Trong cách tiếp cận cặp, giảm nhận (wi, wj) như là chìa khóa và đếm như giá trị Từ điều này một mình nó không thể tính f (wj | wi) kể từ khi chúng tôi làm không có biên May mắn thay, như trong lập bản đồ, bộ giảm có thể bảo quản nhà nước trên nhiều phím Bên trong giảm tốc, chúng ta có thể đệm trong bộ nhớ tất cả những từ mà đồng xảy ra với wi và tội của họ, trong bản chất xây dựng các mảng kết hợp trong cách tiếp cận sọc Để làm công việc này, chúng ta phải xác định thứ tự sắp xếp của các cặp để khóa đầu tiên được sắp xếp theo từ bên trái, và sau đó bằng những từ thích hợp Với

Trang 35

đặt hàng này, chúng ta có thể dễ dàng phát hiện nếu tất cả các cặp kết hợp với các từ ngữ chúng tôi đều có điều trên (wi) đã gặp phải Vào thời điểm đó chúng ta có thể quay trở lại thông qua bộ đệm trong bộ nhớ, tính toán tần số tương đối, và sau đó phát

ra những kết quả trong cặp khóa-giá trị cuối cùng

Có thêm một thay đổi cần thiết để làm cho công việc của thuật toán này Chúng

ta phải đảm bảo rằng tất cả các cặp với từ trái cùng được gửi đến giảm tương tự Điều này, không may, không xảy ra tự động: nhớ lại rằng các phân vùng mặc định dựa trên giá trị băm của khóa trung gian, theo modulo số lượng gia giảm Đối với một chìa khóa phức tạp, các đại diện byte liệu được sử dụng để tính toán các giá trị băm Kết quả là, không có đảm bảo rằng, ví dụ, (chó, lợn đất) và (chó, ngựa vằn) được gán cho

là sản phẩm giảm tương tự Để sản xuất ra các hành vi mong muốn, chúng ta phải xác định một phân vùng tùy chỉnh mà chỉ chú ý đến từ bên trái Đó là, các phân vùng cần phân vùng dựa trên các hash của chỉ từ bên trái

Thuật toán này sẽ thực sự làm việc, nhưng nó bị những hạn chế tương tự như phương pháp Pairs: như kích thước của tập văn bản phát triển, do đó, không có kích thước từ vựng, và tại một số điểm sẽ không có đủ bộ nhớ để lưu trữ tất cả các đồng xảy ra từ và đếm của họ cho từ chúng tôi đang điều trên Đối với việc tính toán ma trận đồng xảy ra, lợi thế của phương pháp tiếp cận cặp là nó không bị bất kỳ tắc nghẽn bộ nhớ Có cách nào để thay đổi cách tiếp cận cặp cơ bản để lợi thế này được giữ lại?

Khi nó quay ra, một thuật toán như vậy là thực sự tốt, mặc dù nó đòi hỏi sự phối hợp của một số cơ chế trong MapReduce Sự thấu hiểu nằm trong trình tự đúng liệu trình bày đến giảm tốc Nếu nó đã có thể đôi khi cách tính (hoặc nếu không có được quyền truy cập vào) các biên trong giảm tốc trước khi xử lý số lượng doanh, bộ giảm chỉ có thể phân chia số lượng chung của các biên để tính toán tần số tương đối Khái niệm "trước" và "sau" có thể bị bắt trong sự sắp đặt của cặp khóa-giá trị, có thể được kiểm soát một cách rõ ràng bởi các lập trình viên Đó là, các lập trình viên có thể xác định thứ tự sắp xếp của các phím để các dữ liệu cần thiết trước đó được trình bày cho các dữ liệu giảm mui được- đó là cần thiết sau này Tuy nhiên, chúng ta vẫn cần phải tính toán số lượng biên Nhớ lại rằng trong thuật toán cặp căn bản, mỗi mapper phát ra một cặp khóa-giá trị với các cặp từ xảy ra đồng thời như là chìa khóa Để tính toán tần số tương đối, chúng ta sửa đổi các mapper để nó thêm phát ra một "đặc biệt" quan trọng của hình thức (wi, *), với giá trị của một, đại diện cho sự đóng góp của các cặp từ để các biên Với việc sử dụng các tổ hợp, các tính biên một phần sẽ được tổng hợp trước khi được gửi đến gia giảm Ngoài ra, mô hình kết hợp trong mapper có thể được sử dụng để tổng hợp nhiều hơn hiệu quả đếm biên

Trong giảm tốc, chúng ta phải đảm bảo rằng các cặp khóa-giá trị đặc biệt của đại diện resenting những đóng góp biên một phần được xử lý trước khi các cặp khóa-giá trị bình thường đại diện cho số lượng doanh Điều này được thực hiện bằng cách

Trang 36

xác định thứ tự sắp xếp của các phím để cặp với các biểu tượng đặc biệt trong mẫu (wi, *) được đặt hàng trước bất kỳ cặp khóa-giá trị khác mà từ trái là wi Ngoài ra, như với trước khi chúng ta cũng phải xác định đúng các phân vùng phải chú ý đến chỉ từ trái trong mỗi cặp Với các dữ liệu trình tự đúng cách, giảm tốc có thể trực tiếp tính toán tần số tương đối

Một ví dụ cụ thể được thể hiện trong hình, trong đó liệt kê trình tự các cặp giá trị Key-mà giảm có thể gặp Thứ nhất, giảm được trình bày với các phím đặc biệt (dog,

*) và một số các giá trị, mỗi trong số đó đại diện cho một biệt tiềm đóng góp biên từ giai đoạn bản đồ (giả sử ở đây, hoặc tổ hợp hoặc trong-mapper kết hợp, vì vậy các giá trị đại diện cho số lượng một phần tổng hợp) Việc giảm tích tụ các tính đến nơi ở biên,.wt N (dog, wr)

Việc giảm nắm giữ trên để giá trị này là nó xử lý các khóa tiếp theo Sau (dog,

*), là sản phẩm giảm sẽ gặp phải một loạt các phím đại diện cho số lượng doanh; hãy nói rằng người đầu tiên trong số này là khóa (dog, aarvark) Kết hợp với khóa này

Hình 2.4 Ví dụ minh họa cặp giá trị

Ví dụ về trình tự các cặp khóa-giá trị trình bày với Reducer trong thuật toán cặp

để tính tần số tương đối Điều này cho thấy việc áp dụng các mẫu thiết kế để đảo ngược Sẽ có một danh sách các giá trị đại diện cho số lượng doanh một phần từ giai đoạn bản đồ (hai giá trị riêng biệt trong trường hợp này) Tổng hợp các tính sẽ mang tính liên kết, tức là, số lần con chó và lợn đất đồng xảy ra trong toàn bộ bộ sưu tập Tại thời điểm này, kể từ khi giảm tốc đã biết biên, giản ple số học đủ để tính toán tần số tương đối Tất cả các tính chung sau đó được xử lý một cách chính xác theo cách tương tự Khi giảm tốc gặp sự đặc biệt tiếp theo cặp khóa-giá trị (doge, *), là sản phẩm giảm reset trạng thái nội bộ của mình và bắt đầu tích lũy biên trên một lần nữa Nhận thấy rằng các yêu cầu bộ nhớ cho thuật toán này là rất ít, vì chỉ có biên (một số nguyên) cần phải được lưu trữ Không đệm đếm từ xảy ra đồng cá nhân là cần thiết, và

do đó chúng tôi đã loại bỏ các nút cổ chai khả năng mở rộng của thuật toán trước đó

Mẫu thiết kế này, mà chúng ta gọi là "trật tự đảo ngược", xuất hiện đáng ngạc nhiên thường xuyên và trên các ứng dụng trong nhiều lĩnh vực Nó như vậy được đặt tên vì thông qua sự phối hợp thích hợp, chúng ta có thể truy cập vào kết quả của một

Trang 37

phép tính trong giảm tốc (ví dụ, một số liệu thống kê tổng hợp) trước khi xử lý các dữ liệu cần thiết để tính toán đó Sự thấu hiểu chính là chuyển đổi các trình tự tính toán vào một vấn đề phân loại Trong hầu hết các trường hợp, một thuật toán đòi hỏi dữ liệu theo một trật tự nhất định: bằng cách kiểm soát cách các phím được sắp xếp và làm thế nào các không gian chính là phân vùng, chúng tôi có thể trình bày dữ liệu đến giảm theo thứ tự cần thiết để thực hiện các tính toán thích hợp Điều này giúp giảm số lượng kết quả một phần là giảm tốc cần nắm giữ trong bộ nhớ

Để tóm tắt, các ứng dụng cụ thể của các mẫu thiết kế để đảo ngược để tính toán tần số tương đối yêu cầu sau đây:

1 Phát ra một cặp khóa-giá trị đặc biệt cho mỗi cặp từ đồng xảy ra trong mapper để nắm bắt việc đóng góp cho biên

2 Kiểm soát thứ tự sắp xếp của các chính trung gian để các cặp khóa-giá trị thể hiện sự đóng góp cận biên được xử lý bởi giảm tốc trước khi bất kỳ của các cặp đại diện từ doanh đếm đồng xảy ra

3 Xác định một phân vùng tùy chỉnh để đảm bảo rằng tất cả các cặp cùng bên trái từ được xáo trộn đến giảm tương tự

4 Bảo tồn nhà nước trên nhiều phím trong bộ giảm đầu tiên tính toán biên dựa trên các cặp khóa-giá trị đặc biệt và sau đó chia cho số đếm chung của dữ liệu lề để đi đến các tần số tương đối

Như chúng ta sẽ thấy, mẫu thiết kế này cũng được sử dụng trong xây dựng chỉ

số ngược để thiết lập đúng thông số nén cho các danh sách thông tin đăng

2.1.4 Sắp xếp thứ cấp

MapReduce sắp xếp các cặp key-value theo keys trong pha Shuffle and Sort, sẽ rất thuận tiện nếu việc tính toán ở reducer dựa vào thứ tự sắp xếp Tuy nhiên, làm cách nào để ngoài sắp xếp theo key, ta sắp theo theo value nữa? MapReduce của Google có tính năng secondary được xây dựng sẵn để đảm bảo các values được sắp xếp khi đến Reducer Tuy nhiên, Hadoop chưa có tính năng này Có 2 cách để dùng secondary sort trong Hadoop: một là lưu tạm trong bộ nhớ sau đó sắp xếp, tuy nhiên cách này sẽ bị giới hạn khi dữ liệu trong bộ nhớ quá lớn Cách thứ hai là sử dụng mẫu thiết kế Value- to-key tạo nên các composite key (khóa kết hợp) (k,v1)

2.2 Thuật toán tính chỉ mục ngược để tìm kiếm dữ liệu văn bản

Tìm kiếm web là một vấn đề lớn về dữ liệu tinh túy Việc đưa ra một thông tin cần thể hiện như một truy vấn ngắn bao gồm một vài điều khoản, nhiệm vụ của hệ thống là để lấy đối tượng web có liên quan và trình bày chúng cho người dùng Trang web lớn như thế nào? Rất khó để tính toán chính xác, nhưng kể cả dự tính khái quát / ước lượng cũng sẽ ra kích thước ở vài chục tỷ trang, với tổng trị giá hàng trăm

Trang 38

terabytes (chỉ xét văn bản) Trong các ứng dụng thực tế, người sử dụng yêu cầu kết quả nhanh chóng từ một công cụ tìm kiếm truy vấn - thời gian trễ dài hơn một vài trăm mili giây sẽ thử thách sự kiên nhẫn của người dùng Thực hiện các yêu cầu này là khá một kỳ công, lưu tâm đến các khoản dữ liệu liên quan!

Gần như tất cả các động cơ truy hồi/thu hồi cho tìm kiếm văn bản đầy đủ ngày hôm nay dựa trên một cấu trúc dữ liệu được gọi là chỉ số đảo ngược, mà cho một thuật ngữ, cung cấp truy cập vào danh sách các tài liệu có chứa thuật ngữ Trong thông tin theo cách nói retrieval, đối tượng được lấy lại được gọi khái quát là "tài liệu", mặc dù trong thực tế chúng có thể là các trang web, các file PDF, hoặc thậm chí mảnh mã Cho một truy vấn của người dùng, retrieval engines sử dụng inverted index để ghi tài liệu có chứa các thuật ngữ truy vấn liên quan tới một số mô hình xếp hạng, có tính đến tính năng tài khoản như thuật ngữ thích hợp, trạng thái thuật ngữ (term proximity), các thuộc tính của các điều khoản/thuật ngữ trong tài liệu

Các vấn đề tìm kiếm web bị phân hủy thành ba thành phần: thu thập nội dung web, xây dựng các chỉ số và các văn bản xếp hạng cho một truy vấn Crawling và indexing chia sẻ những đặc điểm và yêu cầu tương tự nhau, nhưng chúng rất khác với thu hồi Thu thập nội dung trang web và xây dựng các chỉ số đảo ngược được cho hầu hết các vấn đề offline Cả hai cần phải được mở rộng và hiệu quả, nhưng chúng không cần hoạt động trong thời gian thực Indexing thường là một quá trình batch để chạy theo định kỳ: tần suất làm mới và cập nhật thường phụ thuộc vào thiết kế của bộ tìm kiếm Một số trang web (ví dụ, các tổ chức tin tức) cập nhật nội dung của họ khá thường xuyên và cần phải được truy cập thường xuyên; các trang web khác (ví dụ, chính phủ quy định) là tương đối tĩnh Tuy nhiên, ngay cả đối với các trang web hay cập nhật, thường thì có thể chấp nhận được việc chậm trễ một vài phút cho đến khi nội dung tìm được Hơn nữa, vì số lượng nội dung thay đổi nhanh chóng là tương đối nhỏ, chạy cập nhật chỉ số quy mô nhỏ hơn ở tần số lớn hơn thường là một là giải pháp thỏa đáng Tìm kiếm là một vấn đề trực tuyến đòi hỏi thời gian phản ứng phụ thứ hai (sub-second response time) Người dùng cá nhân mong đợi độ trễ truy vấn thấp, nhưng thông lượng truy vấn cũng không kém phần quan trọng vì retrieval engine thường phục vụ cho nhiều người sử dụng đồng thời Hơn nữa, tải truy vấn được đánh giá cao biến, tùy thuộc vào thời gian trong ngày, và có thể triển lãm "Spikey" hành vi do trường hợp đặc biệt (ví dụ, một tin tức sự kiện mới gây ra một số lượng lớn tìm kiếm trên cùng một chủ đề) Mặt khác, tiêu thụ tài nguyên cho vấn đề indexing có thể dự đoán được hơn

2.2.1 Dò tìm Web

Trước khi xây dựng chỉ số đảo ngược, đầu tiên chúng ta phải có được bộ sưu tập tài liệu qua đó xây dựng các chỉ số Trong học viện và cho các mục đích nghiên cứu, điều này có thể tương đối đơn giản Bộ sưu tập tiêu chuẩn cho thông tin nghiên cứu thu hồi được phổ biến rộng rãi cho nhiều thể loại khác nhau, từ các blog đến

Ngày đăng: 25/02/2021, 09:16

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] . Data-Intensive Text Processing with MapReduce - Jimmy Lin The iSchool University of Maryland Sách, tạp chí
Tiêu đề: Data-Intensive Text Processing with MapReduce
[2] . MapReduce: Simplified Data Processing on Large Clusters - Jeffrey Dean and Sanjay Ghemawat Google Inc Sách, tạp chí
Tiêu đề: MapReduce: Simplified Data Processing on Large Clusters
[3] . Azza Abouzeid, Kamil Bajda-Pawlikowski, Daniel Abadi, Avi Silberschatz, and Alexander Rasin. HadoopDB: An architectural hybrid of MapReduce and DBMS technologies for analytical workloads. In Proceedingsof the 35th International Conference on Very Large Data Base (VLDB 2009), pages 922{933, Lyon, France, 2009 Sách, tạp chí
Tiêu đề: An architectural hybrid of MapReduce and DBMS technologies for analytical workloads. In Proceedingsof the 35th International Conference on Very Large Data Base
[4] . Vo Ngoc Anh and Alistair Mo_at. Inverted index compression using word-aligned binary codes. Information Retrieval, 8 (1):151{166, 2005 Sách, tạp chí
Tiêu đề: Inverted index compression using word-aligned binary codes
[5] . Stefan Buttcher, Charles L. A. Clarke, and Gordon V. Cormack. Information Retrieval: Implementing and Evaluating Search Engines.MIT Press, Cambridge, Massachusetts, 2010 Sách, tạp chí
Tiêu đề: Information Retrieval: Implementing and Evaluating Search Engines
[6] . Jonathan Cohen. Graph twiddling in a MapReduce world. Computing in Science and Engineering, 11 (4):29{41, 2009 Sách, tạp chí
Tiêu đề: Graph twiddling in a MapReduce world
[7] . Jeffrey Dean and Sanjay Ghemawat. MapReduce: A exible data processing tool. Communications of the ACM, 53 (1):72{77, 2010 Khác
[8] . F. N. Afrati, A. D. Sarma, D. Menestrina, A. G. Parameswaran, and J. D. Ullman. Fuzzy joins using mapreduce. In ICDE, pages 498–509, 2012. [3] F. N. Afrati and J. D. Ullman. Optimizing multiway joins in a map-reduce environment. TKDE, 23 (9):1282–1298, 2011 Khác
[9] . S. Blanas, J. M. Patel, V. Ercegovac, J. Rao, E. J. Shekita, and Y. Tian. A comparison of join algorithms for log processing in mapreduce. In SIGMOD, pages 975–986, 2010 Khác

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w