浅谈Hadoop系统架构与海量数据分析

微软近日宣布开发一个兼容Windows Server与Windows Azure平台的Hadoop开源版本。IBM宣布在Hadoop上建立新的存储架构,作为群集运行DB2或Oracle数据库,目的是让应用程序,支持高性能分析,数据仓库应用程序和云计算的目的。EMC也推出了世界上第一个定制的、高性能的Hadoop专用数据协同处理设备——Greenplum HD数据计算设备,为客户提供了最强大、最高效率的方法,充分挖掘大数据的价值。互联网搜索巨头百度也在考虑使用Hadoop。不过,出于性能与安全的考虑,百度在采用Hadoop架构的时候,将Hadoop计算层进行了重新编写。在2011Openworld大会上,甲骨文宣布发布了Big Data 机,它采用了NoSQL数据库和Hadoop框架,并且成功的将其商业化,用于大数据分析。华为公司在Hadoop重要贡献公司名单内,排在Google和Cisco的前面,说明华为公司也在积极参与开源社区贡献。淘宝、Facebook等也纷纷加入Hadoop阵营。作为一个幕后英雄,Hadoop风暴来袭,Hadoop未来必将应用于越来越多的领域,风靡全球可谓是指日可待了。

  Hadoop自立门户 :与Nutch若即若离

  众所周知,Nutch是一个由Java实现的,刚刚诞生开放源代码(open-source)的web搜索引擎。Nutch与Hadoop本是同门师兄,从0.X版本开始,为了解决Nutch的海量数据爬取和存储的需要,Hadoop便自立门户,从Nutch中剥离出来成为一个开源子项目。Hadoop其实并非一个单纯用于存储的分布式文件系统,而是一个被设计用来在由普通硬件设备组成的大型集群上执行分布式应用的框架。Hadoop由两部分组成,包括一个分布式文件系统HDFS和一个MapReduce实现。简而言之,Hadoop的核心目标是为开发分布式应用提供一个框架。HDFS采用master/slave架构。一个HDFS集群是有一个Namenode和一定数目的Datanode组成。HDFS支持传统的层次型文件组织,与大多数其他文件系统类似,用户可以创建目录,并在其间创建、删除、移动和重命名文件。

  Hadoop的应用案例:Nutch与Hadoop携手 海量数据搜索的分布式检索构架

  Nutch正是基于Hadoop开发的一个应用。基于Nutch的分布式搜索引擎的架构可以分割为分布式爬虫器、分布式文件存储系统(HDFS)、检索服务系统(Searcher)等几部分。分布式爬虫器的工作流程为:首先Crawler根据WebDB生成一个待抓取网页的URL集合叫做Fetchlist,接着下载线程Fetcher会开始根据Fetchlist网页抓取回来。在Nutch中,Crawler操作的实现是通过一系列子操作的实现来完成的。Nutch爬取的文件按块存放在搭建好的HDFS上,值得注意的是Nutch分布式检索服务于HDFS是没有关系的,提供检索服务的索引块存放在local文件系统中,而不是HDFS上。

  将Nutch的优势和Hadoop相结合,就可以提供一个支持海量数据搜索的分布式检索构架。其主要流程为:

  1、采用Heritrix爬取网页文本;

  2、得到的数据写入Nutch的Segments,交由HDFS存储。

  3、在Segments的基础上做链接分析和文本抽取工作。

  4、构建分布式索引分发机制和更新机制;

  5、利用Nutch提供分布式检索。

  6、Hadoop底层实现原理

  典型的Hadoop离线分析系统架构

  实时数据分析一般用于金融、移动和互联网B2C等产品,往往要求在数秒内返回上亿行数据的分析,要满足这样的需求,可以采用精心设计的传统关系型数据库组成并行处理集群,但需要耗费比较高的软硬件成本。目前比较新的海量数据实时分析工具有EMC的Greenplum、SAP的HANA等。

  对于大多数反馈时间要求不是那么严苛的应用,比如离线统计分析、机器学习、搜索引擎的反向索引计算、推荐引擎的计算等,应采用离线分析的方式,通过数据采集工具将日志数据导入专用的分析平台。但面对海量数据,传统的ETL工具往往彻底失效,主要原因是数据格式转换的开销太大,在性能上无法满足海量数据的采集需求。互联网企业的海量数据采集工具,有Facebook 开源的Scribe、LinkedIn开源的Kafka、淘宝开源的Timetunnel、Hadoop的Chukwa等,均可以满足每秒数百MB的日志数据采集和传输需求,并将这些数据上载到Hadoop中央系统上。

  按照大数据的数据量,分为内存级别、BI级别、海量级别三种。

这里的内存级别指的是数据量不超过集群内存最大值。Facebook缓存在内存的Memcached中的数据高达 320TB,而目前的PC服务器,内存也可以超过百GB。因此可以采用一些内存数据库,将热点数据常驻内存之中,从而取得非常快速的分析能力,非常适合实时分析业务。图1是一种实际可行的MongoDB分析架构。

  图1 用于实时分析的MongoDB架构

  MongoDB大集群目前存在一些稳定性问题,会发生周期性的写堵塞和主从同步失效,但仍不失为一种潜力十足的可以用于高速数据分析的NoSQL。

  BI级别指的是那些对于内存来说太大的数据量,但一般可以将其放入传统的BI产品和专门设计的BI数据库之中进行分析。目前主流的BI产品都有支持TB级以上的数据分析方案。种类繁多,就不具体列举了。

  海量级别指的是对于数据库和BI产品已经完全失效或者成本过高的数据量。海量数据级别的优秀企业级产品也有很多,但基于软硬件的成本原因,目前大多数互联网企业采用Hadoop的HDFS分布式文件系统来存储数据,并使用MapReduce进行分析。