hdfs与yarn(mapreduce)问题汇总

1 篇文章 0 订阅

hdfs与yarn(mapreduce)问题汇总

搭建集群准备?

1.配置静态ip 2.配置hostname 3.配置主机名IP和映射关系 4.用root操作Hadoop
5.关闭防火墙 6.安装jdk 7.配置ssh免密 8.设置服务器时间同步

Hadoop是什么?

Hadoop利用服务器集群,根据用户的自定义服务逻辑,对海量数据进行分布式处理

Hadoop四大模块三大核心三个服务

模块:Common(Hadoop模块的通用工具类) HDFS(分布式文件系统) yarn(运算资源调度系统) MapReduce(分布式运算编程框架)
三大核心:HDFS,yarn,MapReduce
HDFS三个服务
1.namenode metadata 元数据
2.secondary namenode
3.datanode

什么是HDFS?

HDFS设计目标
1.自动快速检测应对硬件错误
2.流式访问数据
3.移动计算比移动数据本身更划算
4.简单一致性模型
5.异构平台可移植
特点:
1.高可靠性
2.高扩展性
3.高效性
4.高容错性
特性:
1.HDFS中的文件在物理上是分块储存 128M
2.HDFS文件系统会给客户端提供统一的抽样目录数,客户端通过路径来访问文件
3.目录结构及文件分块信息(元数据)的管理由NameNode节点承担
4.文件的各个block的储存管理由NameNode承担
5.HDFS 一次写入,多次读出,不支持文件的修改
为什么不适合做网盘应用:不便修改,延迟大,网络开销大,成本高

HDFS的设计思想

1)大文件拆成块,分在多台机器上存储(解决处理数据时的IO瓶颈)
2)块均匀分布(解决负载均衡问题)

HDFS的工作机制?

1.HDFS集群分为两大角色:NameNode,DataNode
2.NameNode负责管理整个文件系统的元数据
3.DataNode负责管理用户的文件的数据块
4.文件分块后分布式储存在若干个DataNode上
5.每个文件可以有多个副本,并存放在不同的DataNode上
6.DataNode会定期向NameNode发送心跳,汇报自身保存的文件信息,NameNode会负责保持文件的副本数量
7.HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是向NameNode申请进行

HDFS的优缺点:

优点:
高容错性:数据自动保存多个副本,副本丢失后,会自动恢复。
(2)适合批处理:移动计算而非数据、数据位置暴露给计算框架。
(3)适合大数据处理:GB、TB、甚至PB级数据、百万规模以上的文件数量,1000以上节点规模。
(4)流式文件访问:一次性写入,多次读取;保证数据一致性。
(5)可构建在廉价机器上:通过多副本提高可靠性,提供了容错和恢复机制。
缺点:
(1)不适合低延迟数据访问:比如毫秒级、低延迟与高吞吐率。
(2)小文件存取:占用NameNode大量内存,寻道时间超过读取时间。
(3)并发写入、文件随机修改:一个文件只能有一个写者,仅支持append

HDFS中的读写流程?

写流程:
1.向NameNode请求上传文件,NameNode检查父目录和文件是否存在
2.NameNode返回是否可以上传
3.client接收到NameNode的可以上传的响应,之后请求第一个block该传输到哪些DataNode服务器上
4.NameNode返回 n 个DataNode服务器
5.client请求 n 台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将真整个pipeline建立完成,逐级返回客户端
6.client开始向A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给下一个,一个一个传下去,A每传一个packet(64kb)会放入一个应答队列等待datanode 确认无误
7.当一个block传输完成之后,client在此block请求NameNode上传第二个
读流程:
1.向NameNode通信查询元数据,找到文件所在的DataNode服务器
2.挑选一台DataNode(就近,然后随机)服务器,请求socket流
3.DataNode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
4.客户端以packet为单位接受,先在本地缓存,然后写入目标文件

HDFS的命令?

