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

图1:MapReduce结构示意图

时间: 2024-08-17 13:04:59

分布式计算开源框架Hadoop入门实践(一)的相关文章

分布式计算开源框架Hadoop入门实践(三)

Hadoop基本流程 计算开源框架Hadoop入门实践(三)-hadoop分布式计算框架"> 一个图片太大了,只好分割成为两部分.根据流程图来说一下具体一个任务执行的情况. 在分布式环境中客户端创建任务并提交. InputFormat做Map前的预处理,主要负责以下工作: 验证输入的格式是否符合JobConfig的输入定义,这个在实现Map和构建Conf的时候就会知道,不定义可以是Writable的任意子类. 将input的文件切分为逻辑上的输入InputSplit,其实这就是在上面提到的

分布式计算开源框架Hadoop入门实践

在SIP项目设计的过程中,对于它庞大的日志在早先就考虑使用任务分解的多线程处理模式来分析统计,在前面有一篇Blog中提到了那部分的设计,但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器结合Mysql完成了http://www.aliyun.com/zixun/aggregation/38609.html">访问控制以及统计的工作.但未来,对于海量日志分析的工作,还是需要有所准备.现在最火的技术词汇莫过于"云计算",在Open API日益盛行的今天

分布式计算开源框架Hadoop入门实践(二)

其实参看Hadoop官方文档已经能够很容易配置分布式框架运行环境了,不过这里既然写了就再多写一点,同时有一些细节需要注意的也说明一下,其实也就是这些细节会让人摸索半天.Hadoop可以单机跑,也可以配置集群跑,单机跑就不需要多说了,只需要按照Demo的运行说明直接执行命令即可.这里主要重点说一下集群配置运行的过程. 环境 7台普通的机器,操作系统都是Linux.内存和CPU就不说了,反正Hadoop一大特点就是机器在多不在精.JDK必须是1.5以上的,这个切记.7台机器的机器名务必不同,后续会谈

实践操作:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器

TensorFlow对象检测API是一个建立在TensorFlow之上的开源框架,可以轻松构建,训练和部署对象检测模型. 到目前为止,API的性能给我留下了深刻的印象.在这篇文章中,我将API的对象设定为一个可以运动的玩具.本文将用六个步骤突出API的性能并教你如何构建一个玩具探测器,你也可以根据这六个步骤扩展与实践你想要构建的任何单个或多个对象检测器. 玩具检测器 代码在我的GitHub repo上. 地址:https://github.com/priya-dwivedi/Deep-Learn

深度学习入门者选择开源框架丨硬创公开课群友问答

在上周公开课<AI 从业者该如何选择深度学习开源框架丨硬创公开课>中,微软机器学习科学家彭河森博士详细讲述了各大开源框架适用的场景,课程结束后,我们特地整理了深度学习入门者较为关注的几个问答: 想学习深度学习开源框架,比如TensorFlow,Caffe,需要掌握哪些 Linux 知识? Linux 方面的知识我认为主要在系统配置方面,这里推荐一下 Docker,Docker 是一个容器虚拟机,可以让虚拟机中的程序和硬件更紧密的结合在一起,同时省去了配置 CUDA,BLAS/LAPACK 等环

Deep learning深度学习的十大开源框架

Google开源了TensorFlow(GitHub),此举在深度学习领域影响巨大,因为Google在人工智能领域的研发成绩斐然,有着雄厚的人才储备,而且Google自己的Gmail和搜索引擎都在使用自行研发的深度学习工具. 对于希望在应用中整合深度学习功能的开发者来说,GitHub上其实还有很多不错的开源项目值得关注,首先我们推荐目前规模人气最高的TOP3: 一.Caffe.源自加州伯克利分校的Caffe被广泛应用,包括Pinterest这样的web大户.与TensorFlow一样,Caffe

AI 从业者该如何选择深度学习开源框架丨硬创公开课

编者按:本文内容来自微软美国总部机器学习科学家彭河森博士在雷锋网(公众号:雷锋网)硬创公开课的分享,并由彭河森博士亲自整理成文. 正如程序语言一样,深度学习开源框架同样各有优劣和适用的场景,那么 AI 从业者该如何有针对性地选择这些平台来玩转深度学习? 本期公开课特邀了先后在谷歌.亚马逊.微软供职的机器学习科学家彭河森博士为大家讲述<MXNet火了,AI从业者该如何选择深度学习开源框架>.彭河森博士亲眼见证并深入参与了这三家巨头布局深度学习的过程. 嘉宾介绍 彭河森,埃默里大学统计学博士.现担

15个最受欢迎的Python开源框架

我们从GitHub中整理出了15个最受欢迎的Python开源框架,这些框架包括事件I/O.OLAP.Web开发.高性能网络通信.测试.爬虫等. 1. Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. 2. Diesel:基于Greenlet的事件I/O框架 Di

简单了解开源框架的基础与优势

在IT咨询公司OpenCredo计划要在七个月的时间里给一家主要保险商提供三个新应用程序的时候,它给自己制定了三个目标:缩短开发时间,允许客户频繁变动,和架构一个可以处理不可预知流量高峰的系统. 首席执行官Russel Miles认为,借助于使用Cloud Foundry开源框架和其他的一些开源软件,OpenCredo已经完成了"一些繁重的工作",比如配置虚拟机以及调整存储卷的大小.这个开源框架能够让开发人员在本地进行代码的编写,和客户共享,以及自动化集成.测试和应用程序组件的部署等操