Mapreduce《案例之倒排索引》
源数据:
1)file1:
MapReduce is simple
2)file2:
MapReduce is powerful is simple
3)file3:
Hello MapReduce bye MapReduce
要实现的结果:
样例输出如下所示。
MapReduce file1.txt:1;file2.txt:1;file3.txt:2;
is file1.txt:1;file2.txt:2;
simple file1.txt:1;file2.txt:1;
powerful file2.txt:1;
Hello file3.txt:1;
bye file3.txt:1;
=========================JAVA CODE======================
package gq;
import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
/**
*
* Class Description:分词小demo测试类
*
* Author:gaoqi
*
* Date:2015年6月5日 下午2:03:08
*
*/
public class FenCi {
public static class Map extends Mapper<LongWritable, Text, Text, Text>{
private FileSplit fileSplit;
public void map(LongWritable key,Text value,Context context) throws IOException, InterruptedException{
fileSplit = (FileSplit) context.getInputSplit();
StringTokenizer stk = new StringTokenizer(value.toString().trim());
while(stk.hasMoreElements()){
String v = stk.nextToken();
String path = fileSplit.getPath().toString();
String filename = path.substring(path.indexOf("file"));
context.write(new Text(v+":"+filename), new Text("1"));
}
}
}
public static class Combiner extends Reducer<Text, Text, Text, Text>{
public void reduce(Text key,Iterable<Text> values,Context context) throws IOException, InterruptedException{
int sum = 0;
for(Text t :values){
sum += Integer.parseInt(t.toString());
}
String v = key.toString();
context.write(new Text(v.substring(0,v.indexOf(":"))), new Text(v.substring(v.indexOf(":")+1)+":"+sum));
}
}
public static class Reduce extends Reducer<Text, Text, Text, Text>{
public void reduce(Text key,Iterable<Text> values,Context context) throws IOException, InterruptedException{
Iterator<Text> its = values.iterator();
String value = "";
while(its.hasNext()){
value+=its.next()+";";
}
context.write(key, new Text(value));
}
}
public static void main(String[] args) throws Exception{
Configuration conf = new Configuration();
Job job = new Job(conf,"FenCi");
job.setJarByClass(FenCi.class);
job.setMapperClass(Map.class);
job.setCombinerClass(Combiner.class);
job.setReducerClass(Reduce.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path("hdfs://h0:9000/user/tallqi/in/inputInvertedIndex"));
FileOutputFormat.setOutputPath(job, new Path("hdfs://h0:9000/user/tallqi/in/outputFenci"));
System.exit(job.waitForCompletion(true)?0:1);
}
}
相关推荐
在这个实例中,我们将详细探讨如何使用MapReduce实现倒排索引。 首先,我们来看`Mapper`类。`InvertedIndexMapper`是Map阶段的核心,它负责将输入数据拆分成键值对(K1, V1)并转换为新的键值对(K2, V2)。在这个...
运行说明:在linux终端输入 $ hadoop jar test-1.0-SNAPSHOT.jar WordCount /input/* /MyOutput1/ 后两个参数是hdfs上面【输入】的文本文件目录和【输出】目录。 记得清空输出目录。
《Hadoop倒排索引程序:并行框架下的文本处理技术》 在现代大数据处理领域,Hadoop作为一款开源的并行计算框架,扮演着至关重要的角色。倒排索引,作为一种高效的全文检索技术,被广泛应用于搜索引擎和信息检索系统...
需求 有如下数据 a.txt hello tom hello jim hello kitty hello rose b.txt hello jerry hello jim hello kitty hello jack c.txt hello jerry hello java hello c++ hello c++ 需要输出如下格式: ...1
案例描述:为搜索引擎构建倒排索引,将单词映射到其出现的文档列表。 Map阶段:输出键值对,键为单词,值为文档ID。 Reduce阶段:对每个单词的文档列表进行合并,形成倒排索引。 3. 网络数据分析 案例描述:分析...
在本节中,我们将深入探讨MapReduce的扩展案例,特别是倒排索引的构建,这是一个在大数据处理中常见的任务,特别是在搜索引擎技术中。倒排索引允许快速定位文档中特定关键词的位置,从而提高搜索效率。 首先,我们...
7. 倒排索引总结(Inverted Index Summarizations):这是一个搜索引擎中常用的索引技术,MapReduce可以用来构建倒排索引,提高数据检索的速度。 8. 计数模式(Counting with Counters):计数器是MapReduce中用于...
本书分为多个章节,涵盖了MapReduce的基本概念、算法设计、文本检索中的倒排索引以及图算法等多个方面。 - **第1章:介绍** 本章主要介绍了云计算的概念及其在处理大规模数据集时的重要性和优势,并概述了...
这些数据可能来自网页抓取文档、网络请求日志等,目标是计算各种派生数据,如倒排索引、网页结构的多种表示、每个主机爬取页面的摘要统计以及一天内最频繁查询的集合。虽然这些计算在概念上并不复杂,但输入数据量...
在案例需求中,需要对a.txt、b.txt和c.txt三个源文件建立倒排索引,并将结果输出到倒排索引文件。 实施这个任务时,项目采用了Hadoop作为基础平台,这是一个分布式计算框架,擅长处理和存储大量数据。Hadoop服务的...
与正向索引不同,倒排索引以词汇为索引项,每个词汇对应一个文档列表。 - **倒排索引构建**:包括词汇提取、文档标识符分配等步骤。 - **索引压缩**:为了节省存储空间,可以采用不同的编码技术对索引进行压缩。 - ...
在Google内部,MapReduce已广泛应用于各种数据处理场景,例如文档抓取、Web请求日志处理、倒排索引的生成等,并每天执行超过1000个MapReduce作业。 MapReduce编程模型的基本原理是通过Map函数处理输入的键值对(key/...
实际应用中,谷歌内部已经使用了数百个MapReduce程序,每天执行超过1000个作业,涵盖各种任务,如构建倒排索引、分析网页请求日志、统计页面抓取信息等。 在实现上,MapReduce库处理了数据分片、机器调度、故障恢复...
通过MapReduce,Google能够快速响应不断增长的数据处理需求,支持各种衍生数据的计算,如文档倒排索引、网页图结构的表示、页面抓取统计等。 #### 结论与展望 MapReduce作为Google的一项关键技术,不仅极大地简化了...