当前位置:文档之家› SRP结题报告——唐伟志

SRP结题报告——唐伟志

SRP结题报告

基于分布式存储的实验数据采集和管理系统

1.绪论

1.1研究背景

在信息技术不断发展下,人们认识到了数据本身的价值,“大数据”在商业应用中取得了巨大的成功。在智能信息处理的研究中,我们主要通过算法对数据进行理解和感知,在研究过程中会采集和产生大量数据,如声音、视频、算法结果等,以往这些数据大部分会被作为无用数据丢弃,只保留部分实验结果。本项目拟使用当前非关系数据库、分布式文件系统等技术,建立智能信息处理中实验产生数据的采集及存储平台,将数据存储,以便后续更强大的算法和计算资源进行分析处理。

1.2学生参与研究主要内容

开发基于分布式存储的实验数据采集和管理系统,用于采集和存储各类试验中产生的数据,方便随时获取和查阅,同时为后续更大规模的算法统计和处理做准备,详细包括:

(1)、智能信息处理相关研究中各个环节数据的高效、方便的采集;

(2)、采集到数据的智能化处理,如标记、分类、压缩等;

(3)、搭建分布式存储系统,用于存储相关数据,并尽量能适应未来大规模并行算法的一些需求特点;

(4)、开发Web应用,能进行方便的数据查阅和获取。

1.3预期目标

搭建基于分布式存储的实验数据采集和管理系统的小规模示范系统。

2.分布式文件系统概述

2.1分布式文件系统简介

分布式文件系统(Distributed File System)是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

在这样的文件系统中,客户端并非直接访问底层的数据存储区块,而是通过网络,以特定的通信协议和服务器沟通。借由通信协议的设计,可以让客户端和服务器端都能根据访问控制列表或是授权,来限制对于文件系统的访问。

相对地,在一个分享的磁盘文件系统中,所有节点对数据存储区块都有相同的访问权,在这样的系统中,访问权限就必须由客户端程序来控制。

分布式文件系统可以包含的功能有:透通的数据复制与容错。也就是说,即使系统中有一小部份的节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。

综上所述,分布式文件系统所拥有的透通的数据复制以及可靠的容错性,十分适合用于实验数据采集和管理系统。

2.2分布式文件系统的选择

当前比较流行的分布式文件系统包括:

Lustre:lustre是一个大规模的、安全可靠的,具备高可用性的集群文件系统,它是由SUN公司开发和维护。该项目主要的目的就是开发下一代的集群文件系统,可以支持超过10000个节点,数以PB的数量存储系统。

Hadoop:hadoop并不仅仅是一个用于存储的分布式文件系统,而是设计用来在由通用计算设备组成的大型集群上执行分布式应用的框架。

NFS:网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS。NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件。

在实际搭建中,主要考虑使用Apache Hadoop, Hadoop可以配合云计算处理OpenStack使用,开源,文档资料比较丰富,现在已经广泛投入生产使用,也能够满足项目后续更大规模的算法统计和处理的要求。

3.Apache Hadoop简述及安装

3.1 关于Apache Hadoop

Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架。它支持在商品硬件构建的大型集群上运行的应用程序。Hadoop是根据Google公司发表的MapReduce和Google档案系统的论文自行实作而成,由开源社区维护。

Hadoop框架透明地为应用提供可靠性和数据移动。现在普遍认为整个Apache Hadoop“平台”包括Hadoop内核、MapReduce、Hadoop分布式文件系统(HDFS)以及一些相关项目,有Apache Hive和Apache HBase等等。

3.2 Hadoop基础架构

Hadoop被定位为一个易于使用的平台,以HDFS、MapReduce为基础,能够运行上千台PCServer组成的系统集群,并以一种可靠、容错的方式分布式处理请求。

下图显示Hadoop部署结构示意图

在Hadoop的系统中,会有一台master,主要负责NameNode的工作以及JobTracker的工作。JobTracker的主要职责就是启动、跟踪和调度各个Slave 的任务执行。还会有多台slave,每一台slave通常具有DataNode的功能并负责TaskTracker的工作。TaskTracker根据应用要求来结合本地数据执行Map任务以及Reduce任务。

3.3 Hadoop处理流程

Hadoop主要靠MapReduce进行处理处理。MapReduce是由Google在一篇论文中提出并广为流传的。它最早是Google提出的一个软件架构,用于大规模数据集群分布式运算。任务的分解(Map)与结果的汇总(Reduce)是其主要思想。Map就是将一个任务分解成多个任务,Reduce就是将分解后多任务分别处理,并将结果汇总为最终结果。

下图所示Hadoop处理流程:

上图就是MapReduce大致的处理流程。在Map之前,可能还有对输入数据的Split过程以保证任务并行效率;在Map之后可能还有Shuffle过程来提高Reduce的效率以及减小数据传输的压力。

