Hadoop分析与理解
午后的红茶meton
这个作者很懒,什么都没留下…
展开
-
Yarn中map、reduce任务运行容器YarnChild分析
在对Yarn上MRAppMaster组件详解以及任务资源申请、启动的源码分析的分析中可以知道,真正用于执行MapTask任务、ReduceTask任务的进程容器为YarnChild进程,接下来对该YarnChild进程运行Task任务进行对应的分析:TaskAttempt状态机 我们知道具体Map、Reduce任务在YarnChild进程中的调度触发是在TaskAttempt的状态机流转过程中触发实现的,在TaskAttempt的状态机流转过程中:New -->...原创 2020-08-28 20:42:59 · 2085 阅读 · 7 评论 -
Yarn上MRAppMaster组件详解以及任务资源申请、启动的源码分析
MRAppMaster是MapReduce的ApplicationMaster实现,它使得MapReduce计算框架可以运行于YARN之上。在YARN中,MRAppMaster负责管理MapReduce作业的生命周期,包括创建MapReduce作业,向ResourceManager申请资源,与NodeManage通信要求其启动Container,监控作业的运行状态,当任务失败时重新启动任务等。 YARN中采用了基于事件驱动的异步并发编程模型,它通过事件将各个组件联系起来,并由一...原创 2020-08-26 21:52:24 · 2044 阅读 · 5 评论 -
Yarn上资源隔离技术的剖析-内存资源隔离源码解析
概述 YARN框架作为一个资源管理系统,其最重要和最基础的两个功能是资源调度和资源隔离:资源调度:由resourcemanager完成,在resourcemanager的组件及资源调度已有介绍; 资源隔离:各个nodemanager监控隔离完成; YARN对其内部所拥有的内存资源和CPU资源采取了不同的资源隔离方案。对于内存资源,它是一种限制性资源,它的量的大小直接决定应用程序的死活,因为应用程序到达内存限制,会发生OOM,就会被杀死。CPU资源一般用Cgroups进行资源控制。内...原创 2020-08-26 00:16:10 · 540 阅读 · 0 评论 -
NodeManager中分布式缓存机制
分布式缓存介绍 在Yarn中,分布式缓存是一种分布式文件分发与缓存机制,类似于MRv1中的Distrubuted Cache,其主要作用就是将用户应用程序执行时所需的外部文件资源自动透明的下载缓存到各个节点,从而省去了用户手动部署这些文件麻烦。YARN分布式缓存工作流程如下:客户端将应用程序所需的文件资源(外部字典、JAR包、二进制文件)提交到HDFS上。 客户端将应用程序提交到RM上。 RM将与某个NM进行通信,启动应用程序AM,NM收到命令后,首先从HDFS上下载文件(缓存),...原创 2020-08-25 09:59:56 · 837 阅读 · 0 评论 -
NodeManager详细组件及功能
NodeManager NodeManager是Yarn中单节点的代理,它管理Hadoop集群中单个计算节点,其需要与应用程序的ApplicationMaster和集群资源管理器RM交互,从ApplicationMaster上接收到相关Container的执行命令(启动,停止Container);并向RM汇报各个Container的运行状态和节点健康状态,并领取相关的Container的执行命令;其主要的功能包括与RM保持通信,管理Container的生命周期,监控每个Container的资...原创 2020-08-25 01:06:11 · 7463 阅读 · 0 评论 -
Yarn中资源调度模型及分配
资源调度模型在YARN的资源分配过程中,其采用了双层资源调度模型: 在第一层中,ResourceManager中的资源调度器将资源分配给各个ApplicationMaster; 在第二层中,ApplicationMaster再进一步将资源分配给它内部的各个任务; YARN的资源分配过程是异步的,也就是说,资源调度器将资源分配给一个应用程序后,它不会立刻push给对应的ApplicationMaster,而是暂时放到一个缓冲区中,等待ApplicationMaster通过周期性的心跳主动来取.原创 2020-08-24 21:44:17 · 2822 阅读 · 0 评论 -
Yarn中RMApp、RMAppAttempt、RMContainer和RMNode状态机及其状态转移
概述 YARN中,如果一个对象由若干个状态以及触发这些状态发生转移的事件构成,它将被抽象成一个状态机,在YARN的ResourceManager内部,共有四类状态机,分别是RMApp,RMAppAttempt,RMContainer和RMNode。其中,前2类状态机维护了一个应用程序相关的生命周期,包括Application生命周期,一次进行尝试的生命周期;RMContainer则维护了分配出去的各个资源的使用状态;RMNode维护了一个NodeManager的生命周期。以上四个状态机,继...转载 2020-08-24 16:16:13 · 1509 阅读 · 2 评论 -
ResourceManager详细组件及功能
在Yarn框架设计中其采用了Master/Slave结构,其中Master实现为ResourceManager,负责整个集群资源的管理与调度;Slave实现为NodeManager,负责单个节点的资源管理与任务启动。 ResourceManager是整个Yarn集群中最重要的组件之一,其主要的功能包括ApplicationMaster的管理(启动、停止等)、NodeManager管理、Application管理、状态机管理等;并且ResourceManager负责集群中所有资源...原创 2020-08-24 10:40:03 · 12587 阅读 · 1 评论 -
Yarn应用程序开发和设计流程
概述 YARN是一个资源管理系统,负责集群资源的管理和调度。如果想要将一个新的应用程序运行在YARN之上,通常需要编写两个组件Client客户端和ApplicationMaster。其中,Client负责向ResourceManager提交ApplicationMaster,并查询应用程序运行状态;ApplicationMaster负责向ResourceManager申请资源(以Container形式表示),并与NodeManager通信以启动各Container,此外,Applicati...原创 2020-08-23 22:07:23 · 450 阅读 · 0 评论 -
Yarn中的状态机库及其使用
状态机库 状态机由一组状态组成,这些状态分为三类:初始状态、中间状态和最终状态。状态机从初始状态开始运行,经过一系列中间状态后,到达最终状态并退出。在一个状态机中,每个状态都可以接收一组特定事件,并根据具体的事件类型转换到另一个状态。当状态机转换到最终状态时,则退出。YARN状态转换方式 在YARN中,每种状态转换由一个四元组表示,分别是转换前状态(preState)、转换后状态(postState)、事件(event)和回调函数(hook)。YARN定义了三种状态转...原创 2020-08-20 23:13:03 · 825 阅读 · 0 评论 -
Yarn中的服务库和事件库及其使用
在Yarn的源代码设计中,其服务库对于生命周期较长的对象, YARN 采用了基于服务的对象管理模型对其进行管理, 该模型主要有以下几个特点。将每个被服务化的对象分为 4 个状态: NOTINITED(被创建)、INITED(已初始化)、 STARTED(已启动)、STOPPED(已停止)。 任何服务状态变化都可以触发另外一些动作。 可通过组合的方式对任意服务进行组合, 以便进行统一管理。YARN 中关于服务模型的类图(位于包 org.apache.hadoop.service...原创 2020-08-20 22:19:25 · 519 阅读 · 0 评论 -
Yarn框架和工作流程简介
大数据现在越来越火,各种计算框架不断出现,比如内存计算框架(Spark)、流式计算框架(Storm)、迭代式计算框架(iMapReduce)等新型计算框架的出现,经典MR计算框架(MRv1)的局限性日益突出。比如拓展性,不支持部分计算框架,即使支持,操作起来也很复杂,还有资源利用率比较低等等问题。 2010年雅虎团队设计出也新的框架—-YARN(MRv2)。全名Yet Another Resource Negotiator.一个多种计算框架通用的资源调度体系,为不同的并行化...原创 2020-08-20 09:07:37 · 2516 阅读 · 0 评论 -
HDFS 读写过程中的异常处理与恢复
在前面的文章中我们对文件操作进行了描述,但并未展开讲述其中涉及的异常错误处理与恢复机制。本文将深入探讨 HDFS 文件操作涉及的错误处理与恢复过程。读异常与恢复读文件可能发生的异常有两种:读取过程中 DataNode 挂了 读取到的文件数据损坏 HDFS 的文件块多副本分散存储机制保障了数据存储的可靠性,对于第一种情况 DataNode 挂了只需要失败转移到其他副本所在的 DataNode 继续读取,而对于第二种情况读取到的文件数据块若校验失败可认定为损坏,依然可以...转载 2020-08-20 08:46:03 · 4064 阅读 · 0 评论 -
Hdfs文件系统目录树以及INode类分析
NameNode会维护文件系统的命名空间,hdfs文件系统的命名空间是以"/" 为根目录开始的整棵目录树,整棵目录树是通过FSDirectory类来管理的。 在HDFS中,无论是目录还是文件,在文件系统目录树中都被看做是一个INode节点,如果是目录,则对应的类是INodeDirectory,如果是文件,则对应的类是INodeFile;INodeDirectory类以及INodeFile类都是INode的子类。其中INodeDirectory中包含一个成员集合变量child...原创 2020-08-20 01:04:04 · 1657 阅读 · 0 评论 -
Hdfs NameNode中数据块、数据节点及副本状态概述
HDFS集群以Master-Slave模式运行,主要有两类节点:一个Namenode(即Master)和多个Datanode(即Slave)。 在hdfs文件系统中,NameNode是HDFS中的主节点,其主要管理和维护hdfs文件系统中的两个重要关系;数据块和节点管理 名字节点维护着HDFS文件系统中两个重要的关系:HDFS文件系统的命名空间(namespace);包括文件系统目录树,文件/目录信息以及文件对应的数据块索引,即每个文件对应的数据块列...原创 2020-08-19 21:36:17 · 2599 阅读 · 0 评论 -
Hdfs NameNode中数据块管理与数据节点管理分析
在Hdfs文件系统中,NameNode是HDFS中的主节点,管理文件系统的命名空间(namespace),命名空间包括文件系统目录树、文件/目录信息以及文件的数据块索引。其中文件的数据块索引指的是每个文件对应的数据块列表,这个信息保存在INodeFile.blocks字段中。数据块与数据节点的对应关系,指的是数据块副本保存在哪些数据节点上。这个信息是由DataNode启动时,由DataNode上报给NameNode的,也就是说这部分信息是NameNode动态构建起来的,而不是从fsim...原创 2020-08-19 04:11:10 · 1398 阅读 · 0 评论 -
DataNode启动流程源码分析
我们都知道在Hadoop hdfs文件系统中,Datanode是负责hdfs文件对应的数据块存储管理的组件,其会在启动时向NameNode汇报其上拥有的数据块,以及周期性心跳并接收来自NameNode下发的对应的数据块指令等等;其DataNode和NameNode的大致交互流程包括:Datanode启动时的握手、注册流程; 数据块汇报以及增量汇报等流程; 周期性心跳流程(当前数据节点负载、接受来自NameNode的指令);先来看下DataNode的基本结构逻辑图,可以按照数据层、...原创 2020-08-18 00:05:08 · 706 阅读 · 0 评论 -
HDFS之DataNode工作原理超全总结
启动流程检查配置项${dfs.data.dir}对应的存储目录是否创建,是否具有读写的权限检查; 获取本节点的主机名称和NameNode的地址,以及其他一些运行时需要的配置项; 构造向NameNode注册需要的DataNodeRegistration对象,并在接下来进行一些属性的初始化; 建立到NameNode的IPC连接,并调用handshake()方法与NameNode进行握手,得到了NamespaceInfo对象,包含了layoutVersion、namespaceID、cTime等信息;转载 2020-08-17 22:42:03 · 1698 阅读 · 0 评论 -
DataNode DataXceiverServer writeBlock详解
在客户端写hdfs文件的过程中,其会将数据以packet包的形式向DataNode发送,DataNode在接收到这个packet包时,会进行将该packet写入本地磁盘,之后便向数据流管道中的下游数据节点继续发送该数据包;并会接收来自下游数据节点的数据包确认消息。这个确认消息会逆向的通过数据流管道送回到客户端client端。接下来详细分析一下在客户端写过程中,DataNode上所进行的操作流程。基本的客户端写流程已经在上篇博文中给出:Hdfs 客户端写过程 源码解析 DataNode上的...原创 2020-08-16 02:25:30 · 964 阅读 · 1 评论 -
Hdfs 客户端写过程 源码解析
承接上文Hdfs客户端读过程;接着来分析一下hdfs客户端写入文件的过程;说道到写文件过程,都会知道写入文件的过程如下示意图:客户端写过程示意图:总体来说,最简单的HDFS写文件大体流程如下:客户端获取文件系统实例FileSyStem,并通过其create()方法获取文件系统输出流outputStream。 首先会联系名字节点NameNode,通过ClientProtocol.create()进行rpc调用,在名字节点上创建文件元数据,并获取文件状态FileStatus; ...原创 2020-08-15 18:12:05 · 552 阅读 · 1 评论 -
DataNode DataXceiverServer readBlock详解
鉴于在hdfs客户端读取hdfs文件过程中,其在获取到数据块所在的DataNode之后,会构造blockReader对象用来从指定数据节点上读取数据块;其中RemoteBlockReader2是使用socket连接从datanode读取数据块的实现类,其reader.read()方法用于从socket stream中读取对应的数据包。接下来将分析一下该处对应的DataNode节点上是如何响应该请求的: 在介绍如何响应之前,先简单介绍一下DataNode进程在启动中所开启的一些基...原创 2020-08-13 10:06:28 · 1330 阅读 · 1 评论 -
Hdfs 客户端读过程 源码解析
说到hdfs文件系统上的读文件流程,相信大家都不会陌生,都会知道读取文件的过程如下的示意图:客户端读过程示意图:其基本的读取流程如下:客户端通过调用FileSystem对象的open()方法来打开hdfs上的文件,这个方法在底层会调用ClientProtocol.open()方法,该方法会返回一个HdfsDataInputStream对象用于读取数据块。HdfsDataInputStream是一个DFSInputStream的装饰类,真正进行数据块读取操作的是DFSInputSt...原创 2020-08-12 01:56:27 · 857 阅读 · 1 评论 -
Hadoop RPC解析
RPC(Remote Procedure Call)即是远程过程调用,简单的理解就是调用远程计算机上的服务,就像调用本地服务一样。而不需要了解底层网络技术的协议。RPC采用的是C/S模式;请求部分是一个客户端,而远程服务提供程序就是一个服务器;客户端首先发送一个函数的请求调用到服务器,然后等待服务器上执行并返回响应信息。在服务器端,首先会保持监听状态直到有客户端请求到达服务端为止,之后服务便会执行调用请求的函数,计算结果并发送响应信息给客户端。RPC内部结构一般如图所示:客户端...原创 2020-08-11 02:24:04 · 784 阅读 · 0 评论 -
Editlogs源码剖析
Editlogs文件主要是用来保存存储客户端对hdfs文件系统的修改更新等操作,为什么需要额外的editlogs文件来保存修改操作是因为:如果实时的将内存中的hdfs文件系统元数据信息保存同步到fsimage文件中,将会非常消耗资源且造成NameNode运行缓慢,所有NameNode会将客户端针对命名空间的修改操作先保存在编辑日志editlogs中;然后定期合并fsimage和editlogs文件。 所以在针对editlog文件的记录过程中,需要一种机制来标识每一次的客户端...原创 2020-08-11 02:21:54 · 793 阅读 · 0 评论 -
FSimage源码剖析
FSImage文件主要是用来存储hdfs文件系统元数据信息(文件及目录结构 组成文件的块的信息 副本数量信息等),并且NameNode会定期将文件系统的命名空间元数据信息保存到fsimage文件中;以防止NameNode掉电或者进程崩溃;但是如果实时的将内存中的hdfs文件系统元数据信息保存同步到fsimage文件中,将会非常消耗资源且造成NameNode运行缓慢,所有NameNode会将命名空间的修改操作先保存在编辑日志editlogs中;然后定期合并fsimage和editlogs文件。...原创 2020-08-08 20:14:00 · 2840 阅读 · 0 评论 -
Hadoop 学习研究: 压缩实现与详解
Hadoop平台上的压缩详解原创 2017-05-06 12:31:14 · 431 阅读 · 1 评论 -
Hadoop 学习研究: hadoop中的join操作
Hadoop中的Join操作:考虑如下问题:假设有两个数据集:一个是城市名称编号,一个是日期和产出,考虑如何将这两个不同的数据集合二为一。或者有如下需求:获取某个城市在指定年份的产出等等问题。需要涉及到多个数据集或者不同的日志类型文件。连接操作的具体实现技术取决于数据集的规模大小和分区情况。reduce side join:假设要进行join的数据分原创 2017-05-27 20:22:25 · 2830 阅读 · 1 评论 -
Hadoop 学习研究: NameNode启动过程
NameNode启动过程:fsimage加载过程Fsimage加载过程完成的操作主要是为了:1. 从fsimage中读取该HDFS中保存的每一个目录和每一个文件2. 初始化每个目录和文件的元数据信息3. 根据目录和文件的路径,构造出整个namespace在内存中的镜像4. 如原创 2017-06-17 09:52:32 · 569 阅读 · 0 评论 -
MapReduce的模式、算法和用例
MapReduce的模式、算法和用例英文原文:MapReduce Patterns, Algorithms, and Use Cases在这篇文章里总结了几种网上或者论文中常见的MapReduce模式和算法,并系统化的解释了这些技术的不同之处。所有描述性的文字和代码都使用了标准hadoop的MapReduce模型,包括Mappers, Reduces, Combiner转载 2017-06-26 17:02:24 · 586 阅读 · 0 评论 -
Hadoop 学习研究: 深度剖析hdfs原理
Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。要理解HDFS的内部工作原理,首先要理解什么是分布式文件系统。1.分布式文件系统多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样解决某种问题,这样的系统我们称之为分布式系原创 2017-06-10 09:36:45 · 1378 阅读 · 0 评论 -
Hadoop 学习研究: hadoop中的排序操作(二次排序和全排序)
Hadoop中的排序操作:MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的。在我们实际的需求当中,往往有要对reduce输出结果进行各种类型的排序需求。在Hadoop中常用的排序操作分为以下几类:1. 自定义key值类型的键(实现WritableComparable接口)2. 实现框架中的比较器(job.setS原创 2017-06-03 11:05:02 · 1868 阅读 · 0 评论 -
Hadoop 学习研究:MapReduce shuffle过程剖详解及参数配置调优
MapReduce简介 在Hadoop MapReduce中,框架会确保reduce收到的输入数据是根据key排序过的。数据从Mapper输出到Reducer接收,是一个很复杂的过程,框架处理了所有问题,并提供了很多配置项及扩展点。一个MapReduce的大致数据流如下图:更详细的MapReduce介绍参考Hadoop MapReduce技术内幕Mapper的输出...原创 2017-05-20 22:43:44 · 7451 阅读 · 3 评论 -
Hadoop 学习研究: 自定义输入输出
自定义输入输出应用:在对数据需要进行一定条件的过滤和简单处理的时候可以使用自定义输入文件格式类。hadoop内置的输入文件格式类有:1)FileInputFormat这个是基本的父类,我们自定义就直接使用它作为父类;2)TextInputFormat这个是默认的数据格式类,我们一般编程,如果没有特别指定的话,一般都使用的是这个;key代表当前行数据距离文件开始的距离,value代码当前转载 2017-06-24 11:42:29 · 382 阅读 · 0 评论 -
HDFS远程连接 客户端权限错误
HDFS客户端的权限错误:Permission denied搭建了一个Hadoop的环境,Hadoop集群环境部署在几个Linux服务器上,现在想使用windows上的Java客户端来操作集群中的HDFS文件,但是在客户端运行时出现了如下的认证错误,被折磨了几天,问题终得以解决。以此文记录问题的解决过程。(如果想看最终解决问题的方法拉到最后,如果想看我的问题解决思路请从上向下看转载 2017-06-26 14:06:24 · 3624 阅读 · 1 评论 -
HiveQL中如何排查数据倾斜问题
如果某个key下记录数远超其他key,在join或group的时候可能会导致某个reduce任务特别慢。本文分析下join的场景。本例子SQL如下:查询每个appid打开的次数,需要排除掉作弊的imei。说明:表cheat_imei,7500万条,无大key,为作弊的imei。表imei_open_app,5亿6526万条,为每个imei打开的a原创 2017-08-10 22:29:53 · 7170 阅读 · 3 评论 -
FSImage和EditsLog合并过程
HDFS是一个分布式文件存储系统,文件分布式存储在多个DataNode节点上。一个文件存储在哪些DataNode节点的哪些位置的元数据信息(metadata)由NameNode节点来处理。随着存储文件的增多,NameNode上存储的信息也会越来越多。那么HDFS是如何及时更新这些metadata的呢? 在HDFS中主要是通过两个组件FSImage和EditsLog来实现metadata的转载 2017-09-03 19:21:45 · 1583 阅读 · 0 评论 -
HDFS源码分析数据块校验之DataBlockScanner
DataBlockScanner是运行在数据节点DataNode上的一个后台线程。它为所有的块池管理块扫描。针对每个块池,一个BlockPoolSliceScanner对象将会被创建,其运行在一个单独的线程中,为该块池扫描、校验数据块。当一个BPOfferService服务变成活跃或死亡状态,该类中的blockPoolScannerMap将会更新。 我们先看下DataBloc转载 2017-09-03 22:19:38 · 473 阅读 · 0 评论 -
Hadoop 学习研究: MR程序的基础编写和提交
Mapreduce初析 Mapreduce是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapreduce操作这个输入(input),通过本身定义好的计算模型,得到一个输出(output),这个输出就是我们所需要的结果。 我们要学习的就是这个计算模型的运行规则。在运行一个mapreduce计算任务时候,任务过程被分为两个阶段:map阶段和r原创 2017-05-14 10:37:22 · 889 阅读 · 0 评论 -
Hadoop 学习研究: 多Job任务和hadoop中的全局变量
MapReduce里 实现多个job任务 包含(迭代式、依赖式、链式):一、迭代式,所谓的迭代式,下一个执行的Job任务以上一个Job的输出作为输入,最终得到想要的结果。[java] view plain copyJobjob=newJob(newConfiguration(),“test”);JobConfj原创 2017-06-10 10:21:19 · 1371 阅读 · 0 评论 -
Hadoop 学习研究: 序列化与Writable
Hadoop序列化的分析与实现原创 2017-04-21 22:04:10 · 540 阅读 · 0 评论