http://blog.csdn.net/cenwenchu79 岑文初
── 分布式计算开源框架 Hadoop 入门实践(一)
在 SIP 项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来
分析统计,在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中
有所提到。但是由于统计的内容暂时还是十分简单,所以就采用 Memcache 作为计数器,结合
MySQL 就完成了访问控制以及统计的工作。然而未来,对于海量日志分析的工作,还是需要有
所准备。现在最火的技术词汇莫过于“云计算”,在 Open API 日益盛行的今天,互联网应用的数
据将会越来越有价值,如何去分析这些数据,挖掘其内在价值,就需要分布式计算来支撑海量数
据的分析工作。
回过头来看,早先那种多线程,多任务分解的日志分析设计,其实是分布式计算的一个单机版缩
略,如何将这种单机的工作进行分拆,变成协同工作的集群,其实就是分布式计算框架设计所涉
及的。在去年参加 BEA 大会的时候,BEA 和 VMWare 合作采用虚拟机来构建集群,无非就是希
望使得计算机硬件能够类似于应用程序中资源池的资源,使用者无需关心资源的分配情况,从而
最大化了硬件资源的使用价值。分布式计算也是如此,具体的计算任务交由哪一台机器执行,执
行后由谁来汇总,这都由分布式框架的 Master 来抉择,而使用者只需简单地将待分析内容提供
给分布式计算系统作为输入,就可以得到分布式计算后的结果。
Hadoop 是 Apache 开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用,
如亚马逊、Facebook 和 Yahoo 等等。对于我来说,最近的一个使用点就是服务集成平台的日志
分析。服务集成平台的日志量将会很大,而这也正好符合了分布式计算的适用场景(日志分析和
索引建立就是两大应用场景)。
当前没有正式确定使用,所以也是自己业余摸索,后续所写的相关内容,都是一个新手的学习过
程,难免会有一些错误,只是希望记录下来可以分享给更多志同道合的朋友。
什么是 Hadoop?
搞什么东西之前,第一步是要知道 What(是什么),然后是 Why(为什么),最后才是 How
(怎么做)。但很多开发的朋友在做了多年项目以后,都习惯是先 How,然后 What,最后才是
Why,这样只会让自己变得浮躁,同时往往会将技术误用于不适合的场景。
Hadoop 框架中最核心的设计就是:MapReduce 和 HDFS。MapReduce 的思想是由 Google 的一
篇论文所提及而被广为流传的,简单的一句话解释 MapReduce 就是“任务的分解与结果的汇总”。
HDFS 是 Hadoop 分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存
储提供了底层支持。
MapReduce 从它名字上来看就大致可以看出个缘由,两个动词 Map 和 Reduce,“Map(展开)”
就是将一个任务分解成为多个任务,“Reduce”就是将分解后多任务处理的结果汇总起来,得出
最后的分析结果。这不是什么新思想,其实在前面提到的多线程,多任务的设计就可以找到这种
思想的影子。不论是现实社会,还是在程序设计中,一项工作往往可以被拆分成为多个任务,任
务之间的关系可以分为两种:一种是不相关的任务,可以并行执行;另一种是任务之间有相互的
依赖,先后顺序不能够颠倒,这类任务是无法并行处理的。回到大学时期,教授上课时让大家去