Hadoop框架详解Hadoop项⽬主要包括以下四个模块
◆ Hadoop Common:
为其他Hadoop模块提供基础设施 ◆ Hadoop HDFS:
⼀个⾼可靠、⾼吞吐量的分布式⽂件系统 ◆ Hadoop MapReduce:
⼀个分布式的离线并⾏计算框架 ◆ Hadoop YARN:
⼀个新的MapReduce框架,任务调度与资源管理
Apache Hadoop起源
◆Apache Lucene
开源的⾼性能全⽂检索⼯具包 ◆Apache Nutch
开源的Web搜索引擎 ◆Google三⼤论⽂
MapReduce/GFS/BigTable ◆Apache Hadoop ⼤规模数据处理
⼀张图了解分布式的好处(数据量达到500G就可以考虑使⽤⼤数据处理了)
HDFS(HDFS即Hadoop Distributed File System分布式⽂件系统:主要是分布式存储数据)
——————-服务功能
◆NameNode(NN)是主节点,存储⽂件的元数据如⽂件名,⽂件⽬录结构,⽂件属性(⽣成时间,副本数,⽂件权限),以及每个⽂件的块列表和块所在DataNode等。
◆DataNode(DN)在本地⽂件系统存储⽂件块数据,以及块数据的校验和。
◆Secondary NameNode(SNN) ⽤来监控HDFS状态的辅助后台程序,每隔⼀段时间获 取HDFS元数据的快照。
NameNode
◆Namenode 是⼀个中⼼服务器,单⼀节点(简化系统的设计和实现),负责管理⽂件系统的名字空间(namespace)以及客户端对⽂件的访问。
◆⽂件操作,NameNode 负责⽂件元数据的操作,DataNode负责处理⽂件内容的读写请求,跟 ⽂件内容相关的数据流不经过NameNode,只会询问它跟那个DataNode联系,否则 NameNode会成为系统的瓶颈。
◆副本存放在哪些DataNode上由 NameNode来控制,根据全局情况做出块放置决定,读取⽂件时NameNode尽量让⽤户先读取最近的副本,降低带块消耗和读取延时;
◆Namenode 全权管理数据块的复制,它周期性地从集群中的每个Datanode接收⼼跳信号和块状态报告(Blockreport)。接收到⼼跳信号意味着该Datanode节点⼯作正常。块状态报告包含了⼀个该Datanode上所有数据块的列表。
DataNode
◆⼀个数据块在DataNode以⽂件存储在磁盘上,包括两个⽂件,⼀个是数据本⾝,⼀个是元数据包括数据块的长度,块数据的校验和,以及时间戳 ;
◆DataNode启动后向NameNode注册,通过后,周期性(1⼩时)的向NameNode上报所有的块信息;
◆⼼跳是每3秒⼀次,⼼跳返回结果带有NameNode给该DataNode的命令如复制块数据到另⼀台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode 的⼼跳,则认为该节点不可⽤;◆集群运⾏中可以安全加⼊和退出⼀些机器。
⽂件
◆⽂件切分成块(默认⼤⼩128M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在⽂件⽣成时指定(默认3,是在hdfs-
site.xml中配置的);
◆NameNode 是主节点,存储⽂件的元数据如⽂件名,⽂件⽬录结构,⽂件属性(⽣成时间,副本数,⽂件权限),以及每个⽂件的块列表以及块所在的DataNode等等;
◆DataNode 在本地⽂件系统存储⽂件块数据,以及块数据的校验和。
◆可以创建、删除、移动或重命名⽂件,当⽂件创建、写⼊和关闭之后不能修改⽂件内容。
MapReduce计算框架(基于磁盘IO进⾏迭代,开销较⼤)
◆将计算过程分为两个阶段:Map和Reduce Map阶段并⾏处理输⼊数据 ;
Reduce阶段对Map结果进⾏汇总 ;
◆ Shuffle链接Map和Reduce两个阶段(Shuffle通俗的理解就是重新洗牌,打乱原有顺序) Map Task将数据写到本地磁盘 ;
Reduce Task从每个Map Task上读取⼀份数据 ;◆ 仅适合离线批处理
具有很好的容错性和扩展性 ;适合简单的批处理任务 ;◆ 缺点明显:
启动开销⼤,过多使⽤磁盘导致效率低下等;
该slave节点上有多少个MapTask运⾏,取决于该slave节点分配到了多少块(⼀般默认128M);slave的cpu是⼏核的会影响MapTask是单线程还是多线程,及其运⾏效率;如果它出现问题,挂掉,会将没运⾏完的块交给其它slave节点重新运算;
、、、、、、、
⼤数据学习交流群: 让我我们⼀起学习⼤数据
【测试中如果遇到没有输出结果,只有输出⽬录的情况;那么很可能是犯了⼩错误;⽐如:Mapper中的输⼊键值必须是LongWriteable和Text;outKey和outValue的类型不对,或者没有初始化;Driver类中Job任务没提交;还有就是读取的⽂件中的数据在map中字段没有正确对应;数据中有的字段是脏数据,需要处理;导致匹配不成功,从⽽输出失败。 】
YARN服务组件(主要是负责硬件资源的合理调⽤)
◆ YARN 总体上仍然是Master/Slave 结构,在整个资源管理框架中,ResourceManager 为Master,NodeManager 为Slave。 ◆ ResourceManager 负责对各个NodeManager 上的资源进⾏统⼀管理和调度;
◆ 当⽤户提交⼀个应⽤程序时,需要提供⼀个⽤以跟踪和管理这个程序的ApplicationMaster(主管进程),它负责向ResourceManager 申请资源,并要求NodeManger 启动可以占⽤⼀定资源的任务。
◆ 由于不同的ApplicationMaster 被分布到不同的节点上,因此它们之间不会相互影响。
ResourceManager
◆ 全局的资源管理器,整个集群只有⼀个,负责集群资源的统⼀管理和调度分配。 ◆ 功能
- 处理客户端请求
- 启动/监控ApplicationMaster - 监控NodeManager - 资源分配与调度
NodeManager
◆ 整个集群有多个,负责单节点资源管理和使⽤ ◆ 功能:
- 单个节点上的资源管理和任务管理
- 处理来⾃ResourceManager的命令 (下⽂简称RM)- 处理来⾃ApplicationMaster的命令
◆ NodeManager管理抽象容器,这些容器代表着可供⼀个特定应⽤程序使⽤的针对每个节点的资源。 ◆ 定时地向RM汇报本节点上的资源使⽤情况和各个Container的运⾏状态
ApplicationManager
管理⼀个在YARN 内运⾏的应⽤程序的每个实例 ◆ 功能
数据切分
为应⽤程序申请资源,并进⼀步分配给内部任务任务监控与容错
◆ 负责协调来⾃ResourceManager的资源,幵通过NodeManager监视容器的执⾏和资源使⽤(CPU、内存等的资源分配)。
Container(容器)
◆ YARN中的资源抽象,封装某个节点上多维度资源,如内存、CPU、磁盘、⽹络等,当AM向RM申请资源时,RM向AM返回的资源便是⽤Container表⽰的。
◆ YARN 会为每个任务分配⼀个Container,且该任务只能使⽤该Container中描述的资源。 ◆ 功能
对任务运⾏环境的抽象描述⼀系列信息任务启动命令任务运⾏环境
客户端链接yarn集群进⾏分布式计算(都是通过端⼝RPC链接运⾏):----------------------------------1、client---->master(申请运⾏job,链接的是RM进程)
2、master---->client(返回jobId和资源地址:提交的jar⽂件存放地址,配置信息conf地址,每个副本的spilt分配信息)3、client---->slave03(根据资源地址链接slave节点,上传资源--job.jar/job.conf/job.spilt)4、client---->master(反馈上传资源完成)
5、master---->slave03(读取之前上传的资源信息,根据资源信息⽣成job对象,并将job对象放⼊job队列--master缓存区(job1,job2....))------资源分配过程
6、slave01--->master(slave主动链接master去领取⾃⼰的job,之间⽤NodeManage==ResourceManage进程)7、slave01--->slave03(根据领取的jobId,从资源地址下载job资源信息到本地(尤其是job.jar))8、slave01--->master(反馈资源下载完成,所有slave都要反馈)--------master启动MapReduce进程
9、master在slave中寻找负载清闲的节点(例slave02),并在其上启动MRAPPMaster进程,同时slave02上会出现MapReduce进程10、slave02---->master(申请运⾏MapReduce进程)---------master从此开始等待跟踪Task的运⾏过程
11、master---->slave02(返回Task(⼀个job有多个Task,⼀个Task就是⼀个进程)与地址的映射表--告知哪些节点运⾏MapTask,哪些运⾏ReduceTask)
12、slave02--->slave03(链接相应的slave并在其上启动相应的Task)--------Task进程跑完会将YarnChild进程结束信息反馈给master
13、Task----->master(反馈Task进程(名字叫:YarnChild)运⾏完毕,所有进程都要反馈)-------都反馈完毕
14、slave02--->master(反馈job运⾏完成)--------master关闭MapReduce进程
15、master--->client(反馈job运⾏结束--1、环节出错,job运⾏失败,2、成功运⾏结束)
YARN资源管理
◆ 资源调度和资源隔离是YARN作为⼀个资源管理系统,最重要和最基础的两个功能。资源调度由ResourceManager完成,⽽资源隔离由各个NM实现。
◆ ResourceManager将某个NodeManager上资源分配给任务(这就是所谓的“资源调度”)后,NodeManager需按照要求为任务提供相应的资源,甚⾄保证这些资源应具有独占性,为任务运⾏提供基础的保证,这就是所谓的资源隔离。
◆ 当谈及到资源时,我们通常指内存,CPU和IO三种资源。Hadoop YARN同时⽀持内存和CPU两种资源的调度。
◆ 内存资源的多少会会决定任务的⽣死,如果内存不够,任务可能会运⾏失败;相⽐之下,CPU资源则不同,它只会决定任务运⾏的快慢,不会对⽣死产⽣影响。
参考⽂章:1、
因篇幅问题不能全部显示,请点此查看更多更全内容