Hadoop环境搭建及实现倒排索引

目 录

1.应用介绍 3

1.1实验环境介绍 3

1.2应用背景介绍 3

1.3应用的意义与价值 4

2.数据及存储 5

2.1数据来源及数据量 5

2.2数据存储解决方案 5

3.分析处理架构 5

3.1架构设计和处理方法 5

3.2核心处理算法代码 7

4.系统实现 9

5.总结 27

1.应用介绍

1.1实验环境介绍

本实验是在hadoop伪分布式处理架构下完成的。我用自己的笔记本在ubuntu14.04操作系统下自己搭建了hadoop2.7.1架构,并配置了伪分布式模式进行数据的处理。

1.2应用背景介绍

本次云计算大作业实现的是文档检索系统中最常用的数据结构—倒排索引。我通过查阅资料了解了倒排索引的实现过程,借鉴已有的实现程序完成了该算法在hadoop平台上的运行,并处理了相关的数据,得到了相应的处理结果。在关系数据库系统里,索引是检索数据最有效率的方式,。但对于搜索引擎,它并不能满足其特殊要求:

1)海量数据:搜索引擎面对的是海量数据,像Google、百度这样大型的商业搜索引擎索引都是亿级甚至百亿级的网页数量,面对如此海量数据 ,使得数据库系统很难有效的管理。

2)数据操作简单:搜索引擎使用的数据操作简单,一般而言,只需要增、删、改、查几个功能,而且数据都有特定的格式,可以针对这些应用设计出简单高效的应用程序。而一般的数据库系统则支持大而全的功能,同时损失了速度和空间。最后,搜索引擎面临大量的用户检索需求,这要求搜索引擎在检索程序的设计上要分秒必争,尽可能的将大运算量的工作在索引建立时完成,使检索运算尽量的少。一般的数据库系统很难承受如此大量的用户请求,而且在检索响应时间和检索并发度上都不及我们专门设计的索引系统。

1.3应用的意义与价值

倒排索引,也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。

现代搜索引擎的索引都是基于倒排索引。相比“签名文件”、“后缀树”等索引结构,“倒排索引”是实现单词到文档映射关系的最佳实现方式和最有效的索引结构。

2.数据及存储

2.1数据来源及数据量

数据的存储格式主要是txt文本文档格式的。数据主要来自于网上的英文原版书籍。我从网上下载了超过千万个英文单词的英文文档,文件大小为百兆级别。

2.2数据存储解决方案

因为数据主要是一些txt文本文件,所以下载下来后直接存储在本地即可。之后上传到Hdfs下的目录中。

3.分析处理架构

3.1架构设计和处理方法

实现倒排索引只要关注的信息为:单词、文档URL及词频。输入的文档格式为“文件名.txt”格式。

1)Map过程

首先使用默认的TextInputFormat类对输入文件进行处理,得到文本中每行的偏移量及其内容。显然,Map过程首先必须分析输入的

public static class Map extends Mapper<Object, Text, Text, Text> {

        private Text keyInfo = new Text(); // 存储单词和URL组合

        private Text valueInfo = new Text(); // 存储词频

        private FileSplit split; // 存储Split对象

        // 实现map函数

        public void map(Object key, Text value, Context context)

                throws IOException, InterruptedException {

            // 获得<key,value>对所属的FileSplit对象

            split = (FileSplit) context.getInputSplit();

            StringTokenizer itr = new StringTokenizer(value.toString());

            while (itr.hasMoreTokens()) {

                // key值由单词和URL组成,如"MapReduce:file1.txt"

                // 获取文件的完整路径

                // keyInfo.set(itr.nextToken()+":"+split.getPath().toString());

                // 这里为了好看,只获取文件的名称。

                int splitIndex = split.getPath().toString().indexOf("file");

                keyInfo.set(itr.nextToken() + ":"

                    + split.getPath().toString().substring(splitIndex));

                // 词频初始化为1

                valueInfo.set("1");

                context.write(keyInfo, valueInfo);

            }

        }

    }

    public static class Combine extends Reducer<Text, Text, Text, Text> {

        private Text info = new Text();

        // 实现reduce函数

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

                throws IOException, InterruptedException {

            // 统计词频

            int sum = 0;

            for (Text value : values) {

                sum += Integer.parseInt(value.toString());

            }

            int splitIndex = key.toString().indexOf(":");

            // 重新设置value值由URL和词频组成

            info.set(key.toString().substring(splitIndex + 1) + ":" + sum);

            // 重新设置key值为单词

            key.set(key.toString().substring(0, splitIndex));

            context.write(key, info);

        }

    }

    public static class Reduce extends Reducer<Text, Text, Text, Text> {

        private Text result = new Text();

        // 实现reduce函数

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

                throws IOException, InterruptedException {

            // 生成文档列表

            String fileList = new String();

            for (Text value : values) {

                fileList += value.toString() + ";";

            }

            result.set(fileList);

            context.write(key, result);

        }

}

