hadoop:分布式计算开源框架Hadoop入门实战(一)

  在SIP项目设计过程中对于它庞大日志在开始时就考虑使用任务分解多线程处理模式来分析统计在我从前写文章Tiger Concurrent Practice --日志分析并行分解设计和实现中有所提到但是由于统计内容暂时还是十分简单所以就采用Memcache作为计数器结合MySQL就完成了访问控制以及统计工作然而未来对于海量日志分析工作还是需要有所准备现在最火技术词汇莫过于“云计算”在Open API日益盛行今天互联网应用数据将会越来越有价值如何去分析这些数据挖掘其内在价值就需要分布式计算来支撑海量数据分析工作

  回过头来看早先那种多线程多任务分解日志分析设计其实是分布式计算个单机版缩略如何将这种单机工作进行分拆变成协同工作集群其实就是分布式计算框架设计所涉及在去年参加BEA大会时候BEA和VMWare合作采用虚拟机来构建集群无非就是希望使得计算机硬件能够类似于应用中资源池资源使用者无需关心资源分配情况从而最大化了硬件资源使用价值分布式计算也是如此具体计算任务交由哪台机器执行执行后由谁来汇总这都由分布式框架Master来抉择而使用者只需简单地将待分析内容提供给分布式计算系统作为输入就可以得到分布式计算后结果

  Hadoop是Apache开源组织个分布式计算开源框架在很多大型网站WebSite上都已经得到了应用如亚马逊、Facebook和Yahoo等等对于我来说最近个使用点就是服务集成平台日志分析服务集成平台日志量将会很大而这也正好符合了分布式计算适用场景(日志分析和索引建立就是两大应用场景)

  当前没有正式确定使用所以也是自己业余摸索后续所写相关内容都是个新手学习过程难免会有只是希望记录下来可以分享给更多志同道合朋友

  什么是Hadoop?  搞什么东西的前步是要知道What(是什么)然后是Why(为什么)最后才是How(如何做)但很多开发朋友在做了多年项目以后都习惯是先How然后What最后才是Why这样只会让自己变得浮躁同时往往会将技术误用于不适合场景

  Hadoop框架中最核心设计就是:MapReduce和HDFSMapReduce思想是由Google篇论文所提及而被广为流传简单句话解释MapReduce就是“任务分解和结果汇总”HDFS是Hadoop分布式文件系统(Hadoop Distributed File )缩写为分布式计算存储提供了底层支持

  MapReduce从它名字上来看就大致可以看出个缘由两个动词Map和Reduce“Map(展开)”就是将个任务分解成为多个任务“Reduce”就是将分解后多任务处理结果汇总起来得出最后分析结果这不是什么新思想其实在前面提到多线程多任务设计就可以找到这种思想影子不论是现实社会还是在设计中项工作往往可以被拆分成为多个任务任务的间关系可以分为两种:种是不相关任务可以并行执行;另种是任务的间有相互依赖先后顺序不能够颠倒这类任务是无法并行处理回到大学时期教授上课时让大家去分析关键路径无非就是找最省时任务分解执行方式在分布式系统中机器集群就可以看作硬件资源池将并行任务拆分然后交由每个空闲机器资源去处理能够极大地提高计算效率同时这种资源无关性对于计算集群扩展无疑提供了最好设计保证(其实我直认为Hadoop卡通图标不应该是个小象应该是蚂蚁分布式计算就好比蚂蚁吃大象廉价机器群可以匹敌任何高性能计算机纵向扩展曲线始终敌不过横向扩展斜线)任务分解处理以后那就需要将处理以后结果再汇总起来这就是Reduce要做工作



  图3:Hadoop结构示意图

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

  说到这里就要提到分布式计算最重要个设计点:Moving Computation is Cheaper than Moving Data就是在分布式处理中移动数据代价总是高于转移计算代价简单来说就是分而治的工作需要将数据也分而存储本地任务处理本地数据然后归总这样才会保证分布式计算高效性



  为什么要选择Hadoop?  说完了What简单地说下Why官方网站WebSite已经给了很多介绍说明这里就大致说下其优点及使用场景(没有不好工具只用不适用工具因此选择好场景才能够真正发挥分布式计算作用):

  可扩展:不论是存储可扩展还是计算可扩展都是Hadoop设计根本

  经济:框架可以运行在任何普通PC上

  可靠:分布式文件系统备份恢复机制以及MapReduce任务监控保证了分布式处理可靠性

  高效:分布式文件系统高效数据交互实现以及MapReduce结合Local Data处理模式为高效处理海量信息作了基础准备

  使用场景:个人觉得最适合就是海量数据分析其实Google最早提出MapReduce也就是为了海量数据分析同时HDFS最早是为了搜索引擎实现而开发后来才被用于分布式计算框架中海量数据被分割于多个节点然后由每个节点并行计算将得出结果归并到输出同时第阶段输出又可以作为下阶段计算输入因此可以想象到个树状结构分布式计算图在区别阶段都有区别产出同时并行和串行结合计算也可以很好地在分布式集群资源下得以高效处理

  作者介绍:岑文初就职于阿里软件Software公司研发中心平台任架构师当前主要工作涉及阿里软件Software开发平台服务框架(ASF)设计和实现服务集成平台(SIP)设计和实现没有什么擅长或者精通工作到现在唯提升就是学习能力和速度个人Blog为:http://blog.csdn.net/cenwenchu79



Tags:  hadoop.net hadoopwindows hadoop安装 hadoop

延伸阅读

最新评论

发表评论