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

Lập chỉ mục nghịch đảo (invertedindex) và tìm kiếm trên tập tài liệu lớn

29 709 7

Đ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 29
Dung lượng 1,53 MB

Nội dung

Lập chỉ mục nghịch đảo (invertedindex) và tìm kiếm trên tập tài liệu lớnSử dụng Hadoop và Mapreducegiả lập 1 máy tính, hệ điều hành Linux (bản phân phối Ubuntu 16.04, RAM 5GB, ổ cứng 50GB).Vận dụng được mô hình MapReduce vào bài toán đơn giản.Hoàn thành phạm vi bài toán đặt ra: lập chỉ mục nghịch đảo và tìm kiếm trên chỉ mục.Do điều kiện chạy thử nghiệm còn nhiều hạn chế nên chưa phát huy được ưu điểm của mô hình lập trình MapReduce.

Trang 1

Lập chỉ mục nghịch đảo

và tìm kiếm trên tập tài

liệu lớn

TRƯỜNG ĐẠI HỌC CẦN THƠ

KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG

Lớp cao học - HTTT-K24

Trang 3

Line 1: term1 doc1.txt doc2.txt …

Line 2: term2 doc2.txt doc5.txt …

Trang 4

1 PHẠM VI THỰC HIỆN

nghịch đảo theo mô hình MapReduce

(duyệt qua tất cả nội dung chỉ mục, không áp dụng kỹ thuật tìm kiếm nào để tăng tốc độ).

 Cấu trúc lưu trữ kết quả tìm kiếm: tìm thấy từ nào thì hiển thị từ đó cùng với danh sách docID chứa từ đã tìm kiếm

<Term_1> [tab] <docID> [space] <docID> …

<Term_2> [tab] <docID> [space] <docID> …

Trang 5

2.1 Inverted Index (tổng quát)

Tokenizer

Linguistic modules

Indexer

Inverted index.

friend roman countryman

2 4

2

13 16 1

Documents to

Indexer

Trang 6

2.1 Inverted Index: áp dụng cho bài toán

Tokenizer (term, docID)

Sort by term

Inverted Index (Dictionary and

Postings)

Trang 7

2.1 Indexer steps: Tokenizer

I did enact Julius

Caesar I was killed

i' the Capitol;

Brutus killed me.

Doc 1

So let it be with Caesar The noble Brutus hath told you Caesar was ambitious

Doc 2

Trang 8

2.1 Indexer steps: Sort

Trang 9

2.1 Indexer steps: Dictionary & Postings

Trang 10

2.1 Inverted Index - MapReduce

Tokenizer (term, docID) Sort by term

Inverted Index (Dictionary and

Postings)

Input, Splitting

Trang 11

2.1 Inverted Index – MapReduce: Mô hình

orange black red

yellow orange

red orange blue

red, Doc1.txt orange, Doc1.txt blue, Doc1.txt

yellow blue

orange black red

red orange blue

red, Doc1.txt red, Doc2.txt

orange, Doc1.txt orange, Doc2.txt orange, Doc2.txt

yellow, Doc1.txt yellow, Doc2.txt

blue, Doc1.txt blue, Doc1.txt black, Doc2.txt

red, Doc1.txt Doc2.txt orange, Doc1.txt Doc2.txt blue, Doc1.txt

yellow, Doc1.txt Doc2.txt

black, Doc2.txt

yellow orange yellow, Doc2.txtorange, Doc2.txt

black, Doc2.txt blue, Doc1.txt orange, Doc1.txt Doc2.txt red, Doc1.txt Doc2.txt yellow, Doc1.txt Doc2.txt

Input files Spliting Mapping Shuffling Reducing Result

(Key, Value) (Key, Value) (Key, Value) (Default 128MB/ split)

Trang 12

2.1 Inverted Index – MapReduce: Map