4.系统实现

首先在ubuntu14.04系统下自己搭建了hadoop2.7.1架构,然后通过设置配置文件将hadoop架构配置为伪分布式模型。

实现过程是首先在eclipse中创建工程,编写程序,然后打包为jar文件。然后开启hadoop伪分布式服务,将需要处理的本地文件上传到hdfs下的目录中,然后运行jar文件,开始处理数据。具体的实现过程如下:

1)在eclipse中创建java工程。

2)将完整的工程打包为jar文件,并导出到本地目录下。

3)在本地目录中查看导出的jar文件为InvertedIndex.jar

4)运行hadoop前使用命令“bin/hdfs namenode -format”初始化hdfs。

5)初始化hdfs完成

6) 开启hadoop服务,hadoop的本地安装目录为/home/u/hadoop,在hadoop的安装目录下进入到sbin目录下,运行start-all.sh文件。

7)用jps命令查看当前启动的服务,其中有NameNode和DataNode,说明hadoop服务已开启。

8)在浏览器中输入网址:http://localhost:50070,查看hadoop UI信息。也说明了hadoop服务开启成功。

9)查看本地需要处理的数据,为在/home/u/hadoop/input/booktxt目录下的所有txt文本文件。之后会将这些文件重命名为file*.txt文件方面上传了处理操作。

10)使用bin/hdfs dfs -mkdir /cloudlab命令在hdfs下创建目录cloudlab存储需要处理的文件数据,使用bin/hdfs dfs -ls / 命令查看hdfs当前下的目录,显示cloudlab目录已创建成功。

11)使用命令 “bin/hdfs dfs -put /home/u/hadoop/input/booktxt/file*.txt /cloudlab/ ”上传本地文件到hdfs的cloudlab目录下。并且使用命令bin/hdfs dfs -ls /cloudlab/查看文件已经上传成功。

12)使用命令”bin/hadoop jar Jar/InvertedIndex.jar InvertedIndex /cloudlab/file*.txt /cloudlab/OutPut”运行InvertedIndex.jar文件,开始对数据进行处理。其中OutPut为结果输出目录,运行结束后会在hdfs下自动生成该目录。

13)运行过程展示,包括程序的处理过程。

14)使用命令bin/hdfs dfs -ls /cloudlab查看运行结果,可以看到在该目录下生成了文件OutPut.

15)使用命令“bin/hdfs dfs -ls /cloudlab/OutPut”查看OutPut目录下输出的文件为:part-r-00000.

16)使用命令“bin/hadoop fs -cat /cloudlab/OutPut/part-r-00000”查看输出结果文件中的内容。

17)部分经过程序处理后的结果如下,结果显示了一些英文单词在每个文件中出现的次数,符合倒排索引算法处理的结果。

5.总结

本次实验通过自己搭建hadoop架构来完成作业,在搭建的过程中遇到很多的问题,但通过查阅资料也一一解决了。在使用hadoop平台运行程序处理数据的过程中也学习到了很多知识,体验到如hadoop这样的大数据处理框架处理大数据量的优势。最后成功的在hadoop平台上运行了要实现的倒排索引算法,并对一些数据作了处理,得到了相应的结果。但也存在一些问题,比如前期数据没有经过细致的处理,以及结果没有经过整理等。

时间: 2024-10-09 11:04:40

Hadoop环境搭建及实现倒排索引的相关文章

完全分布式模式的Hadoop环境搭建

一.本文说明:本次测试在五台虚拟机系统上进行完全分布式搭建.Hadoop分布式模式是在多台机器上分布式部署,配置非常类似于伪分布式,名称节点和数据节点都分布在不同的主机上,每台数据节点上都有相应的任务调度. 二.环境说明:       虚拟软件:VM10.0       操作系统:Cent Os 6.7       hadoop版本:hadoop-2.7.2       JDK版本:jdk1.8_77备注:基于独立模式基础上搭建,参考文章:独立模式的Hadoop环境搭建. 三.基本环境配置   

伪分布式模式的Hadoop环境搭建