HDFS中NameNode的工作机制?NameNode职责?

NameNode职责:
1.负责客户端请求响应
2.元数据的管理,查询,修改
3.管理DataNode的状态
工作机制:

  1. namenode节点每隔一定时间请求secondaryNamenode合并操作
  2. secondaryNamenode请求namenode进行edits.log的滚动,这样新的编辑操作就能够进入新的文件中
  3. secondaryNamenode从namenode中下载fsImage和edits.log
  4. secondaryNamenode进行fsImage和edits.log的合并,成为fsImage.checkpoint文件
  5. namenode下载合并后的fsImage.checkpoin文件
  6. 将fsImage.checkpoint和edits.new命名为原来的文件名(这样之后fsImage和内存中的元数据只差edits.new)

元数据的管理和储存机制?

管理:采用三种储存形式:
内存元数据
磁盘元数据镜像文件
数据操作日志文件(可通过日志运算出元数据)
储存机制:
A:内存中有一份完整的元数据(内存meta data)
B:磁盘中有一个准完整的元数据镜像(fsimage)
C:用于衔接内存metadata 和持久化元数据镜像fsimage之间的操作日志edits文件

secondary NameNode的工作机制?职责

职责:合并NameNode的edit logs到fsimage文件
工作机制:
1.当达到checkPoint条件的时候,NameNode请求checkpoint
2.secondary NameNode响应请求
3.namenode进行回滚日志文件
4.secondary NameNode通过HTTP下载NameNode中的edits和fsimage到secondary NameNode
5.将fsimage和edits读取到内存中进行合并为fsimage.checkpoint
6.将数据dump到磁盘
7.HTTP上传文件到NameNode
8.NameNode对fsimage.checkpoint进行校验,成功之后进行改名

DataNode运行机制,职责

一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳
DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode 的心跳,则认为该节点不可用。
集群运行中可以安全加入和退出一些机器

  1. 管理附加到他们运行节点的储存,并允许用户数据储存在文件中
  2. 在内部,文件 被分割成一个或多个Block,并且这些块被存储在一组DataNode中
  3. 负责提供来自文件系统客户端的读取和写入请求
  4. 执行块创建,删除
  5. 启动DN进程的时候回向NN汇报Block信息
  6. 通过向NameNode发送心跳保持与之联系(5秒一次),如果NameNode没有收到DataNode的心跳,则认为DataNode已经丢失,并复制其上的Block到其他其他DataNode上

三大服务启动过程?

NameNode 启动过程

(1)加载镜像文件,还原了checkpoint时间节点前的元数据(包含目录结构,文件大小,块的大小,块的id等等信息),不包含块的存储位置
(2)加载edits文件,还原了checkpoint时间节点到集群停止的元数据,不包含块的存储位置。(至此namenode还原的元数据唯一缺失的就是块的存储位置)
(3)blockreport阶段,datanode启动,向namendoe汇报自己所管理的块及块的id,namenode根据块的ID还原块的存储位置
(4)在blockreport结束后,集群会判断,datanode的启动数量(可设置,默认为0),丢失的块的占比(可设置,默认0.999f)
是否满足退出安装模式的条件,如果满足,30秒后退出安全模式。在安全模式下namenode会删除多余的块
(副本数为3,结果实际存储4个。ps:这种情况发生在datanode宕机,集群把宕机的datanode管理的块进行了复制,而宕机的datanode又重新启动了)
还会复制低于副本数的块。
DataNode 启动过程
向NameNode注册、发送Block Report

HDFS副本复制策略?

副本1:同client节点 副本2:不同机架的节点 副本3:同第二个副本的机架中的不同节点

secondary NameNode解决了什么问题?

将SecondaryNameNode的fsimage和edits文件拷贝到NameNode中去可以解决NameNode的宕机

元数据的checkpoint的流程?