Map( k1 : id of row in the file ,

v1 : a line of text in the file ){

Trang 13

2.1 Inverted Index – MapReduce: Reduce

Reduce( k2 : the word ,

v2[] : list of docID with the same k2 ){

Trang 14

2.2 Search - MapReduce

Tokenizer (term /query , listdocID),

 term  query and index

Sort by term /query

//Query: xử lý thêm

Write results (term /query , listdocID)

Index files Query file

Input, Splitting

Trang 15

2.2 Search – MapReduce: Map

Map( k1 : id of row in the index file ,

v1 : a line of text in the index file ){

Trang 16

2.2 Search – MapReduce: Reduce

Reduce( k2 : the word ,

v2[] : list of docID with the same k2,

but this case v2 has one element ){

// nếu k2 là query thì cần xử lý thêm

emit( k3 : the word ~ k2 , v3 : list docID ); }

Trang 17

2.3 Inverted Index – Java code: Mapper class

public class InvertedIndexMapper extends Mapper <LongWritable, Text , Text, Text >{

private Text docID = new Text();

private Text word = new Text();

public void map( LongWritable key, Text value , Context context

) throws IOException, InterruptedException {

FileSplit file = (FileSplit) context.getInputSplit();

Trang 18

2.3 Inverted Index – Java code: Reducer class

public class InvertedIndexReducer

extends Reducer<Text,Text , Text,Text > {

String listdocID=new String();

public void reduce(Text key, Iterable<Text> values, Context

context) throws IOException, InterruptedException {

listdocID=""; //clear du lieu truoc khi ham map duoc goi lap lai

for(Text docID : values) {

if(!listdocID.contains(docID.toString())) //delete Duplicate

if(listdocID.trim().length() > 0){

listdocID = listdocID + " " + docID;

}else listdocID = listdocID + docID;

Trang 19

2.3 Inverted Index – Java code: Driver class

public class InvertedIndexDriver {

public static void main(String[] args) throws Exception {

Configuration conf = new Configuration();

Job job = Job.getInstance(conf, "Inverted Index");

job.setJarByClass(InvertedIndexDriver.class);//class contains main function

FileInputFormat.addInputPath(job, new Path(args[0]));

FileOutputFormat.setOutputPath(job, new Path(args[1]));

//thiet lap so reducer

job.setNumReduceTasks(2); System.exit(job.waitForCompletion(true) ? 0 : 1);

}

}

Trang 20

2.3 Search – Java code: Mapper class

public class SearchMapper extends Mapper<LongWritable, Text , Text, Text > {

String [] fields;

String query="";

String[] index;

//code read query: code nay dat ngoai ham map de tranh lap lai nhieu lan khi Mapper goi lai ham map

public void setup(Context context) {

Configuration conf = context.getConfiguration();

String queryPath = conf.get("queryPath");

String lineQuery=null;

//read contents of query file

try {

Path path = new Path(queryPath);

FileSystem fileSystem = FileSystem.get(new Configuration());

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileSystem.open(path)));

while ((lineQuery = bufferedReader.readLine()) != null) {

Trang 21

2.3 Search – Java code: Mapper class

public void map ( LongWritable key, Text value , Context context ) throws IOException, InterruptedException {

index = value.toString().split("\t"); //Tach tung dong chi muc

for (String field : fields) {

Trang 22

2.3 Search – Java code: Reducer class

public class SearchReducer extends Reducer<Text,Text, Text,Text > {

public void reduce(Text key, Iterable<Text> values, Context context)

throws IOException, InterruptedException {

//ban chat mot key duoc gom ve cung mot reducer ma chi muc thi da nhom lai theo key roi

//nen o day chi co duy nhat mot dong gom key, value tuong ung nen ko can phai nhom lai nua

//emit ~ Output(k2: word, v3: listdocID)

for(Text docIDs : values){

context.write(key, new Text("\t"+docIDs));

}

}//end reduce

}//end SearchReducer

Trang 23

2.3 Search – Java code: Driver class

public class SearchDriver {

public static void main(String[] args) throws Exception {

Configuration conf = new Configuration();

String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();

if (otherArgs.length != 3) { System.err.println("args include: <intput-path> <output-path> <query-path>"); System.exit(2);

}

String queryPath=otherArgs[2];//lay duong dan chuoi query conf.set("queryPath", queryPath);

Job job = Job.getInstance(conf, "Search Engine");

job.setJarByClass( SearchDriver.class );//class contains main function job.setMapperClass( SearchMapper.class );

job.setCombinerClass( SearchReducer.class );

job.setReducerClass( SearchReducer.class );

job.setOutputKeyClass(Text.class);//type data of key ~ key's output type of reduce job.setOutputValueClass(Text.class);//type data of value ~ value's output type of reduce

FileInputFormat.addInputPath(job, new Path(args[0]));

FileOutputFormat.setOutputPath(job, new Path(args[1]));

System.exit(job.waitForCompletion(true) ? 0 : 1);

}

}

Trang 24

3 Demo chương trình

Đề mô trực tiếp:

+ Số lượng: 7 files (~19 kB)

+ Định dạng: plain text (.txt).

Thiết bị: giả lập 1 máy tính, hệ điều hành Linux (bản

phân phối Ubuntu 16.04, RAM 5GB, ổ cứng 50GB).

Trang 25

4 KẾT LUẬN

toán đơn giản.

 Hoàn thành phạm vi bài toán đặt ra: lập chỉ mục nghịch đảo và tìm kiếm trên chỉ mục.

chế nên chưa phát huy được ưu điểm của mô hình lập trình MapReduce.

Trang 27

5 TÀI LIỆU THAM KHẢO

[1] Thang Le Dinh, Thuong-Cang Phan, “Towards an Architecture for Big Data Driven Knowledge Management Systems,” AMCIS 2016.

[2] J Dean and S Ghemawat, “MapReduce: Simplified Data Processing on Large Clusters,” in Proceedings of the 6th Conference on Symposium on

Opearting Systems Design & Implementation - Volume 6, CA, USA, 2004, pp 137–150.

[4]

https://stackoverflow.com/questions/47223444/inverted-index-with-mapreduce

Trang 28

6 HƯỚNG DẪN THỰC HÀNH

Trang 29

LOGO

Ngày đăng: 24/03/2019, 09:24

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w