基于Hadoop分布式框架的关键词统计
赵 青
(新华社通信技术局)
摘 要:云计算是未来信息技术的发展趋势,在新华社战略转型的背景下,云计算必将是下一代技术体系建设的核心之一。Hadoop是云计算领域的一种基础架构体系,可以认为它是一种PaaS模型。Hadoop是一个对海量数据进行分布式处理的开源框架,它能够在大规模的计算机集群之上提供高可用的数据访问和检索服务。它主要由分布式文件系统HDFS和分布式并行计算模型MapReduce两部分组成。本文介绍了Hadoop的概念、核心架构、特点,最后给出Hadoop在新华社CNML格式的新闻稿件上进行关键词词频统计的构建过程。
关键词:云计算 Hadoop 分布式计算 词频统计
1.引言 云计算是未来信息技术的发展趋势,在新华社战略转型的背景下,云计算必将是下一代技术体系建设的核心之一。Hadoop是一个使用简单编程模型对海量数据进行分布式处理的开源框架,是云计算中的一种PaaS (Platform-as-a-Service)模型,它可以方便地在普通硬件上架设大规模集群系统,高效地访问海量数据,对数据的存取和检索实现高速并行处理。 Hadoop由Hadoop Common、Yarn、Hive、Hbase、MapReduce、HDFS等模块组成。Hadoop Common是Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如:配置文件和日志操作等。Yarn可以称为新版本Hadoop的资源管理器。Hbase是类似BigTable的键值存储模型,是一个开源的分布式NoSQL数据库。Hive提供了一套SQL-like语言,使得汇总、查询存储在Hadoop里面的海量数据简单化。Hadoop最核心的是HDFS和MapReduce,HDFS实现存储,是GFS的开源实现,而MapReduce是一种数据处理的编程模型,是Google MapReduce的开源实现。
2.Hadoop核心架构 Hadoop框架中最核心的设计是HDFS和MapReduce。HDFS(Hadoop Distributed File System)是Hadoop分布式文件系统的缩写,为分布式计算存储提供了底层支持。HDFS能够管理存储在各物理节点上的文件,为MapReduce任务处理提供文件操作和存储等支持。HDFS的上一层是MapReduce(映射/规约)引擎,MapReduce在集群上实现了分布式计算和任务处理,在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果。二者相互作用,完成了Hadoop分布式集群的主要任务。
2.1 HDFS
HDFS通过四个角色来实现文件系统的功能:NameNode、SecondaryNameNode、DataNode和Client。如图1所示,NameNode可以看作是管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制、跟踪文件系统整体运行是否正常等。NameNode会将文件系统的元数据存储在内存中,这些信息主要包括文件信息、每一个文件对应的文件块的信息和每一个文件块的信息等。SecondaryNameNode用来保存NameNode中元数据的备份,并通过周期性的合并检查点日志以减少NameNode重启时花费的时间,通常与NameNode不在同一台服务器上。DataNode是文件存储的基本单元,它将文件块存储在本地文件系统中,保存了所有块的元数据,同时周期性地将所有的文件块信息发送给NameNode。Client就是对HDFS进行读写的应用程序。当Client进行数据访问时,首先需要访问NameNode,获取访问目标文件的元数据以及文件块的分布信息,对于实际数据的访问,则直接通过DataNode并行读写。因此对于HDFS Master/Slave架构中的Master,即便是海量数据,读写的压力仍然相对会比较小。只要DataNode集群规模足够大,每秒吞吐量过百Gb还是比较轻松的。 HDFS和现有的分布式文件系统有很多共同点:对于整个集群有单一的命名空间;数据一致性;适合一次写入多次读取的模型;文件会被分割成多个文件块,而且根据配置会有复制文件块来保证数据的安全性等。同时,HDFS所具有的优势也非常明显:对硬件需求比较低,只须运行在低廉的硬件集群上;硬件失效、错误检测和快速、自动的恢复是HDFS最核心的目标,使得局部失败不会影响整个分布式计算;保存的数据量巨大,支持文件大小和数量可达PB级;高效的自动分布数据到不同的机器、快速和可扩展的数据访问能力,极大的提高了HDFS的易用性等。
2.2 MapReduce
MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点上的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前失败的任务;从节点仅负责执行由主节点指派的任务。 如图2所示,用户提交一个任务以后,该任务由JobTracker协调,先执行Map阶段。Map操作结果写到context中,当写入一定数量的键值对时,这部分缓冲会在Combiner中进行合并,然后再输出到Partitioner中。Reduce阶段包括3个步骤:Shuffle、Sort和Reduce。Shuffle阶段将读取相应的数据,生成拷贝;由Sort阶段进行排序;Reduce阶段输出的结果通过OutputFormat,送入HDFS中。 MapReduce不仅能用于处理大规模数据,而且能将很多繁琐的细节隐藏起来,例如自动并行化、负载均衡和灾备管理等,极大地简化开发工作;MapReduce的伸缩性非常好,每增加一台服务器,就能将差不多的计算能力接入到集群中,而过去的大多数分布式处理框架,在伸缩性方面都与MapReduce相差甚远。 3.使用Hadoop对CNML格式的新闻稿件进行关键词统计 词频统计是中文信息处理的一项基本技术,在很多领域中都有重要的应用。例如在中文搜索引擎中,一篇文章中出现频率较高的词通常能反映这篇文章的主题,因此可以使用词频来对中文文章进行归类、建立搜索词库、进行搜索排名等。 CNML格式的新闻稿件包含丰富的内容,使用Hadoop能够方便的统计稿件中关键词出现的数量。本方法对指定的新闻关键词词频进行统计和排序,因此并不需要事先进行分词操作。关键词由程序给出,可以任意改变或者增减。稿件存放于HDFS中,由HDFS分配存储空间和位置。程序通过map()、reduce()算法对关键词在稿件中出现的次数进行累加,然后按照出现次数由大到小进行排序,最后输出关键词和数量的<key,value>对。实际上,本方法对文件格式的要求很低,只要存放在指定的路径下,任何格式、名称和语种的文本均可以进行检索、统计和排序。
3.1 环境搭建
本次搭建的Hadoop分布式集群环境,包括两台物理服务器,一台安装VMware ESXi 4.0,另一台Windows服务器安装vCenter Server4.0和vSphere Center4.0等管理软件和插件。环境搭建的步骤为:
1.在ESX服务器上安装三台Linux虚拟服务器,操作系统为RedHat Linux 6.3。服务器名称分别为Master、Slave1和Slave2,并为其分配存储空间和网络地址。表1是服务器的详细配置信息。
表1 虚拟服务器详细信息
虚拟服务器名 | 网络地址 | 软件配置 |
Master | 172.16.25.2 | NameNode、master、JobTracker |
Slave1 | 172.16.25.3 | DataNode、slave、TaskTracker |
Slave2 | 172.16.25.4 | DataNode、slave、TaskTracker |
2.安装JAVA环境,版本为jdk1.6.0_38并配置环境变量。 3.建立SSH无密码登陆,通过公有密钥实现集群中各节点间的登录认证。 4.编译安装Hadoop,这里选择的是2012年10月的Release版本hadoop-1.1.1-bin.tar.gz。配置完成后,格式化HDFS,并使用start-all.sh启动所有主从节点。命令jps可进行安装检验测试,如图3所示,三个节点均安装成功。
图3 Master、Slave1、Slave2 安装配置检验
3.2 程序结构
开发平台使用安装Hadoop插件的Eclipse,插件版本、JDK版本与运行环境保持一致。程序使用正则表达式的方式查找关键词,用到了RegexMapper,LongSumReducer,InverseMapper等系统自带的工具类。首先创建Job,指定Mapper、Combiner、Reducer,然后对输入输出的格式和路径进行设置,最后启动Job。部分代码如下: grepJob.setMapperClass(RegexMapper.class); //设置Mapper类 grepJob.setCombinerClass(LongSumReducer.class); //设置Combiner类 grepJob.setReducerClass(LongSumReducer.class); //设置Reducer类 FileOutputFormat.setOutputPath(grepJob, tempDir); //设置输出路径 grepJob.setOutputFormat(SequenceFileOutputFormat.class); //设置输出格式 grepJob.setOutputKeyClass(Text.class); //设置输出键 grepJob.setOutputValueClass(LongWritable.class); //设置输出值 JobClient.runJob(grepJob); //运行Job
3.3 运行结果
从稿件库中随机选择1296篇CNML新闻稿件作为程序输入,指定两组关键词作为参数,运行结果如下: 1.关键词指定为:政治法律、科技、突发事件、行业经济、海外涉华、其它。结果如图4所示,关键词经过排序后出现的次数分别为:376、160、151、111、101、47。 2.关键词指定为:亚太、新华微博、欧洲、北美、中东。结果如图5所示,关键词经过排序后出现的次数分别为:544、376、330、76、49。
4.结束语 本文受硬件环境限制,服务器数量和处理的数据量比较小,随着数据量的增大和机器节点增多,Hadoop会更加凸显它的性能优势。作为一种成熟的开源云平台基础架构,Hadoop在大数据环境下有更大的应用空间,包括个性化推荐系统、主题搜索引擎、日志的存储和统计、用户行为分析等。Hadoop已经迅速成长为首选的、适用于非结构化数据的大数据分析解决方案。基于Hadoop对复杂的海量结构化和非结构化数据进行批处理,给数据分析领域带来了深刻的变化,借此我们可以做出更好的决策,推出个性化的产品,挖掘更多的财富,提供更好的服务。
参考文献 1.DHRUBA Borthakur. The Hadoop Distributed File System: Architecture and Design[OL]. 2007.http://hadoop.apache.org/common/docs/current/hdfs-design.html. 2.Jeffrey Dean, Sanjay Ghemawat: MapReduce: Simplified Data Processing on Large Clusters[C].In proceedings of Commun.ACM.51(1),NY,USA,2008,pp:107-113. 3.Apache.Welcome to Apache Hadoop[OL].2011.http://hadoop.apache.org/.
评论 点击评论