3.4 Hadoop的安装

安装环境:ubuntu 13.10+Hadoop2.3.0+java1.7.0

首先通过虚拟机Virtual Box搭建ubuntu13.10,然后根据Hadoop官方文档,安装好伪分布式Hadoop2.3.0,即可使用jps命令进行安装检测。若jps命令可以检测出NodeManager、NameNode、SeconderyNameNode、DataNode、ResourceManager等Hadoop相关组件成功启动,即表示Hadoop安装成功。

4. 使用MapReduce进行数据处理

4.1关于MapReduce

MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(化简)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

4.2分布和可靠性

MapReduce通过把对数据集的大规模操作分发给网络上的每个节点实现可

靠性;每个节点会周期性的把完成的工作和状态的更新报告回来。如果一个节点保持沉默超过一个预设的时间间隔,主节点记录下这个节点状态为死亡,并把分配给这个节点的数据发到别的节点。每个操作使用命名文件的不可分割操作以确保不会发生并行线程间的冲突;当文件被改名的时候,系统可能会把他们复制到任务名以外的另一个名字上去。(避免副作用)。

由于MapReduce的分布和可靠性,非常适合运用在Hadoop中进行数据处理。Hadoop发展到现在,已经将MapReduce算法的相关API封装好,可以根据官方文档,使用java编写具体的程序以进行相应的数据处理。

4.3 MapReduce实现倒排索引

假设有一文本文件,其中存放着一批通话理论,分为两列存储,第一列数据是用户A的手机号码,第二列数据是用户B的手机号码,由用户A拨给用户B,实例数据如下:

135******** 10086

135******** 120

135******** 12306

136******** 10086

137******** 135********

152******** 135********

0854******* 120

0854******* 12306

139******** 120

现在需要对这批数据进行处理,实现一个倒排索引,记录拨打给某一用户B 的所有用户A。参考官方文档,Map()函数如下实现:

public static class Map extends Mapper{ public void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException{

String line=value.toString();//read source line

try{

String[] lineSplit = line.split(" ");

String nums0 = lineSplit[1];

String nums1 = lineSplit[0];

context.write(new Text(nums0), new Text(nums1));

}

catch(https://www.doczj.com/doc/9412060122.html,ng.ArrayIndexOutOfBoundsException e){

context.getCounter(Counter.LINESKIP).increment(1);

return;

}

}

}

Map()函数使用java.string中的split()函数进行数据切割,每行切割后的两个数据分别存入nums0和nums1,这样Map()所做的工作完成,后面的context.write只不过是设定一定的格式,将nums0和nums1传到下一步,接下来进行的Reduce() 函数。

Reduce()函数接受到数据后,将对拆分好的数据进行输出前的处理,我们将在这里设定输出的样式,具体代码如下:

public static class Reduce extends Reducer{ public void reduce(Text key,Iterable values,Context context)

throws IOException,InterruptedException{

String valuestring;

String out="";

for(Text value:values){

valuestring=value.toString();

out += valuestring+"|";

}

context.write(key, new Text(out));

}

}

这个MapReduce就这样完成了,这也是整个程序的核心,将程序完善后,可以得到如下数据:

可以看到已经成功得到了倒排索引的结果,虽然这一程序可以不用MapReduce实现,因为数据量足够小,不过若是在大数据处理方面,使用代码直接处理与MapReduce处理的性能相差甚远。

4.4 Hadoop的总结

根据上面对于Hadoop的介绍,以及Hadoop中使用MapReduce进行数据处理的实例,我们说搭建出来的这一数据存储和数据处理有着分布式、容错性和可靠性等优点,适用于实验数据存储、处理和管理平台。

至此,基于分布式存储的实验数据采集和管理系统的基本框架已经搭建完成,也进行了一定的数据处理测试,大体让人满意。

5. 关于openstack

5.1 使用openstack

虽然Hadoop在数据存储和处理方面已经足够优秀,通过上面的分析也知道能够满足要求,但是数据的采集方面仍然没有更好的进行优化,还是使用传统的输入,所以使用openstack这一云端计算服务,方便数据的存储、离线和本地化。而且,也可以基于openstack拓展更多的功能。

5.2 openstack架构

OpenStack提供了一个部署云的操作平台或工具集。旗下包含了一组由社区维护的开源项目,他们分别是OpenStackCompute(Nova),OpenStackObjectStorage(Swift),以及OpenStackImageService(Glance)。

三个项目的基本关系如下图:

解读一下图示内容:Openstack隔离用户层和供应商,中间通过镜像Image 来连接,即供应商提供镜像,其中包含着相应的服务交由用户层使用,同时还向开发人员暴露API,可以方便进行更多的功能拓展。

