您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据挖掘与识别 > 大数据应用的中存储和处理问题剖析46
大数据问题纽约证券交易所每天产生1TB的交易数据社交网站facebook的主机存储着约10亿张照片,占据PB级存储空间互联网档案馆存储着约2PB数据,并以每月至少20TB的速度增长。瑞士日内瓦附近的大型强子对撞机每年产生约15PB的数据这么大的数据该怎么存储和读取?传统关系型数据库(oracle)的成本Facebook的服务器大概1万台,按照oracle的标准10g版本计算大约需要21亿元Hadoop简介Hadoop一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。由HDFS、MapReduce、HBase、Hive和ZooKeeper等成员组成。其中,HDFS和MapReduce是两个最基础最重要的成员。HDFS是GoogleGFS的开源版本,一个高度容错的分布式文件系统,它能够提供高吞吐量的数据访问,适合存储海量(PB级)的大文件(通常超过64M),其原理如图所示:Hadoop优点可扩展:不论是存储的可扩展还是计算的可扩展都是Hadoop的设计根本。经济:框架可以运行在任何普通的PC上。可靠:分布式文件系统的备份恢复机制以及MapReduce的任务监控保证了分布式处理的可靠性。(元数据磁盘错误,心跳测试,副本数,快照(目前还没实现))高效:分布式文件系统的高效数据交互实现以及MapReduce结合LocalData处理的模式,为高效处理海量的信息作了基础准备。Hadoop在国内的分布情况Hadoop作业调度默认调度算法FIFO公平份额调度算法FairScheduler计算能力调度算法CapacityScheduler作业调度总结默认调度算法FIFO简介最早的HadoopMap/Reduce计算架构中,JobTracker在进行作业调度时使用的是FIFO(FirstInFirstOut)算法。所有用户的作业都被提交到一个队列中,然后由JobTracker先按照作业的优先级高低,再按照作业提交时间的先后顺序选择将被执行的作业。优点调度算法简单明了,JobTracker工作负担轻。缺点忽略了不同作业的需求差异。例如如果类似对海量数据进行统计分析的作业长期占据计算资源,那么在其后提交的交互型作业有可能迟迟得不到处理,从而影响到用户的体验。新的调度算法当前,新的调度器已经作为插件的形式集成在Hadoop当中。公平份额调度算法FairSchedulerFairScheduler提出背景FairScheduler基础知识FairScheduler两个关键问题FairScheduler的配置FairScheduler提出背景提出背景Facebook要处理生产型作业(数据统计分析,hive)、大型批处理作业(数据挖掘、机器学习)、小型交互型作业(hive查询)。不同用户提交的作业在计算时间、存储空间、数据流量和响应时间上都有不同需求。为使hadoopmapreduce框架能够应对多种类型作业并行执行,使得用户具有良好的体验,Facebook公司提出该算法。FairScheduler基础知识设计思想尽可能保证所有的作业都能够获得等量的资源份额。系统中只有一个作业执行时,它将独占集群所有资源。有其他作业被提交时就会有TaskTracker被释放并分配给新提交的作业,以保证所有的作业都能够获得大体相同的计算资源。作业池用户提交的作业将会放进一个能够公平共享资源的pool(池)中。每个作业池设定了一个最低资源保障(aguaranteedminimumshare),当一个池中包含job时,它至少可以获得minimumshare的资源——最低保障资源份额机制。池中的作业获得一定份额的资源。可以通过配置文件限制每个池中的作业数量。缺省情况下,每个作业池中选择将要执行的作业的策略是FIFO策略,先按照优先级高低排序,然后再按照提交时间排序。FairScheduler基础知识作业和作业池的权值weight缺省情况下,FairScheduler会为每一个用户建立一个单独的pool。所有用户能够获得等量的资源份额而无论他提交了多少作业,而每个pool中,各个作业将平分分配给所在池的资源。实际应用中,无论是作业池还是作业,都被赋予一定的权值,并以此为依据获得相应比例的资源。这种情况下,作业池和作业在资源分配时不是严格的平均分配,但这有利于根据作业的重要程度及实际需求合理分配资源。FairScheduler两个关键问题如何选择合适的作业执行默认是FIFO策略,此外还有一种基于缺额的策略。FairScheduler为每个作业定义了一个deficit(缺额)指标。Deficit是一个作业在理想情况下的获得的计算资源和实际中获得的计算资源之间的差距。FairScheduler会每隔几百毫秒观察每个作业中有多少任务已经在这个时间间隔内执行,并将结果与它应得的资源份额比较,以更新该作业的deficit值。一旦有空闲的tasktracker出现,首先分配给当前具有最高deficit值的作业。例外——如果系统中存在着尚未获得最低资源保障的作业池,那么该池中的作业将会优先调度,而选择池中的作业需要根据它们的deficit来决定。这样做是为了尽可能满足作业池最低保障资源份额的机制。FairScheduler两个关键问题如何确定每个作业的资源份额缺省情况是平分资源,此外提供一种基于权值的资源分配方法。作业资源份额的计算是根据作业的权值将集群的资源总量划分给各个可以运行的作业。默认情况下,权值基于作业优先级,每个优先级对应的权值是低一个优先级的2倍(优先级共有VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW五个等级,则VERY_HIGH具有4倍NORMAL的权值)。作业和作业池的权值可以在池配置文件中进行设定,例如可以基于作业的大小和提交时间来设定。作业池的最低资源保障也是按照权值比例分配给其中的作业。计算能力调度CapacitySchedulerCapcityScheduler基础知识CapcityScheduler一个关键问题CapcityScheduler内存管理CapcityScheduler的配置CapcitySchedule基础知识基础知识CapacityScheduler是由雅虎提出的作业调度算法,它提供了类似于FairScheduler算法的功能。CapacityScheduler中可以定义多个作业队列(multiplequeues),作业提交时将直接放入到一个队列中。每个队列都可以通过配置获得一定数量的tasktracker资源用于处理map/reduce操作,调度算法将按照配置文件为队列分配相应的计算资源量。对于已经分配给了某队列但处于空闲的资源各个“忙”的队列会分享它们。当某一队列没有能够按照配置的数量值获得足够资源但是它的作业压力增加了时,之前那些曾分配给它但又由于之前空闲被别的队列所占用了的资源会在完成当前task后立即分配给回应属的队列。CapcitySchedule基础知识基础知识CapacityScheduler的每个队列中采用的调度策略是FIFO算法。CapacityScheduler默认情况下不支持优先级,但是可以在配置文件中开启此选项,如果支持优先级,调度算法就是带有优先级的FIFO。CapacityScheduler不支持优先级抢占,一旦一个作业开始执行,在执行完之前它的资源不会被高优先级作业所抢占。CapacityScheduler对队列中同一用户提交的作业能够获得的资源百分比进行了限制以使同属于一用户的作业不能出现独占资源的情况。CapcityScheduler一个关键问题如何选择合适的作业去执行为队列定义了一个指标—队列中正在运行的任务数与其应该分得的计算资源(配置文件中为此队列分配了相应数量的资源,而实际中该队列可能没有分配到)之间的比值。当系统中出现空闲的tasktracker,算法会首先选择一个该比值最低的队列。队列被选中后,将按照作业优先级(如果支持的话)和提交时间顺序选择执行的作业。在选择作业的时候,还需要考虑作业所属的用户是否已经超出了他所能使用的资源限制。此外,还会考虑tasktracker内存资源是否满足作业的要求。CapcityScheduler内存管理内存资源的有效管理CapacityScheduler能有效地对hadoop集群的内存资源进行管理,以支持内存密集型应用。作业对内存资源需求高时,调度算法将把该作业的相关任务分配到内存资源充足的tasktracker上。在作业选择过程中,CapacityScheduler会检查空闲tasktracker上的内存资源是否满足作业要求。tasktracker上的空闲资源(内存)数量值可以通过tasktracker的内存资源总量减去当前已经使用的内存数量得到,而后者包含在tasktracker向jobtracker发送的周期性心跳信息中。目前,基于内存的调度只能在linux平台下起作用,关于内存调度的相关参数可以通过配置文件来设置。Hadoop公平调度器算法解析※公平调度介绍※hadoop-0.20.2公平调度算法分析基于缺额的调度算法1.变量定义2.相关算法※hadoop-0.21.0公平调度算法分析层次调度算法公平调度介绍公平调度器按资源池(pool)来组织作业,并把资源公平的分到这些资源池里。默认情况下,每一个用户拥有一个独立的资源池,以使每个用户都能获得一份等同的集群资源而不管他们提交了多少作业。按用户的Unix群组或作业配置(jobconf)属性来设置作业的资源池也是可以的。在每一个资源池内,会使用公平共享(fairsharing)的方法在运行作业之间共享容量(capacity)。用户也可以给予资源池相应的权重,以不按比例的方式共享集群。公平调度介绍除了提供公平共享方法外,公平调度器允许赋给资源池保证(guaranteed)最小共享资源,这个用在确保特定用户、群组或生产应用程序总能获取到足够的资源时是很有用的。当一个资源池包含作业时,它至少能获取到它的最小共享资源,但是当资源池不完全需要它所拥有的保证共享资源时,额外的部分会在其它资源池间进行切分。公平调度介绍主要特点如下:Ø支持多用户多队列Ø资源公平共享(公平共享量由优先级决定)Ø保证最小共享量Ø支持时间片抢占Ø限制作业并发量,以防止中间数据塞满磁盘Pool资源池,或者作业池。每个pool里有一定量的资源(管理员配置),每个用户属于某个pool,其作业可使用这个pool中的资源,可限定每个pool中最大并发作业数和每个用户最多提交作业数。默认情况下,一个linux用户对应一个pool,而管理员也可以配以一个linuxgroup对应一个pool。pool实际上也可以称为group或者队列。最小共享量管理员可给每个pool配置一个最小共享量,调度器在分配资源时,需要保证每个pool中的作业至少获取该数目的资源。一个常见的应用场景是,对产品pool设置最小共享量,而测试pool不设置,这样,当可用资源有限时时,优先保证产品pool有资源可用。公平共享量当集群中存在多个pool时,某些pool中的资源可能用不了,这时候调度器会自动将这些pool中剩余的资源共享给其他需要的pool,其他这些pool获取的共享资源多少主要由其poolweight决定,poolweight越大,获取的资源越多。一个pool的最小共享量加上其获取的共享资源数目,就是公平共享量。公平调度算法分析——变量定义★描述job信息的变量(JobInfo)jobWeight:作业的权重。实际计算时,map阶段和reduce阶段分开,分别记为mapWeight,reduceWeightjobDeficit:作业的缺额,即作业在理想调度器上所应得的计算时间与实际所获得的计算时间的缺额,这个
本文标题:大数据应用的中存储和处理问题剖析46
链接地址:https://www.777doc.com/doc-28359 .html