Hadoop框架的理解.docx_第1页
Hadoop框架的理解.docx_第2页
Hadoop框架的理解.docx_第3页
Hadoop框架的理解.docx_第4页
Hadoop框架的理解.docx_第5页
免费预览已结束,剩余14页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长沙引擎信息技术有限公司Hadoop框架理解刘勇2014-02-16本文从基本架构、HDFS及MapReduce基本工作原理上对hadoop框架进行了粗略的分析,可帮助初学者初步理解hadoop架构。目 录Hadoop框架的理解11、Hadoop架构11.1、简介:11.2、优点:21.3、架构:22、HDFS(Hadoop Distributed FileSystem)32.1、简介:32.2、文件分块:42.3、NameNode和DataNode:42.4、数据流53、MapReduce73.1简介:73.2工作原理73.3实例:93.4 Shuffle(洗牌)103.5 MapReduce执行过程143.6 MapReduce 适合处理的任务16Hadoop框架的理解1、 Hadoop架构1.1、简介:Hadoop是一个分布式系统基础架构,由Apache基金会所开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop包括两个核心部分:Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce编程模型。其中HDFS运行在商用硬件上,它和现有分布式文件系统很相似,但也具备了明显的差异性,比如HDFS是高度容错的,可运行在廉价硬件上;HDFS能为应用程序提供高吞吐率的数据访问,适用于大数据集的应用中;HDFS在POSIX规范进行了修改,使之能对文件系统数据进行流式访问,从而适用于批量数据的处理。HDFS为文件采用一种一次写多次读的访问模型,从而简化了数据一致性问题,使高吞吐率数据访问成为可能,一些Map/Reduce应用和网页抓取程序在这种访问模型下表现完美。MapReduce 本身源自于函数式语言,主要通过Map(映射)和Reduce(化简)这两个步骤来并行处理大规模的数据集。首先,Map会先对由很多独立元素组 成的逻辑列表中的每一个元素进行指定的操作,且原始列表不会被更改,会创建多个新的列表来保存Map的处理结果。也就意味着,Map操作是高度并行的。当Map工作完成之后,系统会接着对新生成的多个列表进行清理(Shuffle)和排序,之后,会这些新创建的列表进行Reduce操作,也就是对一个列表中的元素根据Key值进行适当的合并。1.2、优点:Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:A、 高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。B、 高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。C、 高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。D、 高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。E、 低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如C+。1.3、架构:Hadoop 由许多元素构成。其最底部是 Hadoop Distributed FileSystem(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是MapReduce引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。2、HDFS(Hadoop Distributed FileSystem)2.1、简介:对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS 的架构是基于一组特定的节点构建的,这是由它自身的特点决定的。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)。存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的 RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的TCP/IP协议。2.2、文件分块:HDFS同样也有块(block)的概念,但是大得多,默认为64 MB。与单一磁盘上的文件系统相似,HDFS上的文件也被划分为块大小的多个分块,作为独立的存储单元。但与其他文件系统不同的是,HDFS中小于一个块大小的文件不会占据整个块的空间。对分布式文件系统中的块进行抽象会带来很多好处。第一个最明显的好处是,一个文件的大小可以大于网络中任意一个磁盘的容量。文件的所有块并不需要存储在同一个磁盘上,因此它们可以利用集群上的任意一个磁盘进行存储。事实上,尽管不常见,但对于整个HDFS集群而言,也可以仅存储一个文件,该文件的块占满集群中所有的磁盘。第二个好处是,使用块抽象而非整个文件作为存储单元,大大简化了存储子系统的设计。简化是所有系统的目标,伹是这对于故障种类繁多的分布式系统来说尤为重要。将存储子系统控制单元设置为块,可简化存储管理(由于块的大小是固定的, 因此计算单个磁盘能存储多少个块就相对容易)。同时也消除了对元数据的顾虑(块只是存储数据的一部分,而文件的元数据,如权限信息,并不需要与块一同存储,这样一来,其他系统就可以单独地管理这些元数据)。不仅如此,块非常适合用于数据备份进而提供数据容错能力和可用性。将每个块复制到少数几个独立的机器上(默认为3个),可以确保在发生块、磁盘或机器故障后数据不丢失。如果发现一个块不可用,系统会从其他地方读取另一个复本,而这个过程对用户是透明的。一个因损坏或机器故障而丢失的块可以从其他候选地点复制到另一台可以正常运行的机器上,以保证复本的数量回到正常水平。同样,有些应用程序可能选择为一些常用的文件块设置更高的复本数量进而分散集群中的读取负载。2.3、NameNode和DataNode:HDFS集群有两类节点,并以管理者-工作者模式运行,即一个NameNode(管理者)和多个DataNode(工作者)。NameNode管理文件系统的命名空间,它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。NameNode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时由数据节点重建。DataNode是文件系统的工作节点。它们根据需要存储并检索数据块(受客户端或 NameNode调度),并且定期向NameNode发送它们所存储的块的列表。没有NameNode,文件系统将无法使用。事实上,如果运行NameNode服务的机器毁坏,文件系统上所有的文件将会丢失,因为我们不知道如何根据DataNode的块来重建文件。因此,对NameNode实现容错非常重要,Hadoop为此提供了两种机制。第一种机制是备份那些组成文件系统元数据持久状态的文件。Hadoop可以通过配置使NameNode在多个文件系统上保存元数据的持久状态。这些写操作是实时同步的,是原子操作。一般的配置是将持久状态写人本地磁盘的同时,写人一个远程挂载的网络文件系统(NFS)。另一种可行的方法是运行一个辅助NameNode,但它不能被用作NameNode。这个辅助NameNode的重要作用是定期通过编辑日志合并命名空间镜像,以防止编辑日志过大。这个辅助NameNode 般在另一台单独的物理计算机上运行,因为它需要占用大量CPU时间与NameNode相同容量的内存来执行合并操作。它会保存合并后的命名空间镜像的副本,并在NameNode发生故障时启用。但是,辅助NameNode保存的状态总是滞后于主节点,所以在主节点全部失效时,难免会丢失部分数据。在这种情况下,一般把存储在NFS上的NameNode元数据复制到辅助NameNode并作为新的主NameNode运行。2.4、数据流2.4.1、文件读取剖析为了了解客户端及与之交互的HDFS、NameNode和DataNode之间的数据流是什么样的,我们可参考下图,该图显示了在读取文件时一些事件的主要顺序。大致过程如下:1、使用HDFS提供的客户端开发库Client,向远程的NameNode发起RPC请求;2、NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode都会返回有该block拷贝的DataNode地址;3、客户端开发库Client会选取离客户端最接近的DataNode来读取block;如果客户端本身就是DataNode,那么将从本地直接获取数据;4、读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode;5、当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向NameNode获取下一批的block列表。6、读取完一个block都会进行checksum验证,如果读取DataNode时出现错误,客户端会通知NameNode,然后再从下一个拥有该block拷贝的DataNode继续读。2.4.2、文件写入剖析文件是如何写入HDFS的。尽管比较详细,但对于理解数据流还是很有用的,因为它清楚地说明了HDFS的一致模型。要考虑的情况是如何创建一个新文件,并把数据写入该文件,最后关闭该文件。写入文件的过程比读取较为复杂:1、使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;2、Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;3、当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以数据队列data queue的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储备份的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。4、开始以pipeline(管道)的形式将packet写入所有的备份中。开发库把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。5、最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着ack queue,成功收到datanode返回的ack packet后会从ack queue移除相应的packet。6、如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量。3、MapReduce3.1简介:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念Map(映射)和Reduce(规约),和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。他极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(规约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。3.2工作原理在Hadoop官方文档介绍了Hadoop中MapReduce的三个步骤:map(主要是分解并行的任务)、combine(主要是为了提高reduce的效率)和reduce(把处理后的结果再汇总起来)。3.2.1、map由于map是并行地对输入的文件集进行操作,所以它的第一步(FileSplit)就是把文件集分割成一些子集。如果单个的文件大到影响查找效率时,它会被分割成一些小的文件。要指出的是,分割这一步是不知道输入文件的内部逻辑结构的。比如,以行为逻辑分割的文本文件会被以任意的字节界限分割,所以这个具体分割要由用户自己指定。然后每个文件分割体都会对应地有一个新的map任务。当单个map任务开始时,它会对每个配置过的reduce任务开启一个新的输出流(writer),这个输出流会读取文件分割体。Hadoop中的类InputFormat用于分析输入文件并产生键值(key/value)对。Hadoop中的Mapper类是一个可以由用户实现的类,经过InputFormat类分析的键值(key/value)对都传给Mapper类,这样,用户提供的Mapper类就可以进行真正的map操作。当map操作的输出被收集后,它们会被Hadoop中的Partitioner类以指定的方式区分地写入输出文件里。3.2.2、combine当map操作输出它的键值(key/value)对时,出于性能和效率的考虑,Hadhoop框架提供了一个合成器(combine)。有了这个合成器,map操作所产生的键值(key/value)对就不会马上写入输出文件,它们会被收集在一些list中,一个key值对应一个list,当写入一定数量的键值(key/value)对时,这部分list会被合成器处理。比如,hadoop案例中的word count程序,它的map操作输出是(word,1)键值对,在map操作的输入中,词的计数可以使用合成器来加速。合成操作会在内存中收集处理list,一个词一个list。当一定数量的键值对输出到内存中时,就调用合成操作的reduce方法,每次都以一个唯一的词为key,values是list的迭代器,然后合成器输出(word, count in this part of the input)键值对。3.2.3、reduce当一个reduce任务开始时,它的输入分散在各个节点上的map的输出文件里。如果在分布式的模式下,需要先把这些文件拷贝到本地文件系统上。一旦所有的数据都被拷贝到reduce任务所在的机器上时,reduce任务会把这些文件合并到一个文件中。然后这个文件会被合并分类,使得相同的key的键值对可以排在一起。接下来的reduce操作就很简单了,顺序地读入这个文件,将键(key)所对应的值(values)传给reduce方法完成之后再读取一个键(key)。最后,输出由每个reduce任务的输出文件组成。而它们的格式可以由JobConf.setOutputFormat类指定。3.3实例:在map阶段输入的是原始的NCDC数据。我们选择的是一种文本输入格式,以便数据集的每一行都会是一个文本值。键是在文件开头部分文本行起始处的偏移量,但我们没有这方面的需要,所以将其忽略。map函数很简单。我们使用map函数来找出年份和气温,因为我们只对它们有兴趣。在本例中,map函数只是一个数据准备阶段,通过这种方式来建立数据,使得reducer函数能在此基础上进行工作:找出每年的最高气温。选用其中的几行数据进行说明: 0067011990999991950051507004.9999999N9+00001+99999999999. 0043011990999991950051512004.9999999N9+00221+99999999999. 0043011990999991950051518004.9999999N9-00111+99999999999. 0043012650999991949032412004.0500001N9+01111+99999999999. 0043012650999991949032418004.0500001N9+00781+99999999999.这些行以键/值对的方式来表示map函数:(0,0067011990999991950051507004.9999999N9+00001+99999999999.) (106,0043011990999991950051512004.9999999N9+00221+99999999999.) (212,0043011990999991950051518004.9999999N9-00111+99999999999.) (318,0043012650999991949032412004.0500001N9+01111+99999999999.) (424,0043012650999991949032418004.0500001N9+00781+99999999999.)键是文件中的行偏移量,而这往往是我们在map函数中所忽视的。map函数的功能仅仅提取年份和气温(以粗体显示),并将其作为输出被发送。(气温值已被解释为整数)(1950,0)(1950,22)(1950, 11)(1949,111)(1949,78)map函数的输出先由MapReduce框架处理,然后再被发送到reduce函数。这一处理过程根据键来对键/值对进行排序和分组。因此,继续我们的示例,reduce 函数会看到如下输入:(1949,111,78)(1950,0,22,11)每年的年份后都有一系列气温读数。所有reduce函数现在必须重复这个列表并从中找出最大的读数:(1949,111)(1950,22)这是最后的输出:全球气温记录中每年的最高气温。整个数据流如图所示:3.4 Shuffle(洗牌)Shuffle在MapReduce中是一个核心过程,它在接点中的数据交换起着关键的作用,此过程横跨map与reduce两端。3.4.1 Map端整个流程大致分四步。简单些可以这样说,每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式存放到磁盘,当整个map task结束后再对磁盘中这个map task产生的所有临时文件做合并,生成最终的正式输出文件,然后等待reduce task来拉数据。当然这里的每一步都可能包含着多个步骤与细节,下面对细节来一一说明:1. 在map task执行时,它的输入数据来源于HDFS的block,当然在MapReduce概念中,map task只读取split。Split与block的对应关系可能是多对一,默认是一对一。2. 在经过mapper的运行后,我们得知mapper的输出是这样一个key/value对,到底当前结果应该交由哪个reduce去做呢,是需要现在决定的。MapReduce提供Partitioner接口,它的作用就是根据key或value及reduce的数量来决定当前的这对输出数据最终应该交由哪个reduce task处理。默认对key hash后再以reduce task数量取模。默认的取模方式只是为了平均reduce的处理能力,如果用户自己对Partitioner有需求,可以订制并设置到job上。3. 环形内存缓冲区是有大小限制的,默认是100MB。当map task的输出结果很多时,就可能会撑爆内存,所以需要在一定条件下将缓冲区中的数据临时写入磁盘,然后重新利用这块缓冲区。这个从内存往磁盘写数据的过程被称为Spill,中文可译为溢写,字面意思很直观。这个溢写是由单独线程来完成,不影响往缓冲区写map结果的线程。溢写线程启动时不应该阻止map的结果输出,所以整个缓冲区有个溢写的比例spill.percent。这个比例默认是0.8,也就是当缓冲区的数据已经达到阈值(buffer size * spill percent = 100MB * 0.8 = 80MB),溢写线程启动,锁定这80MB的内存,执行溢写过程。Map task的输出结果还可以往剩下的20MB内存中写,互不影响。当溢写线程启动后,需要对这80MB空间内的key做排序(Sort)。排序是MapReduce模型默认的行为,这里的排序也是对序列化的字节做的排序。在这里我们可以想想,因为map task的输出是需要发送到不同的reduce端去,而内存缓冲区没有对将发送到相同reduce端的数据做合并,那么这种合并应该是体现是磁盘文件中的。从官方图上也可以看到写到磁盘中的溢写文件是对不同的reduce端的数值做过合并。所以溢写过程一个很重要的细节在于,如果有很多个key/value对需要发送到某个reduce端去,那么需要将这些key/value值拼接到一块,减少与partition相关的索引记录。在针对每个reduce端而合并数据时,有些数据应该把它们的值合并到一块,这个过程叫reduce也叫combine。但MapReduce的术语中,reduce只指reduce端执行从多个map task取数据做计算的过程。除reduce外,非正式地合并数据只能算做combine了。其实大家知道的,MapReduce中将Combiner等同于Reducer。如果client设置过Combiner,那么现在就是使用Combiner的时候了。将有相同key的key/value对的value加起来,减少溢写到磁盘的数据量。Combiner会优化MapReduce的中间结果,所以它在整个模型中会多次使用。那哪些场景才能使用Combiner呢?从这里分析,Combiner的输出是Reducer的输入,Combiner绝不能改变最终的计算结果。所以从我的想法来看,Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。Combiner的使用一定得慎重,如果用好,它对job执行效率有帮助,反之会影响reduce的最终结果。4. 每次溢写会在磁盘上生成一个溢写文件,如果map的输出结果真的很大,有多次这样的溢写发生,磁盘上相应的就会有多个溢写文件存在。当map task真正完成时,内存缓冲区中的数据也全部溢写到磁盘中形成一个溢写文件。最终磁盘中会至少有一个这样的溢写文件存在(如果map的输出结果很少,当map执行完成时,只会产生一个溢写文件),因为最终的文件只有一个,所以需要将这些溢写文件归并到一起,这个过程就叫做Merge。因为merge是将多个溢写文件合并到一个文件,所以可能也有相同的key存在,在这个过程中如果client设置过Combiner,也会使用Combiner来合并相同的key。至此,map端的所有工作都已结束,最终生成的这个文件也存放在TaskTracker够得着的某个本地目录内。每个reduce task不断地通过RPC从JobTracker那里获取map task是否完成的信息,如果reduce task得到通知,获知某台TaskTracker上的map task执行完成,Shuffle的后半段过程开始启动。3.4.2 Reduce端简单地说,reduce task在执行之前的工作就是不断地拉取当前job里每个map task的最终结果,然后对从不同地方拉取过来的数据不断地做merge,也最终形成一个文件作为reduce task的输入文件。Shuffle在reduce端的过程也能用图上标明的三点来概括。当前reduce copy数据的前提是它要从JobTracker获得有哪些map task已执行结束,这段过程不表,有兴趣的朋友可以关注下。Reducer真正运行之前,所有的时间都是在拉取数据,做merge,且不断重复地在做。如前面的方式一样,下面我也分段地描述reduce 端的Shuffle细节: 1. Copy过程,简单地拉取数据。Reduce进程启动一些数据copy线程(Fetcher),通过HTTP方式请求map task所在的TaskTracker获取map task的输出文件。因为map task早已结束,这些文件就归TaskTracker管理在本地磁盘中。2. Merge阶段。这里的merge如map端的merge动作,只是数组中存放的是不同map端copy来的数值。Copy过来的数据会先放入内存缓冲区中,这里的缓冲区大小要比map端的更为灵活,它基于JVM的heap size设置,因为Shuffle阶段Reducer不运行,所以应该把绝大部分的内存都给Shuffle用。这里需要强调的是,merge有三种形式:1)内存到内存 2)内存到磁盘 3)磁盘到磁盘。默认情况下第一种形式不启用,让人比较困惑,是吧。当内存中的数据量到达一定阈值,就启动内存到磁盘的merge。与map 端类似,这也是溢写的过程,这个过程中如果你设置有Combiner,也是会启用的,然后在磁盘中生成了众多的溢写文件。第二种merge方式一直在运行,直到没有map端的数据时才结束,然后启动第三种磁盘到磁盘的merge方式生成最终的那个文件。3. Reducer的输入文件。不断地merge后,最后会生成一个“最终文件”。为什么加引号?因为这个文件可能存在于磁盘上,也可能存在于内存中。对我们来说,当然希望它存放于内存中,直接作为Reducer的输入,但默认情况下,这个文件是存放于磁盘中的。当Reducer的输入文件已定,整个Shuffle才最终结束。然后就是Reducer执行,把结果放到HDFS上。3.5 MapReduce执行过程整个过程有4个独立的实体 客户端:提交MapReduce JobTracker:协调作业的运行 TaskTracker:运行作业划分后的任务 HDFS:用来在其他实体之间共享作业文件下图为整体运行图:3.5.1 正常情况A.作业的提交JobClient的runJob是用于新建JobClient实例并调用其submitJob()方法的便捷方式,提交Job后,runJob()每秒轮询检测作业的进度,随时监控Job的运行状态。其中JobClient的submitJob()方法所实现的作业提交过程: 向JobTracker请求一个新的作业ID 检查作业的输出说明 计算作业的输入分片 将运行作业所需要的资源(Jar文件,配置文件和计算所得输入分片)复制到一个作业ID命名的目录下JobTracker的文件系统中。B.作业的初始化JobTracker接收对其提交的作业后,会把这个调用放入一个队列,交由作业调度器调度,初始化。初始化包括创建一个表示正在运行作业的对象-封装任务和记录信息,以便跟踪任务的状态和进程C.任务的分配TaskTracker运行简单的循环来对JobTracker发送心跳,告知自己的是否存活,同时交互信息,对于map任务和reduce任务,TaskTracker会分配适当的固定数量的任务槽,理想状态一般遵循数据本地化,和机架本地化D.任务的执行第一步:TaskTracker拷贝JAR文件到本地,第二部:TaskTracker新建本地目录,将JAR文件加压到其下面;第三步:TaskTracker新建一个TaskRunner实例运行该任务。E.进程和状态的更新通过Job的Status属性对Job进行检测,例如作业云习惯状态,map和reduce运行的进度、Job计数器的值、状态消息描述等等,尤其对计数器Counter(计数器)属性的检查。F.作业的完成当JobTracker收到Job最后一个Task完成的消息时候便把Job的状态设置为”完成“,JobClient得知后,从runJob()方法返回。3.5.2 失败情况A.TasK失败第一种情况:map或reduce任务中的用户代码抛出运行异常,此时子进程JVM进程会在退出之前想TaskTracker发送错误报告,错误报告被记录错误日志,TaskTracker会将这个任务(Task)正在运行的Task Attempt标记为失败,释放一个任务槽去运行另外一个Task Attempt。第二种情况:子进程JVM突然退出Task Tracker会注意到JVM退出,并将此Task Attempt标记为失败。JobTracker通过心跳得知一个Task Attempt失败后,会重启调

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论