5.3 openstack的安装

Openstack发展到如今已经有了很大的改变,不过它的安装还是比较复杂的,要想了解openstack安装的相关信息以保障有步骤、有保障的安装,需要了解本地openstack所必须的三个节点ComputeNode、NetworkNode以及ControllerNode之间的关系。

官方给出如下架构图,很容易理解三个节点之间是怎样通信的:

如图,ComputeNode有着两块网卡eth0和eth1,NetworkNode有着三块,

分别是eth0、eth1和eth2,而ControllerNode也是两块网卡eth0和eth1。

和图片所示一样的,ComputeNode、ControllerNode和NetworkNode之间靠着eth0通信,负责管理整个网络;而ComputeNode和NetworkNode之间靠eth1通信,进行网络认证;最后ControllerNode的eth1以及NetworkNode的eth2

分别提供外网访问服务以及AIP暴露服务,由此可以大概的认识到openstack

整个本地架构的基本信息。

而具体的安装步骤,参见官网手册和网络资源,耐心的进行搭建。

5.4 将OpenStack部署到Hadoop

随着一些企业开始同时利用云计算和大数据技术,现在应当考虑如何将这些工具结合使用。在这种情况下,这一平台将实现最佳的分析处理能力,同时利用私有云的快速弹性 (rapid elasticity) 和单一租赁的特性。现在提供以下方法:方案1. Swift+Apache Hadoop MapReduce

在私有云环境中,常见的大数据部署模型之一是:将 OpenStack 的 Swift 存储技术部署到 Apache Hadoop MapReduce 集群,从而实现处理功能。使用这种架构的优势是,系统将获得一个可扩展的存储节点,可以用该节点来处理其不断累积的数据,该解决方案将满足不断增长的数据需求。

方案2. Swift、Nova + Apache Hadoop MapReduce

如果希望在大数据环境中实现更高程度的灵活性、可扩展性和自治性,可以利用 Apache 和 OpenStack 提供的开源产品的与生俱来的能力。为此,需要最大限度地利用这两种技术栈,这就要求采用与前面所述的解决方案不同的思维方式来设计环境。

要获得完全可伸缩的、灵活的大数据环境,必须在一个同时提供存储和计算节点的私有云环境中运行它。为此,必须先构建私有云,然后添加大数据。因此,在这种情况下,必然会用到 Swift、Nova 和 RabbitMQ,并控制器节点来管理和维护环境。如果准备完全使用私有云,那么应当添加 Quantum,从网络的角度对不同的环境进行划分。

在设置并测试了私有云环境后,可以将 Apache Hadoop 组件合并到其中。此时,Nova 实例可用于存放 NoSQL 或 SQL 数据存储以及 Pig 和 MapReduce 实例;Hadoop 可以位于一个独立的非 Nova 机器上,以便提供处理功能。在不久的将来,Hadoop 有望在 Nova 实例上运行,使私有云自包含到所有 Nova 实例中。

5.5 OpenStack小结

由于OpenStack是一个极为复杂的云计算平台,对其组件的理解、自定义修改十分困难,本人在有限的时间只是搭建好OpenStack平台,并未将其与Hadoop 结合使用,希望在未来的时间继续学习并部署这一优秀的平台。

6. 主要成果和结论

本小组在接近一年的时间内,利用课余时间,对课题《基于分布式存储的实验数据采集和管理系统》进行了充分的实践,主要完成了以下工作:

1、通过讨论如今火爆的“大数据”和“云计算”,以及查阅了分布式文

件系统的相关资料,对于想要搭建的系统提供了依据;

2、对Hadoop官方文档进行阅读,并在虚拟机上搭建了Hadoop伪分布

式系统;

3、基于Hadoop平台,使用MapReduce算法,对一些基本的数据处理算

法进行了实践;

4、在Hadoop上继续拓展,搭建了云计算平台openstack,可以提供一

些功能更强的服务。

结束语:想要搭建一个完整的数据系统是十分复杂的,过程也是十分艰难的,在商业上,不少公司(例如国内著名的阿里巴巴、百度和腾讯)都拥有一套自己的数据采集、处理以及管理系统,这套系统靠着一群优秀的工程师进行维护。而本次为实验数据服务的数据系统,对于小组人员来说也是一大挑战,需要身后的理论基础和丰富的实践经验,作者的知识水平还远远不够,查询了大量资料,在老师的帮助下,终于做出了合理的平台搭建和数据实践,验证了数据存储和处理的可靠性,使自己得到了很大的锻炼。

参考文献:

[1]Philip S Yeager.《A distributed file system for distributed conferencing system》.[CP/OL].[2003].

相关主题
文本预览
相关文档 最新文档