每隔一段时间,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)
触发时机:默认一小时进行checkpoint或者edits中的事务条数达到100万就会触发一次合并
1.从SecondaryNameNode节点通知NameNode将要进行CheckPoint
2.NameNode切换生成的日志文件edits,以后的日志都写到新的日志文件中。
3.从SecondaryNameNode节点从节点下载fsimage文件及旧的日志文件,fsimage文件只有第一次下载,以后只需要传输edits日志文件
4.SecondaryNameNode节点将fsimage文件加载到内存中,并将日志文件与fsimage的合并,然后生成新的fsimage.ckpt文件。
5.从SecondaryNameNode节点将新的fsimage文件http传给NameNode节点
6.NameNode节点可以将旧的fsimage文件及旧的日志文件切换为新的fsimage和edit日志文件并更新fstime文件,写入此次checkpoint的时间。

什么情况下会进入安全模式,安全模式的解决办法

块的数量低于阀值,datanode启动数量不够都会进入安全模式
(1)调低阀值
hdfs-site.xml中
dfs.namenode.safemode.threshold-pct
0.999f
(2)强制离开
hdfs dfsadmin -safemode leave
(3)重新格式化集群
(4)修复损坏的块文件

HDFS的可靠性策略

1)文件完整性
在文件建立时,每个数据块都产生校验和,校验和会保存在.meta文件内;
客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏;
如果正在读取的数据块损坏,则可以继续读取其它副本。NameNode标记该块已经损坏,然后复制block达到预期设置的文件备份数;
DataNode 在其文件创建后三周验证其checksum。
2)网络或者机器失效
(1)副本冗余
(2)机架感知策略(副本放置策略)
(3)心跳机制策略
3)namenode挂掉
(1)主备切换(高可用)
(2)镜像文件和操作日志磁盘存储
(3)镜像文件和操作日志可以存储多份,多磁盘存储
4)其他机制
(1)快照(和虚拟机快照意义相同,保存了系统某一时刻的影像,可以还原到该时刻)
(2)回收站机制
(3)安全模式

yarn?工作流程?

组件:Client
ResourceManager、Application Master
NodeManager、Container
1.启动ApplicationMaster 2.由ApplicationMaster创建一个应用程序,为他申请资源,并监控整个运行过程
3.在整个工作流程当中,ResourceManager和NodeManager都是通过心跳保持联系的,NodeManager会通过心跳信息向ResourceManager汇报自己所在节点的资源使用情况。

rm?appMaster?nodemaneger?

1.ResourceManager(RM):主要接收客户端任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)。
2.NodeManager:主要是节点上的资源管理,启动Container运行task计算,上报资源、container情况给RM和任务处理情况给AM。
单节点上的资源管理和任务管理,处理来自rm的命令,处理来自appMaster的命令
3.ApplicationMaster:主要是单个Application(Job)的task管理和调度,向RM进行资源的申请,向NM发出launch Container指令,接收NM的task处理状态信息
数据切分,为应用程序申请资源,并进一步分配给内部任务,任务监控与容错
resourceManager的工作职责
资源调度
资源监视
application提交

ApplicationMaster与ResourceManager的交互

1.用户向YARN ResourceManager提交应用程序,RM收到提交申请后,先向资源调度器申请用以启动AM 的资源,待申请到资源后,再由ApplicationMasterLauncher与对应的NodeManager通信,从而启动应用程序的ApplicationMaster。
2.ApplicationMaster启动完成后,ApplicationMasterLaucher会通过事件的形式,将刚刚启动的Application Master注册到AMLiveMonitor,以启动心跳监控。
3.ApplicationMaster启动后,先向ApplicatinMaterService注册,并将自己所在host、端口号等信息汇报给它。
4.AM运行过程中,周期性地向ApplicationMaserService回报心跳信息(信息中包含想要申请的资源描述)。
5.ApplicationMasterService每次收到ApplicationMaster心跳信息好后,将通知AMLivelinessMonitor更新应用程序的最新回报心跳的时间。
6.应用程序运行完成后,AM向AMService发送请求,注销自己。
7.AMService收到注销请求后,标注应用程序运行状态完成,同时通知AMLivelinessMonitor移除对它的心跳监控。

