hadoop平台的海量日志分析与处理
随着科技的日益发展,数据的产生越来越迅速。对于庞大基数的数据的处理就尤为重要。本文就是在此基础上利用新兴的云计算技术,在Hadoop平台上完成海量日志的模拟计算。本文首先是Hadoop平台的搭建问题,我们通过在linux系统环境下运行Hadoop平台并在上面实现作业的方法来完成。关于日志的分析和处理,本文从海量日志的获取上着手,通过日志采集器收集客户机采集到的日志并且能自动上传到Hadoop集群中。接下来就是日志的存储,本文通过HDFS来进行存储,按照日志文件的设计格式来对存储的日志文件进行排序以便之后的日志查询。最后就是日志的查询了,利用mapreduce强大的计算功能,通过设置的关键字和参考值来实现日志的查询。关键字Hadoop集群;HDFS;MAPREDUCEAnalysis and treatment of massive log based onHadoop platformStudent majoring in computer science and technology SunQuanTutor YeXiJunAbstract: along with the development of technology, the data has the more and more quickly. For large base data Treatment is important for. This paper is based on the calculation of base using the emerging cloud, completed the simulation calculation of mass log on Hadoop platform. This paper is to build a Hadoop platform, we run through the Hadoop platform in the environment of Linux system and implementation in the above operations. Firstly, the acquisition of a large number of log analysis and processing log,。The log col *好棒文|www.hbsrm.com +Q: &351916072&
lector collects client acquisition to log and automatically uploaded to the Hadoop cluster. Next is the log storage, this paper uses HDFS storage format, designed according to the log file to store the log file. Finally is the log query, using the powerful calculation function of MapReduce, realizes the log by setting the keywords and reference value.1、绪论1.1研究课题目的和意义[15] 计算机技术越来越发达,科技也日新月异,采用的系统越来越多,用什么方法既能很好的保护好我们的隐私同时还能时时刻刻的来记录我们的足迹呢,查看日志信息就是一个很好的方式。管理员可以通过查看日志信息来获取知识。因为日志具有的数据量大,不容易能够使人读懂的特点,如果光通过管理员来查看日志记录的这么一种方法,我们将很难从中发现有用的信息。挖掘出日志中所包含的信息并通过它来改进用户体验来是非常有价值的。但是使用传统的技术对海量日志进行分析的时候,无论在存储和计算量上都遇到了很大的困难,无法很好地解决,此时云计算进入了人们的视野。面对越来越庞大的数据量,简简单单的采用shell脚本语言对日志数据进行处理,并将处理完后的数据放入到Oracle数据库中再将其进行计算显然已经满足不了我们的需求了,这时Hadoop应运而生了,它几乎完美的解决了上面的所有问题。Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。例如,如果您要 grep 一个 10TB 的巨型文件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题,采用并行执行机制,因此能大大提高效率。Hadoop框架的优点是在存储和计算方面都具有很强的可扩展性,它是一种十分经济的框架,可以运行于廉价PC组成的集群系统之上,它的HDFS分布式文件系统具有备份恢复机制,它的MapReduce计算模型能够并行化处理重复数据清理任务作业,此外Hadoop还是一个开源的平台,人们可以根据自己的实际需求改进Hadoop,使其满足自己的应用。正是由于Hadoop具有上述的优点,一些大型互联网企业如Yahoo!、Facebook、亚马逊等都已经构建了自己的Hadoop分布式应用平台来处理他们的数据。通过Hadoop实现海量数据的处理,具有实际的应用价值。[3]1.2 国内外研究现状[7]1.2.1、云计算发展现状[2] 云计算作为业界热点,近年来世界各国对于它的研究和应用方兴未艾,许多政府部门和著名公司在研发与应用云计算的过程中做出了大量的工作和努力。(1)云计算在国外的发展 云计算与网络密不可分。云计算的原始含义是通过互联网提供计算功能。云计算的起源跟亚马逊河谷歌两个公司有十分密切的关系,他们最早的使用到了“Cloud Computing”的表述方式。目前美国公开宣布进入和支持云计算技术开发的业界巨头包括微软、谷歌、IBM、亚马逊、Netsuite、Adobe、Netapp等公司。谷歌公司是云计算的提出者。2006年谷歌公司启动了“Google101”计划,引导大学生们进行“云“系统的编程开发。多年的搜索引擎技术的积累成果使得谷歌公司在云计算技术上处于领先的地位,不仅提供在线应用,还希望发挥自身的数据库系统优势,成为在线应用的同一平台。谷歌公司以发表学术论文的形式公开了其云计算的三大法宝GFS MAP/REDUCE BIFTABLE ,并在美国和我国等国高校开设云计算编程课程。微软公司于2008年10月推出了“Windows Azure”操作系统,这个系统作为微软公司云计算计划的服务器端操作系统( cloud os )为广大开发者提供服务。微软公司拥有全世界数以亿计的windows操作系统用户桌面和浏览器,Azure(蓝天)试图通过在互联网架构上打造新的云计算平台,让windows操作系统由个人pc延伸到“蓝天”上。IBM公司从企业内部需求的逐渐上升出发,在2007年11月提出了“蓝云”计划,推出了共有云和私有云的概念。IBM公司提出私有云的解决方案是为减少诸如数据、信息安全等共有云现存的问题,从而抢占企业云计算市场。依托IBM公司在服务器领域的传统优势,IBM公司成为目前唯一一个提供从硬件、软件到服务全部自主生产的公司。2008年7月,雅虎、惠普和英特尔公司联合宣布将建立全球性的开源云计算研究测试床,成为OPEN CIRRUS,鼓励开展云计算、服务和数据中心管理等领域中各方面的研究。苹果公司是云计算领域上的一位积极参参与者。这些国际知名大公司在全世界建造了庞大的云计算中心。譬如谷歌公司的搜索引擎分布于200多个站点,超过100万台服务器支撑,而且设施数量正在迅猛增长。云计算在国内的发展2008年IBM公司在无锡建立了我国第一个云计算中心,在北京IBM中国创新中心建立了第二个云计算中心—IBM大华区云计算中心。2009年初,在南京建立了国内首个“电子商务云计算中心”。世纪互联推出“CloudEx”产品线,包括完整的互联网主机服务“CloudEx Computer Sevice”、基于在线存储虚拟化的“CloudEx Storage Service”等云计算服务。随着云计算的升温,国内的电信运营商也都积极投入到云计算的研究中,以期望通过云计算技术促进网络结构的优化和整合,寻找到新的盈利的机会和利润增长点,以实现向信息服务企业的转型。中国移动公司推出了“大云”(Big Cloud)云计算基础服务平台,中国电信公司推出了“e云”云计算平台,中国联通公司推出了“互联云”平台。我国企业创造了“云安全”概念,通过网状的大量客户端对网络中软件行为的异常监测,获取互联网中的木马、恶意程序的最新信息,在服务器端进行自动分析和处理,再把解决方案分发到客户端。瑞星、趋势等企业都推出了云安全解决方案。随着计算机的发展,互联网的功能越来越强大,用户可以通过云计算在互联网上处理庞大的数据和获取所需要的信息。从云计算的发展现状来看,未来云计算的发展会构建大规模的能够与应用程序密切结合的底层基础设施的方向发展。不断创新的云计算应用程序,为用户提供更多的更完善的互联网服务也可作为云计算的一个发展方向。1.2.2、云计算实现机制[4]由于云计算分为IaaS(基础设施即服务)、PaaS(平台即服务)和SaaS(软件即服务)三种类型,不同的厂家又提供了不同的解决方案,目前还没有一个统一的技术体系结构。云计算技术体系结构分为4层物理资源层、资源池层、管理中间件层和SOA(面向服务的体系结构)构建层。物理资源层包括计算机、存储器、网络设施、数据库和软件等;资源池层是将大量相同类型的资源构成同构或接近同构的资源池,如计算资源池、数据资源池等。构建资源池层更多是物理资源的集成和管理工作;管理中间件层负责对云计算的资源进行管理,并对众多应用任务进行调度;SOA层件云计算能力封装成标准的Web Service服务。2、Hadoop相关原理Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是Hadoop是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop是可靠地,因为它假设计算元素和存储会失败,因此维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop是高效的,因为它以并行的方式处理。Hadoop是可伸缩的,能够处理拍字节级数据。此外Hadoop依赖于社区服务器,成本比较低,任何人都可以使用。Hadoop有许多元素构成,其中最底部的是HDFS,它存储Hadoop集群中所有存储节点上的文件。上一层是MapReduce引擎。[1]2.1、HDFS[11]2.1.1、Namenode和Datanode的划分Namenode是一个中心服务器,负责管理文件系统的Namespace和客户端对文件的访问。Datanode在集群中会有很多个,一般是一个节点存在一个,负责管理其自身节点上附带的存储。在内部,一个大文件分成一个或多个block,这些block存储在Datanode集合里。Namenode执行文件系统的NBamespace相关操作。Datanode在NaMenode的指挥下进行block创建、删除和复制。 2.1.2、文件系统操作和namespace的关系2.1.3、数据复制HDFS被设计成在一个大集群中可以跨机器可靠地存储海量文件。它将每个文件存储成block序列,除了最后一个block,都是同样大小。HDFS的文件是write—one,并且严格要求在任何时候只有一个writer。Namenode全权管理block的赋值,它周期性地从集群中的每个Datanodde接受心跳包和一个blockreport。2.1.4、文件系统元数据的持久化Namenode存储HDFS的元数据。对于任何对文件元数据局产生修改的操作,Namenode都是用一个称为Editlog的日志记录下来的,它在内存中保存着整个文件系统Namespace和Blockmap的映像。2.1.5、通信协议所有的HDFS通信协议都构建在TCP/IP上。客户端通过一个可配置的端口连接到Namenode,通过ClientProtocol与Namenode交互。而DatanodeProtocol与Namenode交互。2.1.6、健壮性硬盘数据错误、心跳监测和重新复制集群均衡数据完整性元数据磁盘错误2.2、分布式数据处理MapReduce[12]最简单的MapReduce应用程序至少包含三个部分一个Map函数、一个Reduce函数和一个Main函数。Main函数将作业和文件输入/输出结合起来。在这个点上,Hadoop提供了大量的接口和抽象类,从而为Hadoop应用程序开发人员提供许多工具,可用于调试和性能度量等。2.2.1、Map端 1).么一个Map函数都会被分配处理一个输入分片,在默认的情况下,以HDFS的一个块的大小(默认为64M)为一个分片,可想而知,我们一时可以自己来设置每一个分片的大小的。Map函数的输出结果会暂且存放在一个环形内存缓冲区中(该缓冲区的大小默认为100M,由io.sort.mb属性控制),只有在这个设置的缓冲区将要溢出时(默认为缓冲区大小的80%,由io.sort.spill.percent属性控制),就会在相应的创建一个溢出文件在本地系统中,之后就可以将该缓冲区中的数据写入这个文件中了。 2).在写入磁盘之前,线程首先根据reduce任务的数目将数据划分为相同数目的分区,也就是一个reduce任务对应一个分区的数据。这样做是为了避免有些reduce任务分配到大量数据,而有些reduce任务却分到很少数据,甚至没有分到数据的尴尬局面。其实分区就是对数据进行hash的过程。然后对每个分区中的数据进行排序,如果此时设置了Combiner,将排序后的结果进行Combia操作,这样做的目的是让尽可能少的数据写入到磁盘。 3) .每当Map函数输入个数据的时候,不可避免的有很多个溢出文件,这时就需要将这些文件来进行合并了。在合并的过程中函数会不断的进行排序和整理,目的只有两个一是减少每次写入磁盘的数据量;二是减少在下一复制阶段的时候网络传输的数据量。完成之后合并成了一个已分好区并且已经排好序的文件了。这时候,为了减少网络传输的数据量,我们可以将数据进行压缩,只要将mapred.compress.map.out设置为true就可以了。[5] 2.2,2、Reduce端1) 在Map函数进行完了之后,Reduce就会接收到许多的Map任务传来的数。由上文可知,这些数据都是有序排列的。如果这时候Reduce端接受到的数据量很小的话,就会直接存储在内存中(缓冲区大小mapred.job.shuffle.input.buffer.percent属性控制,表示用作此用途的堆空间的百分比),如果数据量很大超过了缓冲区设定大小的一定比例的时候(由mapred.job.shuffle.merge.percent决定),就将数据合并额后溢写到磁盘中。2) 随着溢出的文件的不断增多,此时后台的线程会将它们合并成一个更大的有序的文件,这样做的目的是为了在接下来合并的时候更加方便。其实不管在Map端还是Reduce端,MapReduce都是反复地执行排序,合并操作,知道现在终于能够解释为什么有些人为什么会说排序是Hadoop的灵魂了。3) 合并的过程中会产生许多的中间文件(已经写入磁盘的),但MapReduce会让写入磁盘的数据尽可能地少,并且在最后一次的合并操作结束后的结果并没有写入到磁盘中,而是直接输入到Reduce函数,让其来实现处理操作。[6]MapReduce的流程的概念流见图2.2.2—1 图 2.2.2-13、环境的配置和集群的搭建[]3.1环境的配置[13]首先我们介绍一下本次设计中需要用到的各种软件3.1.1、安装eclipse3.1.2、安装netbeans IDE这也是一款JAVA开发的软件,相比较eclipse它的界面更为友好。在本次设计中,我们的界面的开发使用的就是netbeans。在配置netbeans时我们需要把VS软件生成的jar包放入debug中,这样才能实现之后的文件上传。见图3.1.2 图 3.1.23.1.3、安装microsoft visual studio在此次设计中我们会用到vs软件来实现日志的上传。3.2、Hadoop平台的搭建[18]首先我们先安装cent os,在虚拟机的环境下模拟出linux操作系统,在linux下安装Hadoop。在Hadoop平台安装完成之后,我们要在eclipse中安装一些与Hadoop相关联的依赖的包,见图3.2-1 图 3.2 - 1 在集群中的所有机器安装完linux系统之后,我们需要配置IP.首先打开SecureCRT,打开传输工具FileZilla连接多台主机,之后选择要连接的主机的IP输入用户名和密码就可以完成多台主机的连接了。最后在Hadoop上输入11/指令来查看是否创建成功。见图3.2-2 图 3.2 - 2在本次设计中,我们使用的是伪分布的方法, IP设计192.168.132.132:9000,其中的9000是端口号。Hadoop平台的运行界面如图3.2-3 、 3.2-4 图 3.2 - 3 图 3.2 - 43.3、Hadoop平台中的常用命令下面列举一些本此设计中可能用到的Hadoop的命令,预览命令 hadoop dfs-ls/传输命令 haoop dfs-put查看 hadoop dfs-ls/test 4)删除文件夹 hadoop dfs-rmr/test 5)创建文件夹 hadoop dfs-mkdir 6)打开 hadoop dfs-cat等4、日志的格式与获取[17]本文的海量日志的获取与以往的方式不同,一般人们会认为日志的获取只要通过shell脚本文件就可以了,但是在日志的数量越来越大,shell脚本已经力不从心了,而Hadoop在这方便却有着很大的优势。下面就来介绍一下Hadoop平台是怎么处理日志的获取和上传的。4.1、日志的格式在本文中日志的格式是由我们自己设计的,将每条日志在获取的时候都存储成我们想要的日志的形式,这就方便我们以后的处理和查询。日志的格式如图4.1所示 图 4.1 我们设计了关键字和日志的类型,为了方便之后可以通过关键字来实现日志的查询。我们同时也设置了日志的产生时间,这样可以使我们可选择的搜索出一段时间之内所需要的日志信息。4.2、日志的获取[16]本文采用了一个日志采集者,按照客户输入的要求搜集客户端产生的日志信息,再定量的上传到Hadoop集群中。在本程序中,我们设定了一个规则,在搜集日志的过程中10s之内没有新的日志更新就自动上传之前搜集的日志到Hadoop集群中 下面是上传到Hadoop是用到的核心代码,功能是通过IP和计算机名连接到HBase,完成数据的上传。// 实现与Hadoop的连接 Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "192.168.132.132"); conf.set("hbase.rootdir", "hdfs://sunth:9000/hbase"); conf.set("hbase.master", "192.168.132.132:60000"); Job job = new Job(conf, "Txt-to-Hbase");//完成数据的上传 Path in = new Path("hdfs://192.168.132.132:9000/LOGS"); job.setInputFormatClass(TextInputFormat.class); FileInputFormat.addInputPath(job, in);下面是相关图示如图4.2所示 图 4.25、功能的设计与实现5.1、日志的存储[9]在完成了海量日志的搜集和上传之后,我们可以进一步的来处理这些日志信息了,相比较传统的处理日志的方式而言,面对这么庞大的信息量,他们已然无法满足需求,这是Hadoop平台的MapReduce函数发挥出了他的作用,它强大的数据并行处理的功能能很好的解决这个问题。5.1.1、HBase数据库的介绍[10]HBase是一个在HDFS上开发的面向列的分布式数据库。如果需要实时的随机读/写超大规模的数据集,就可以使用HBase这一个Hadoop应用。 HBase自动把表水平划分为“区域”。每个区域由表中行的子集构成。每个区域由它所属的表、它所包含的第一行及其最后一行来表示。一开始一个表只有一个区域。但随着区域的变大,到它超出设定的大小,便会在某行的边界上把表分成大小两个基本相同的新分区。在第一次划分之前,所有加载的数据都放在原始区域所在的那台服务器上。随着表变大,区域的个数也会增加。区域是HBase集群分布数据的最小单位。用这种方式,一个因为太大而无法放在单台服务器上的表会被放到服务器的集群上,其中每个节点都负责管理表所有区域的一个子集。5.1.2日志存储的实现[14]对于日志的存储,在Hadoop平台中我们有现成的方法就是HDFS,在本文中我们利用的是HBase来实现海量日志的存储。HBase是在HDFS上开发的面向列的分布式数据库,从上文中可以知道,我们的日志产生是随机的,也是实时的,这就有必要使用HBase数据库来存储数据了。实现HBase关联的相关代码如下public class HdfsHelper { private final static String HDFS_ADDRESS = "hdfs://192.168.132.132:9000"; private final static String HDFS_LOGDIR=HDFS_ADDRESS+"/LOGS"; public static void readFile(Path path) throws Exception {FSDataInputStream input = getFileSystem().open(path);IOUtils.copyBytes(input, System.out, 1024, false);IOUtils.closeStream(input);}下面的图就是已经完成了日志存储的Hadoop界面如图5.1.2所示 图 5.1.25.2、日志文件的处理[13] 5.2.1设计理念在日志的处理方面,我们用到的就是Hadoop中的MapReduce函数。通过它强大的并行计算的功能来实现我们搜集到的海量日志的快速处理。它包括一个Map函数和一个Reduce函数。其中Map函数接受到日志的信息并且将其转换为键/值对列表之后将其提交给Reduce函数操作。 5.2.2设计思路[20] [21]熟悉MapReduce的人都会知道,这个函数本身就带有排序的功能,但是在使用之前首先要确定它的默认排序规则。他是按照Key值进行排序的,如果Key为封装的int的intwritable类型,那么MapReduce按照数字大小对Key进行排序,如果Key为封装的String的Text类型,那么函数按照字典顺序对字符串进行排序。了解了这个细节,我们就知道了应该使用封装int的intwritable型数据结构,也就是在map中将读入的数据转化为intwritable型,然后作为key值输出。Reduce接收到输出的次数。输出的key是一个全局变量,它统计当前的位次。相关代码如下public class LogFileHandleMapper extends Mapper { public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String logString = value.toString(); String k = SplitLogString.Split(logString, LogElement.Date); context.write(new Text(k), new Text(logString)); String Typek = k + "_" + SplitLogString.Split(logString, LogElement.Type); context.write(new Text(Typek), new Text(logString)); String Keyk = k + "_" + SplitLogString.Split(logString, LogElement.Key); context.write(new Text(Keyk), new Text(logString)); String Sourcek = k + "_" + SplitLogString.Split(logString, LogElement.Source); context.write(new Text(Sourcek), new Text(logString)); }}接下来就是Reduce函数了,它根据接收到的键/对值来缩小列表直到最后的输出。相关代码如下public class LogFileHandleReducer extends TableReducer { public void reduce(Text key, Iterable values, Context context) { String k = key.toString(); Iterator it = values.iterator(); while (it.hasNext()) { try { String Value = it.next().toString(); context.write(new ImmutableBytesWritable(key.getBytes()), CreatePutRow(k,Value)); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }以上的程序完成了Reduce函数对于Map函数处理过后的KEY值的接受工作,家下来就是完成数据的处理功能了 public Put CreatePutRow(String key , String value) { Put putrow = new Put(key.getBytes()); putrow.add("info".getBytes(), "Date".getBytes(), SplitLogString .Split(value, LogElement.Date).getBytes()); putrow.add("info".getBytes(), "Source".getBytes(), SplitLogString.Split(value, LogElement.Source) .getBytes()); putrow.add("info".getBytes(), "Key".getBytes(), SplitLogString .Split(value, LogElement.Key).getBytes()); putrow.add("info".getBytes(), "Type".getBytes(), SplitLogString .Split(value, LogElement.Type).getBytes()); putrow.add("info".getBytes(), "Data".getBytes(), SplitLogString .Split(value, LogElement.Data).getBytes()); return putrow; }} 图 5.2.2 - 1 图 5.2.2 - 25.3、日志信息的查询[9] 日志的查询我们是建立在之前日志按照关键字排好序的基础上进行的,我们可以通过设置查询日志的时间来检索需要时间之内的所有日志信息,也可以通过日志的类型即消息类型像error、message和warning等来查询日志。相关代码:public class SplitLogString public static String Split(String logString, LogElement element) if (!logString.contains("-")) return ""; String[] paramStrings = logString.split("-"); if (paramStrings.length != 5) return ""; String result = ""; switch (element) { case Data: result = paramStrings[0].substring(1, paramStrings[0].length() - 1); case Type: result = paramStrings[4].substring(1, paramStrings[4].length() - 1); case Source: result = paramStrings[3].substring(1, paramStrings[3].length() - 1); case Date: result = paramStrings[1].substring(1, paramStrings[1].length() - 1); case Key: result = paramStrings[2].substring(1, paramStrings[2].length() - 1);6、界面的处理: 图 6 - 1 图 6 - 2下图为日志文件已经存储,我们在日志存储的时候设定的值为30个日志存放在3个LOG文件夹中见图6-3 图 6 - 3下图可知我们已经把搜集到的日志文件以3个文件夹的形式成功的存入了Hadoop集群中的Hbase数据库下面的LOG中。如图6-4 图 6 - 4在最后我们还设计了一个查询界面用来显示最后的查询结果。见图6-5 图 6 - 5测试结果7.1、海量日志的获取和存储测试 如下图所示,测试结果按两部分实现,首先是日志文件搜集和上传到Hadoop集群,在这部分我们用两张图来表示第一张图是日志采集者在客户机中自动采集日志的示例,当完成采集之后会显示“生成成功”。见图7.1-1所示 图 7.1 - 1第二张图是显示日志采集者在10s中的间隔时间内没有新的日志搜集到就会自动上传到Hbase中存储下来。如图7.1-2 图 7.1 - 2 由上图显示出我们已经在Hbase中存入了log文件,这表示着我们的日志信息已经存入到了Hadoop集群中可以进行接下来的处理和查询操作了。7.2、日志的处理和查询测试其次是存储了大量的日志文件的排序和查询。这部分我们也分两次来实现。第一张图是日志的处理、排序;在HBase中输入以下的指令,可以查看到Log已经被处理完成后生成了一个log表。如图7.2-1 图 7.2 - 1打开log表之后发现我们上传的日志数据都已经按照我们之前定义过的格式处理好了,如图7.2-2所示 图 7.2 - 2以上就完成了日志的处理。第二张图是日志的查询功能,首先我们先要打开Hadoop自带的程序指令Hbase-daemon.sh start thrift服务,由于Hadoop是JAVA写的,其他语言不能直接使用,我们除了ECLIPSE之外还使用了其他的语言来写,所以我们要开启这个服务。如图7.2-3 图 7.2 - 3之后在客户端打开日志查询的界面,输入需要查询的相关信息,包括日期、类型和参考值等等就能显示出所需要的信息了。如下图7.2-4和7.2-5所示就是查询获得的相关的日志信息 图 7.2 - 4 图 7.2 - 5由上图可以看出,输出的日志信息全部是以关键字的顺序来排序输出的总结与展望8.1、总结 此次毕业设计的目标是熟悉并且掌握Hadoop平台的搭建与使用,在完成Hadoop平台的构建的基础上,利用该平台完成海量日志的收集、存储、处理和查询的功能。这次的毕业设计基本完成了上面所构想的各种功能,并且能够有效的并行处理大量的日志文件,利用自己所设定的关键字来查询所需要的日志信息。虽然这次设计基本完成了上述要求,但是还是存在很多的不足。就像不能实时的监控日志的生成,只能在手动操作下完成操作之前日志的搜集工作。而且此次的日志的处理过程中没有实现去重的问题,所以在显示日志的时候不可避免的会出现重复的日志信息,这些是在努力学习,更深的了解和掌握了Hadoop平台的境况下能够改进的地方。8.2、展望 在今天大数据越来越密集的环境下,云计算的发展蒸蒸日上,Hadoop平台的使用也越来越广泛,但是,虽然使用Hadoop平台在对于海量数据进行处理的方面有其先天的优势,但是本文对其应用还正是处于在初级阶段,仍有很广阔的空间等待我们去发展,就像利用,MapReduce框架对海量日志进行进一步数据挖掘,优化其并行计算的过程,并将其应用于实际开发之中,以及在Hadoop平台下实现更多的图论算法减少垃圾计算等等这些都是需要我们去不断克服的障碍。 在今后,会在以上问题进行更深入的研究,了解更多的领域知识,使我们自己能够更好的驾驭Hadoop这个新兴的技术,那么未来将会有更为广阔的空间等着我们去自由的翱翔!致谢9、参考文献Peter Baumann,赵曜. 海量数据处理与多维数据库[J]. 中文信息. 1998(05).Ronnie Chaiken, Bob Jenkins, Per-?ke Larson, Bill Ramsey, Darren Shakib, Simon Weaver, Jingren Zhou. SCOPE: easy and efficient parallel processing of massive data sets[J]. Proceedings of the VLDB Endowment. 1(2): 1265-1276, 2008.Hadoop [EB/OL], http://hadoop.apache.org/[2010.9.24].Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung. The Google File System[C]. Symposium on Operating Systems Principles, 2003.Jeffrey Dean and Sanjay Ghemawat. MapReduce: Simplified data processing on large clusters [J]. Communications of the ACM, 51(1):107-113, 2008.Dean Jeffrey, Ghemawat Sanjay. Map Reduce: A flexible data processing tool[J]. Communications of the ACM, 53(1):72-77, 2010.Foster I, Kesselman C. The grid:Blueprint for a new computing infrastructure [M]. San Francisco, CA: Morgan Kaufraann Publishers, 1998.William Groppa, Ewing Lusk,Nathan Dossb, Anthony Skjellumb. A high-performance portable implementation of the MPI message passing interface standard[J]. Parallel Computing, 22(6): 789–828, 1996.Jelena Pje?ivac-Grbovi?, George Bosilca, Graham E. Fagg, Thara Angskun, Jack J. Dongarra. MPI collective algorithm selection and quadtree encoding[J]. Parallel Computing, 33( 9): Pages 613-623,2007.Tom White. Hadoop权威指南[A]. 清华大学出版社, 2010.HDFS [EB/OL], http://hadoop.apache.org/common/docs/r0.20.2/hdfs_user_guide.html[2010.6.10].MapReduce [EB/OL], http://hadoop.apache.org/common/docs/r0.20.2/mapred_tutorial. html[2010.8.19].Nijmeijer, H. Mareels, I.M.Y. An observer looks at synchronization [J]. Circuits and Systems I: Fundamental Theory and Applications, IEEE Transactions on. 44(10): 882-890, 1197.俞黎敏. 函数式编程思想[M]. 程序员(Programmer) 2010(9).Hung-chih Yang, Ali Dasdan, Ruey-Lung Hsiao, D. Stott Parker. Map-reduce-merge: simplified relational data processing on large clusters[C]. Proceedings of the 2007 ACM SIGMOD international conference on Management of data 2007.Memcached [EB/OL], http://www.danga.com/memcached [2010.3.1].Mogilefs [EB/OL], http://www.danga.com/mogilefs [2010.3.24].王俊伟,吴俊海等编著.Linux标准教程[M]. 清华大学出版社, 2006.W.Richard Stevens, Stephen A.Rago. Advanced Programming in the UNIX Environment[M]. 2005.李臣波,刘润涛. 一种基于Dijkstra的最短路径算法[J]. 哈尔滨理工大学学报. 2008(03).Boris V, Cherkassky,Andrew V, Goldberg,Tomasz Radzik. Shortest paths algorithms: Theory and experimental evaluation[J]. Mathematical programming , 1996.学院信息科技学院计算机科学与技术姓名论文题目一、对待毕业实习的态度及实习期间遵守纪律情况优良(15—11分)一般(10—6分)较差(5—0)二、观察、收集、整理、查阅资料及运用数据的水平优良(30—21分)一般(20—11分)较差(10—0分)三、学生的独立工作能力和动手能力优良(20—16分)一般(15—11分)较差(10—0分)四、毕业论文写作的规范化程度优良(15—11分)一般(10—6分)较差(5—0分)五、毕业论文(设计)总体评价优良(20—16分)一般(15—6分)较差(5—0分)审查意见、成绩及能否提交答辩教务处制表学院信息科技学院计算机科学与技术姓名论文题目一、论文选题的价值与合理性优秀(15—11分)一般(10—6分)较差(5—0)二、论文的难度、工作量大小和创新性优秀(30—21分)一般(20—11分)较差(10—0分)三、数据资料分析、归纳、概括及运算的能力优秀(20—16分)一般(15—11分)较差(10—0分)四、文字表达水平、文章的逻辑性优秀(15—11分)一般(10—6分)较差(5—0分)五、论文写作的规范化程度优秀(20—16分)一般(15—6分)较差(5—0分)评阅意见、成绩及能否提交答辩教务处制表本科生毕业论文(设计)答辩及综合评分表(由答辩小组填写)学院信息科技学院计算机科学与技术姓名论文题目一、内容的科学性、应用性和创新性优秀(30—21分)一般(20—11分)较差(10—0)二、论文写作水平及知识面掌握程度优秀(30—21分)一般(20—11分)较差(10—0分)三、语言表达能力、逻辑思维能力、回答问题的正确性优秀(40—31分)一般(30—11分)较差(10—0分)论文答辩意见及成绩答辩小组负责人(签名) 年 月 日教务处制表本科生毕业论文(设计)综合评定成绩(由答辩小组填写)毕业论文(设计)评阅成绩30%毕业论文(设计)答辩成绩40%综合评定成绩100%注综合评定成绩等级优秀(90-100),良好(80-89),中等(70-79),及格(60-69),不及格(60分以下)。答辩小组负责人(签名) 年 月 日
目录
摘要 1
关键词 1
Abstract 1
Key words 2
1.绪论 2
1.1课题研究的目的和意义 2
1.2 国内外发展现状 2
1.2.1云计算发展现状 2
1.2.2云计算实现机制 4
2.Hadoop相关原理 4
2.1.1Namenode和Datenode的划分 4
2.1.2文件系统操作和Namespace的关系 4
2.1.3数据复制 4
2.1.4文件系统元数据持久化 4
2.1.5通信协议 5
2.1.6健壮性 5
2.2分布式数据处理MapReduce 5
2.2.1Map端 5
2.2.2Reduce端 5
3.环境的配置和集群的搭建 7
3.1环境的配置 7
3.1.1安装eclipse 7
3.1.2安装netbeans IDE 7
3.1.3安装MicroSoft Visual Studio 7
3.2Hadoop平台的搭建 7
3.3Hadoop平台中的常用命令 8
4.日志的格式与获取 9
4.1日志的格式 9
4.2日志的获取 10
5功能的设计与实现 11
5.1日志的存储 11
5.1.1HBase数据库的介绍 11
5.1.2日志存储的实现 11
5.2日志文件的处理 13
5.2.1设计理念 13
5.2.2设计思路 13
5.3日志信息的查询 15
6.界面处理 16
7.测试结果 19
7.1海量日志的获取和存储测试 19
7.2日志的处理和查询测试 20
8总结与展望 22
8.1总结 22
8.2展望 23
致谢 23
参考文献: 23
基于Hadoop平台的海量日志分析与处理
引言
引言
目录
目录
目录
目录
目录
lector collects client acquisition to log and automatically uploaded to the Hadoop cluster. Next is the log storage, this paper uses HDFS storage format, designed according to the log file to store the log file. Finally is the log query, using the powerful calculation function of MapReduce, realizes the log by setting the keywords and reference value.1、绪论1.1研究课题目的和意义[15] 计算机技术越来越发达,科技也日新月异,采用的系统越来越多,用什么方法既能很好的保护好我们的隐私同时还能时时刻刻的来记录我们的足迹呢,查看日志信息就是一个很好的方式。管理员可以通过查看日志信息来获取知识。因为日志具有的数据量大,不容易能够使人读懂的特点,如果光通过管理员来查看日志记录的这么一种方法,我们将很难从中发现有用的信息。挖掘出日志中所包含的信息并通过它来改进用户体验来是非常有价值的。但是使用传统的技术对海量日志进行分析的时候,无论在存储和计算量上都遇到了很大的困难,无法很好地解决,此时云计算进入了人们的视野。面对越来越庞大的数据量,简简单单的采用shell脚本语言对日志数据进行处理,并将处理完后的数据放入到Oracle数据库中再将其进行计算显然已经满足不了我们的需求了,这时Hadoop应运而生了,它几乎完美的解决了上面的所有问题。Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。例如,如果您要 grep 一个 10TB 的巨型文件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题,采用并行执行机制,因此能大大提高效率。Hadoop框架的优点是在存储和计算方面都具有很强的可扩展性,它是一种十分经济的框架,可以运行于廉价PC组成的集群系统之上,它的HDFS分布式文件系统具有备份恢复机制,它的MapReduce计算模型能够并行化处理重复数据清理任务作业,此外Hadoop还是一个开源的平台,人们可以根据自己的实际需求改进Hadoop,使其满足自己的应用。正是由于Hadoop具有上述的优点,一些大型互联网企业如Yahoo!、Facebook、亚马逊等都已经构建了自己的Hadoop分布式应用平台来处理他们的数据。通过Hadoop实现海量数据的处理,具有实际的应用价值。[3]1.2 国内外研究现状[7]1.2.1、云计算发展现状[2] 云计算作为业界热点,近年来世界各国对于它的研究和应用方兴未艾,许多政府部门和著名公司在研发与应用云计算的过程中做出了大量的工作和努力。(1)云计算在国外的发展 云计算与网络密不可分。云计算的原始含义是通过互联网提供计算功能。云计算的起源跟亚马逊河谷歌两个公司有十分密切的关系,他们最早的使用到了“Cloud Computing”的表述方式。目前美国公开宣布进入和支持云计算技术开发的业界巨头包括微软、谷歌、IBM、亚马逊、Netsuite、Adobe、Netapp等公司。谷歌公司是云计算的提出者。2006年谷歌公司启动了“Google101”计划,引导大学生们进行“云“系统的编程开发。多年的搜索引擎技术的积累成果使得谷歌公司在云计算技术上处于领先的地位,不仅提供在线应用,还希望发挥自身的数据库系统优势,成为在线应用的同一平台。谷歌公司以发表学术论文的形式公开了其云计算的三大法宝GFS MAP/REDUCE BIFTABLE ,并在美国和我国等国高校开设云计算编程课程。微软公司于2008年10月推出了“Windows Azure”操作系统,这个系统作为微软公司云计算计划的服务器端操作系统( cloud os )为广大开发者提供服务。微软公司拥有全世界数以亿计的windows操作系统用户桌面和浏览器,Azure(蓝天)试图通过在互联网架构上打造新的云计算平台,让windows操作系统由个人pc延伸到“蓝天”上。IBM公司从企业内部需求的逐渐上升出发,在2007年11月提出了“蓝云”计划,推出了共有云和私有云的概念。IBM公司提出私有云的解决方案是为减少诸如数据、信息安全等共有云现存的问题,从而抢占企业云计算市场。依托IBM公司在服务器领域的传统优势,IBM公司成为目前唯一一个提供从硬件、软件到服务全部自主生产的公司。2008年7月,雅虎、惠普和英特尔公司联合宣布将建立全球性的开源云计算研究测试床,成为OPEN CIRRUS,鼓励开展云计算、服务和数据中心管理等领域中各方面的研究。苹果公司是云计算领域上的一位积极参参与者。这些国际知名大公司在全世界建造了庞大的云计算中心。譬如谷歌公司的搜索引擎分布于200多个站点,超过100万台服务器支撑,而且设施数量正在迅猛增长。云计算在国内的发展2008年IBM公司在无锡建立了我国第一个云计算中心,在北京IBM中国创新中心建立了第二个云计算中心—IBM大华区云计算中心。2009年初,在南京建立了国内首个“电子商务云计算中心”。世纪互联推出“CloudEx”产品线,包括完整的互联网主机服务“CloudEx Computer Sevice”、基于在线存储虚拟化的“CloudEx Storage Service”等云计算服务。随着云计算的升温,国内的电信运营商也都积极投入到云计算的研究中,以期望通过云计算技术促进网络结构的优化和整合,寻找到新的盈利的机会和利润增长点,以实现向信息服务企业的转型。中国移动公司推出了“大云”(Big Cloud)云计算基础服务平台,中国电信公司推出了“e云”云计算平台,中国联通公司推出了“互联云”平台。我国企业创造了“云安全”概念,通过网状的大量客户端对网络中软件行为的异常监测,获取互联网中的木马、恶意程序的最新信息,在服务器端进行自动分析和处理,再把解决方案分发到客户端。瑞星、趋势等企业都推出了云安全解决方案。随着计算机的发展,互联网的功能越来越强大,用户可以通过云计算在互联网上处理庞大的数据和获取所需要的信息。从云计算的发展现状来看,未来云计算的发展会构建大规模的能够与应用程序密切结合的底层基础设施的方向发展。不断创新的云计算应用程序,为用户提供更多的更完善的互联网服务也可作为云计算的一个发展方向。1.2.2、云计算实现机制[4]由于云计算分为IaaS(基础设施即服务)、PaaS(平台即服务)和SaaS(软件即服务)三种类型,不同的厂家又提供了不同的解决方案,目前还没有一个统一的技术体系结构。云计算技术体系结构分为4层物理资源层、资源池层、管理中间件层和SOA(面向服务的体系结构)构建层。物理资源层包括计算机、存储器、网络设施、数据库和软件等;资源池层是将大量相同类型的资源构成同构或接近同构的资源池,如计算资源池、数据资源池等。构建资源池层更多是物理资源的集成和管理工作;管理中间件层负责对云计算的资源进行管理,并对众多应用任务进行调度;SOA层件云计算能力封装成标准的Web Service服务。2、Hadoop相关原理Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是Hadoop是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop是可靠地,因为它假设计算元素和存储会失败,因此维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop是高效的,因为它以并行的方式处理。Hadoop是可伸缩的,能够处理拍字节级数据。此外Hadoop依赖于社区服务器,成本比较低,任何人都可以使用。Hadoop有许多元素构成,其中最底部的是HDFS,它存储Hadoop集群中所有存储节点上的文件。上一层是MapReduce引擎。[1]2.1、HDFS[11]2.1.1、Namenode和Datanode的划分Namenode是一个中心服务器,负责管理文件系统的Namespace和客户端对文件的访问。Datanode在集群中会有很多个,一般是一个节点存在一个,负责管理其自身节点上附带的存储。在内部,一个大文件分成一个或多个block,这些block存储在Datanode集合里。Namenode执行文件系统的NBamespace相关操作。Datanode在NaMenode的指挥下进行block创建、删除和复制。 2.1.2、文件系统操作和namespace的关系2.1.3、数据复制HDFS被设计成在一个大集群中可以跨机器可靠地存储海量文件。它将每个文件存储成block序列,除了最后一个block,都是同样大小。HDFS的文件是write—one,并且严格要求在任何时候只有一个writer。Namenode全权管理block的赋值,它周期性地从集群中的每个Datanodde接受心跳包和一个blockreport。2.1.4、文件系统元数据的持久化Namenode存储HDFS的元数据。对于任何对文件元数据局产生修改的操作,Namenode都是用一个称为Editlog的日志记录下来的,它在内存中保存着整个文件系统Namespace和Blockmap的映像。2.1.5、通信协议所有的HDFS通信协议都构建在TCP/IP上。客户端通过一个可配置的端口连接到Namenode,通过ClientProtocol与Namenode交互。而DatanodeProtocol与Namenode交互。2.1.6、健壮性硬盘数据错误、心跳监测和重新复制集群均衡数据完整性元数据磁盘错误2.2、分布式数据处理MapReduce[12]最简单的MapReduce应用程序至少包含三个部分一个Map函数、一个Reduce函数和一个Main函数。Main函数将作业和文件输入/输出结合起来。在这个点上,Hadoop提供了大量的接口和抽象类,从而为Hadoop应用程序开发人员提供许多工具,可用于调试和性能度量等。2.2.1、Map端 1).么一个Map函数都会被分配处理一个输入分片,在默认的情况下,以HDFS的一个块的大小(默认为64M)为一个分片,可想而知,我们一时可以自己来设置每一个分片的大小的。Map函数的输出结果会暂且存放在一个环形内存缓冲区中(该缓冲区的大小默认为100M,由io.sort.mb属性控制),只有在这个设置的缓冲区将要溢出时(默认为缓冲区大小的80%,由io.sort.spill.percent属性控制),就会在相应的创建一个溢出文件在本地系统中,之后就可以将该缓冲区中的数据写入这个文件中了。 2).在写入磁盘之前,线程首先根据reduce任务的数目将数据划分为相同数目的分区,也就是一个reduce任务对应一个分区的数据。这样做是为了避免有些reduce任务分配到大量数据,而有些reduce任务却分到很少数据,甚至没有分到数据的尴尬局面。其实分区就是对数据进行hash的过程。然后对每个分区中的数据进行排序,如果此时设置了Combiner,将排序后的结果进行Combia操作,这样做的目的是让尽可能少的数据写入到磁盘。 3) .每当Map函数输入个数据的时候,不可避免的有很多个溢出文件,这时就需要将这些文件来进行合并了。在合并的过程中函数会不断的进行排序和整理,目的只有两个一是减少每次写入磁盘的数据量;二是减少在下一复制阶段的时候网络传输的数据量。完成之后合并成了一个已分好区并且已经排好序的文件了。这时候,为了减少网络传输的数据量,我们可以将数据进行压缩,只要将mapred.compress.map.out设置为true就可以了。[5] 2.2,2、Reduce端1) 在Map函数进行完了之后,Reduce就会接收到许多的Map任务传来的数。由上文可知,这些数据都是有序排列的。如果这时候Reduce端接受到的数据量很小的话,就会直接存储在内存中(缓冲区大小mapred.job.shuffle.input.buffer.percent属性控制,表示用作此用途的堆空间的百分比),如果数据量很大超过了缓冲区设定大小的一定比例的时候(由mapred.job.shuffle.merge.percent决定),就将数据合并额后溢写到磁盘中。2) 随着溢出的文件的不断增多,此时后台的线程会将它们合并成一个更大的有序的文件,这样做的目的是为了在接下来合并的时候更加方便。其实不管在Map端还是Reduce端,MapReduce都是反复地执行排序,合并操作,知道现在终于能够解释为什么有些人为什么会说排序是Hadoop的灵魂了。3) 合并的过程中会产生许多的中间文件(已经写入磁盘的),但MapReduce会让写入磁盘的数据尽可能地少,并且在最后一次的合并操作结束后的结果并没有写入到磁盘中,而是直接输入到Reduce函数,让其来实现处理操作。[6]MapReduce的流程的概念流见图2.2.2—1 图 2.2.2-13、环境的配置和集群的搭建[]3.1环境的配置[13]首先我们介绍一下本次设计中需要用到的各种软件3.1.1、安装eclipse3.1.2、安装netbeans IDE这也是一款JAVA开发的软件,相比较eclipse它的界面更为友好。在本次设计中,我们的界面的开发使用的就是netbeans。在配置netbeans时我们需要把VS软件生成的jar包放入debug中,这样才能实现之后的文件上传。见图3.1.2 图 3.1.23.1.3、安装microsoft visual studio在此次设计中我们会用到vs软件来实现日志的上传。3.2、Hadoop平台的搭建[18]首先我们先安装cent os,在虚拟机的环境下模拟出linux操作系统,在linux下安装Hadoop。在Hadoop平台安装完成之后,我们要在eclipse中安装一些与Hadoop相关联的依赖的包,见图3.2-1 图 3.2 - 1 在集群中的所有机器安装完linux系统之后,我们需要配置IP.首先打开SecureCRT,打开传输工具FileZilla连接多台主机,之后选择要连接的主机的IP输入用户名和密码就可以完成多台主机的连接了。最后在Hadoop上输入11/指令来查看是否创建成功。见图3.2-2 图 3.2 - 2在本次设计中,我们使用的是伪分布的方法, IP设计192.168.132.132:9000,其中的9000是端口号。Hadoop平台的运行界面如图3.2-3 、 3.2-4 图 3.2 - 3 图 3.2 - 43.3、Hadoop平台中的常用命令下面列举一些本此设计中可能用到的Hadoop的命令,预览命令 hadoop dfs-ls/传输命令 haoop dfs-put查看 hadoop dfs-ls/test 4)删除文件夹 hadoop dfs-rmr/test 5)创建文件夹 hadoop dfs-mkdir 6)打开 hadoop dfs-cat等4、日志的格式与获取[17]本文的海量日志的获取与以往的方式不同,一般人们会认为日志的获取只要通过shell脚本文件就可以了,但是在日志的数量越来越大,shell脚本已经力不从心了,而Hadoop在这方便却有着很大的优势。下面就来介绍一下Hadoop平台是怎么处理日志的获取和上传的。4.1、日志的格式在本文中日志的格式是由我们自己设计的,将每条日志在获取的时候都存储成我们想要的日志的形式,这就方便我们以后的处理和查询。日志的格式如图4.1所示 图 4.1 我们设计了关键字和日志的类型,为了方便之后可以通过关键字来实现日志的查询。我们同时也设置了日志的产生时间,这样可以使我们可选择的搜索出一段时间之内所需要的日志信息。4.2、日志的获取[16]本文采用了一个日志采集者,按照客户输入的要求搜集客户端产生的日志信息,再定量的上传到Hadoop集群中。在本程序中,我们设定了一个规则,在搜集日志的过程中10s之内没有新的日志更新就自动上传之前搜集的日志到Hadoop集群中 下面是上传到Hadoop是用到的核心代码,功能是通过IP和计算机名连接到HBase,完成数据的上传。// 实现与Hadoop的连接 Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "192.168.132.132"); conf.set("hbase.rootdir", "hdfs://sunth:9000/hbase"); conf.set("hbase.master", "192.168.132.132:60000"); Job job = new Job(conf, "Txt-to-Hbase");//完成数据的上传 Path in = new Path("hdfs://192.168.132.132:9000/LOGS"); job.setInputFormatClass(TextInputFormat.class); FileInputFormat.addInputPath(job, in);下面是相关图示如图4.2所示 图 4.25、功能的设计与实现5.1、日志的存储[9]在完成了海量日志的搜集和上传之后,我们可以进一步的来处理这些日志信息了,相比较传统的处理日志的方式而言,面对这么庞大的信息量,他们已然无法满足需求,这是Hadoop平台的MapReduce函数发挥出了他的作用,它强大的数据并行处理的功能能很好的解决这个问题。5.1.1、HBase数据库的介绍[10]HBase是一个在HDFS上开发的面向列的分布式数据库。如果需要实时的随机读/写超大规模的数据集,就可以使用HBase这一个Hadoop应用。 HBase自动把表水平划分为“区域”。每个区域由表中行的子集构成。每个区域由它所属的表、它所包含的第一行及其最后一行来表示。一开始一个表只有一个区域。但随着区域的变大,到它超出设定的大小,便会在某行的边界上把表分成大小两个基本相同的新分区。在第一次划分之前,所有加载的数据都放在原始区域所在的那台服务器上。随着表变大,区域的个数也会增加。区域是HBase集群分布数据的最小单位。用这种方式,一个因为太大而无法放在单台服务器上的表会被放到服务器的集群上,其中每个节点都负责管理表所有区域的一个子集。5.1.2日志存储的实现[14]对于日志的存储,在Hadoop平台中我们有现成的方法就是HDFS,在本文中我们利用的是HBase来实现海量日志的存储。HBase是在HDFS上开发的面向列的分布式数据库,从上文中可以知道,我们的日志产生是随机的,也是实时的,这就有必要使用HBase数据库来存储数据了。实现HBase关联的相关代码如下public class HdfsHelper { private final static String HDFS_ADDRESS = "hdfs://192.168.132.132:9000"; private final static String HDFS_LOGDIR=HDFS_ADDRESS+"/LOGS"; public static void readFile(Path path) throws Exception {FSDataInputStream input = getFileSystem().open(path);IOUtils.copyBytes(input, System.out, 1024, false);IOUtils.closeStream(input);}下面的图就是已经完成了日志存储的Hadoop界面如图5.1.2所示 图 5.1.25.2、日志文件的处理[13] 5.2.1设计理念在日志的处理方面,我们用到的就是Hadoop中的MapReduce函数。通过它强大的并行计算的功能来实现我们搜集到的海量日志的快速处理。它包括一个Map函数和一个Reduce函数。其中Map函数接受到日志的信息并且将其转换为键/值对列表之后将其提交给Reduce函数操作。 5.2.2设计思路[20] [21]熟悉MapReduce的人都会知道,这个函数本身就带有排序的功能,但是在使用之前首先要确定它的默认排序规则。他是按照Key值进行排序的,如果Key为封装的int的intwritable类型,那么MapReduce按照数字大小对Key进行排序,如果Key为封装的String的Text类型,那么函数按照字典顺序对字符串进行排序。了解了这个细节,我们就知道了应该使用封装int的intwritable型数据结构,也就是在map中将读入的数据转化为intwritable型,然后作为key值输出。Reduce接收到输出的次数。输出的key是一个全局变量,它统计当前的位次。相关代码如下public class LogFileHandleMapper extends Mapper
目录
摘要 1
关键词 1
Abstract 1
Key words 2
1.绪论 2
1.1课题研究的目的和意义 2
1.2 国内外发展现状 2
1.2.1云计算发展现状 2
1.2.2云计算实现机制 4
2.Hadoop相关原理 4
2.1.1Namenode和Datenode的划分 4
2.1.2文件系统操作和Namespace的关系 4
2.1.3数据复制 4
2.1.4文件系统元数据持久化 4
2.1.5通信协议 5
2.1.6健壮性 5
2.2分布式数据处理MapReduce 5
2.2.1Map端 5
2.2.2Reduce端 5
3.环境的配置和集群的搭建 7
3.1环境的配置 7
3.1.1安装eclipse 7
3.1.2安装netbeans IDE 7
3.1.3安装MicroSoft Visual Studio 7
3.2Hadoop平台的搭建 7
3.3Hadoop平台中的常用命令 8
4.日志的格式与获取 9
4.1日志的格式 9
4.2日志的获取 10
5功能的设计与实现 11
5.1日志的存储 11
5.1.1HBase数据库的介绍 11
5.1.2日志存储的实现 11
5.2日志文件的处理 13
5.2.1设计理念 13
5.2.2设计思路 13
5.3日志信息的查询 15
6.界面处理 16
7.测试结果 19
7.1海量日志的获取和存储测试 19
7.2日志的处理和查询测试 20
8总结与展望 22
8.1总结 22
8.2展望 23
致谢 23
参考文献: 23
基于Hadoop平台的海量日志分析与处理
引言
引言
目录
目录
目录
目录
目录
版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/jsj/jsjkxyjs/1993.html