一.本文说明:     本次测试在一台虚拟机系统上进行伪分布式搭建.Hadoop伪分布式模式是在单机上模拟Hadoop分布式,单机上的分布式并不是真正的伪分布式,而是使 用线程模拟分布式.Hadoop本身是无法区分伪分布式和分布式的,两种配置也很相似.唯一不同的地方是伪分布式是在单机器上配置,数据节点和名字节点均 是一个机器. 二.环境说明:      操作系统:Cent Os 6.7      hadoop版本:hadoop-2.7.2      JDK版本:jdk1.8_77     备注:

hadoop环境搭建之关于NAT模式静态IP的设置 ---VMware12+CentOs7

很久没有更新了,主要是没有时间,今天挤出时间验证了一下,果然还是有些问题的,不过已经解决了,就发上来吧. PS:小豆腐看仔细了哦~ 关于hadoop环境搭建,从单机模式,到伪分布式,再到完全分布式,我们这里就讨论完全分布式,关于搭建工具,有hadoop+CentOs+VMware,感觉各个版本还是有一点差异的. 随后可能会整理出一个常用版本,今天先说说VM的静态IP的设置吧: 关于VM,大家可能不陌生,目前也是windows系统搭建模拟hadoop环境的必要软件之一. 但是,由于有些人会经常改变

Nutch+hadoop环境搭建

以前搭建环境或是配置软件从来都没有留Tips的习惯,但实践证明这是错误的--做过不等于记得怎么做,遇到过的错误也不等于今后就不是错误了.Nutch跟Hadoop的搭建困扰了我很久,但回头看看又觉得真正有些问题的其实就几个关键点,所以觉得花些时间写个简单流程,缅怀一下最近的探索,也希望能给想要搭建Nutch或hadoop的同学提供一些帮助.欢迎大家指正. 想要说明一下的是,虽然说hadoop诞生于nutch,但现在hadoop已经完全独立为一个分布式框架,我们可以简 单地理解为nutch只是跑在h

Hadoop HA + HBase环境搭建(一)————zookeeper和hadoop环境搭建

版本信息: Hadoop 2.6.3 HBase 1.0.3 JDK 1.8 Zookeeper 3.4.9 集群信息: RDFMaster 192.168.0.41 (Hadoop主节点,zk节点,HBase主节点) RDFSlave01 192.168.0.42 (Hadoop备份主节点,从节点,zk节点,HBase的RegionServer) RDFSlave02 192.168.0.43 (从节点,zk节点,HBase的RegionServer) RDFSlave03 192.168.0

分享一些Hadoop环境搭建所用到的软件

本来想用土的掉渣的语言说说hadoop配置的,因为最近总有人问我,环境搭建老出莫名其妙的问题,可是写到一半,还是决定不写了,网上教程好多好多,而大家遇到问题有很多是软件版本不对应造成的,因此我就把大家需要用到的软件给共享一下算了,不用到处去找了.不谢,请叫我活雷锋. 1.虚拟机VMWare10,用这个版本吧,我用过其他几个版本,有的时候会出错. 下载地址:http://yunpan.cn/csmATAd8zQz5W  提取码 cf10 2.CentOS6.5系统 下载地址:http://yunp

hadoop环境搭建与测试

搭建参看: http://blog.csdn.net/w13770269691/article/details/16883663/ 查看集群状态: [[email protected] bin]# hdfs dfsadmin -report Configured Capacity: 36729053184 (34.21 GB) Present Capacity: 13322559491 (12.41 GB) DFS Remaining: 13322240000 (12.41 GB) DFS Us

独立模式的Hadoop环境搭建

对于Hadoop来说,最主要的是两个方面,一个是分布式文件系统HDFS,另一个是MapReduce计算模型,搭建Hadoop的运行环境主要分为三种:独立模式环境.伪分布式环境.完全分布式环境.    一.独立模式:也叫单机模式.这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统,没有守护进程,所有程序都运行在同一个JVM中,利于调试和测试,主要用于开发环境.    二.伪分布式:hadoop运行在单机上,但是模拟了一个小的集群,运行在不同的JVM中,用不同的Java

hadoop环境搭建与測试

搭建參看: http://blog.csdn.net/w13770269691/article/details/16883663/ 查看集群状态: [[email protected] bin]# hdfs dfsadmin -report Configured Capacity: 36729053184 (34.21 GB) Present Capacity: 13322559491 (12.41 GB) DFS Remaining: 13322240000 (12.41 GB) DFS Us