Hadoop high available概念?

Hadoop HA机制?

通过双NameNode消除单点故障
双NameNode协调工作的要点:
1.元数据管理方式的改变:
内存中各自保存一份元数据
Edits日志只能有一份,只有active状态的NameNode节点可以做写操作
两个NameNode都可以读取edits
共享的edits放在一个共享储存中管理(qjournal和NFS两个主流实现)
2.需要一个状态管理模块:
实现了一个zkfc,常驻在每个NameNode所在的节点
每个zkfc负责监控自己所在节点,利用zk进行状态标识,当需要状态切换时,由zkfc来负责切换
切换时需要防止brain split现象的发生

Hadoop HA的NameNode之间是如何分工合作的?

Hadoop HA中的NameNode如何处理元数据?如何切换状态active,standby?

hadoop HA 的启动顺序?

1、启动zookeeper集群(自己实现一个批量启动zk的脚本)
2、启动qjounalnode(在3台机器上都要启动)
/usr/local/hadoop-2.7.1/sbin/hadoop-daemon.sh start journalnode
3、格式化hdfs hdfs namenode -format
4、单机启动namenode hadoop-daemon.sh start namenode
5、数据同步
1、scp -r /usr/local/hadoopdata/dfs /
2、hdfs namenode -bootstrapStandby hadoop01
6、格式化zkfc hdfs zkfc -formatZK
7、启动hdfs集群 start-dfs.sh
8、启动yarn集群 start-yarn.sh

Hadoop HA 的命令和状态切换?

Uber?

动态增删节点,时间同步?

安全模式与数据恢复

hdfs dfsadmin -safemode enter/leave
hdfs fsck -

Zookeeper ?

一个分布式协调服务,就是用户的分布式应用程序提供协调服务,为其他的分布式程序提供服务,本身就会分布式程序(半数存活就能提供服务)
主要提供了两个功能:
1.管理,储存,读取用户程序提交的数据
2.为用户提供数据节点监听服务

特性

  1. 一个leader,多个follower
  2. 全局数据一致性,每个server都保存一份相同的数据,client不论连接哪一台服务器,都可以得到相同的数据
  3. 分布式读写,更新请求转发,由leader实时数据更新的写操作
  4. 更新请求按顺序执行,来自同一个client的更新请求会按照其发送的顺序来执行
  5. 数据更新的原子性:一次数据要么成功,要么失败
  6. 实时性:在一定时间范围内,client能读到最新的数据

zookeeper的节点类型

PRESISTENT PRESISTENT_SEQUENTIAL 永久/永久且序列化
EPHEMARAL EPHEMERAL_SEQUENTIAL 临时/临时且序列化
监听器的是时间就是一次数据改变的时间,一个监听器只能监听一次数据的改变
zkServer.sh start
zkCli.sh -ls /
zkCli.sh -get / 获取znode的数据
zkCli.sh -ls / watch对一个节点的子节点变化时间注册了监听
zkCli.sh -get / watch 对一个节点的数据内容变化时间注册了监听

Zookeeper 初始化,选举

初始化:
选举机制:
逻辑时钟,ID大小,数据版本

zookeeper的应用场景

统一的命名空间
共享配置
分布式锁
解决单点故障

zookeeper分布式锁的实现原理

在zk上创建永久节点server,所有要访问资源的客户端在永久节点server下注册临时有序节点,并且监听自己前一个节点。
序列号最小的获得锁可以访问资源,访问结束,断开连接,注册的临时节点被删除,他的下一个节点通过监听能够知道,
此时节点序列号变为最小,获取到了锁,可以访问资源。

MapReduce提交job的流程

1.client提交任务到rm
2.rm将job放入等待队列,响应client,返回jobid,path
3.client将待处理的资源上传到HDFS上,并进行分片
4.rm给nodemanager分配内存等资源,之后nodemanager去HDFS将jar包取出
5.客户端发送命令让nodemanager启动AppMaster,想rm发送申请maptask,和启动几台nodemanager,需要的内存的请求
6.在rm的job中有描述文件记录了需要参与的节点信息,nodemanager向rm发送心跳,查询分配到的任务,拿出rm分配的任务列表
7.分配到待处理列表的nodemanager去HDFS将jar包取出
8.之后appTask向nodemanager发送指令,让其启动任务开始mapTask任务,APPMaster解析分片信息
9.APPTask监控状态信息,处理完一个片就反馈信息给reduceMaster
10.reduceMaster接受到appMaster发送的信息,收集信息后开始计算

PPT上的讲解:

下面简单介绍一下提交一个job的处理过程,
1、client submit一个job到RM,进入RM中的Scheduler队列供调度
2、RM根据NM汇报的资源情况(NM会定时汇报资源和container使用情况),请求一个合适的NM launch container,以启动运行AM
3、AM启动后,注册到RM上,以使client可以查到AM的信息,便于client直接和AM通信
4、AM启动后,根据Job 相关的split的task情况,会和RM协商申请container资源
5、RM分配给AM container资源后,根据container的信息,向对应的NM 请求launch container
6、NM启动container运行task,运行过程中向AM汇报进度状态信息,类似于MRv1中 task的汇报;同时NM也会定时的向RM汇报container的使用情况。
7、在application(job)执行过程中,client可以和AM通信,获取application相关的进度和状态信息。
8、在application(job)完成后,AM通知RM clear自己的相关信息,并关闭,释放自己占用的container。

MR的shuffle流程

1.maptask执行,收集maptask的输出数据,将数据写入环形缓冲区中,记录起始偏移量
2.环形缓冲区默认大小为100M,当数据达到80M时,记录终止偏移量。
3.将数据进行分区(默认分组根据key的hash值%reduce数量进行分区),分区内进行快速排序
4.分区,排序结束后,将数据刷写到磁盘(这个过程中,maptask输出的数据写入剩余20%环形缓冲区,同样需要记录起始偏移量)
5.maptask结束后将形成的多个小文件做归并排序合并成一个大文件
6.当有一个maptask执行完成后,reducetask启动
7.reducetask到运行完成maptask的机器上拉取属于自己分区的数据
8.reducetask将拉取过来的数据“分组”,每组数据调用一次reduce()方法
9.执行reduce逻辑,将结果输出到文件

列举MR中可干预的组件(详细说明各组件的原理,ps:combine)

combine:相当于在map端(每个maptask生成的文件)做了一次reduce
partition:分区,默认根据key的hash值%reduce的数量,自定义分区是继承Partitioner类,重写getPartition()分区方法。自定义分区可以有效的解决数据倾斜的问题
group:分组,继承WritableComparator类,重写compare()方法,自定义分组(就是定义reduce输入的数据分组规则)
sort:排序,继承WritableComparator类,重写compare()方法,根据自定义的排序方法,将reduce的输出结果进行排序
分片:可调整客户端的blocksize,minSize,maxSize

分片与分块的区别?

分片是逻辑概念,分片有冗余
分块是物理概念,是将数据拆分,无冗余

AppMaster是属于yarn的进程还是属于MR的进程,AppMaster的生命周期,AppMaster的工作内容

AppMaster属于resourcemanager的进程,由resourcemanager分配container然后进行启动的。
job提交完成,resourcemanager分配container然后进行启动AppMaster,reducetask执行完成AppMaster将状态报告给resourcemanager后退出
AppMaster:计算任务所需资源,向resourcemanager申请资源,启动maptask,reducetask,监控maptask和reducetask的运行状态

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值