大数据面试系列之——Hadoop

Hadoop的三个核心:
HDFS(分布式存储系统)
MapReduce(分布式计算系统)
YARN (分布式资源调度)

一.Hadoop集群的几种搭建模式
1.单机模式:直接解压安装,不存在分布式存储系统
2.伪分布式:NameNode和DataNode安装于同一个节点,无法体现分布式处理的优势。
3.完全分布式:一个主节点,多个从节点,存在如果主节点宕机,集群就无法使用的缺点。
4.高可用模式:多个主节点,多个从节点,同一时间只有一个主节点对外服务,当提供服务的主节点出现故障时,其他任意一个主节点可以代替它,必须保持所有主节点实时数据一致,缺点主节点压力大容易出现宕机。
5.联邦模式:多个主节点,多个从节点,同一时间多个主节点分别负责部分从节点对外提供服务。
实际生产中超大集群一般采用高可用和联邦模式结合的方式部署。

二.HDFS的心跳机制
当NameNode和DataNode启动后,他们会保持通讯,DataNode会定时发送心跳报告到NameNode(默认时间间隔是3秒),以便让NameNode随时了解DataNode 的健康状态,当NameNode连续10次(默认值)未收到某一个DataNode的心跳报告时,NameNode会主动向DataNode发送检查,容许发送2次检查,每次检查默认时间是300秒,当2次检查都没有结果时断定这个DataNode节点宕机。
默认断定一个DataNode节点宕机的时间为103s+25min=630s

三.HDFS的机架感知策略
默认副本为3个,第一个副本放在本地节点存储,第二个副本放在和第一个副本不同机架任意节点,第三个副本放在和第二同机架的其他任意节点,这样既可以保证本地访问数据的速率,还可以尽可能保证数据的副本的安全。

四.HDFS的上传(写)下载(读)机制
上传机制
1.客户端(client)向NameNode发送文件上传请求;
2.NameNode会进行一系列检查,如用户权限、父目录是否存在、文件是否重名,成功则会为文件创建一个记录,否则向客户端抛出异常
3.NameNode检查通过,客户端(client)开始切分文件(以128M一个block,将文件切分成若干个block),客户端(client)向NameNode发送上传block1的请求,NameNode收到上传文件信息后,查看DataNode信息,将确定的DataNode存储节点信息反馈到客户端(client)。
4.客户端(client)拿到DataNode信息后,与最近的DataNode建立pipeline(通道),pipeline建立成功后开始以每64kb一个数据包的形式到缓存,再从缓存到DataNode的本地文件系统,然后数据包从这个DataNode备份到另一个DataNode,依次直到所有备份完成。
5.当整个block1上传完毕后,DataNode会通知客户端(client)block1上传成功。
6.剩余blocks重复3.4.5步骤直至整个文件上传完毕。
7.当文件上传完毕后客户端(client)会 通知NameNode,NameNode更新元数据。

下载机制
1.客户端(client)向NameNode发送文件下载请求。
2.NameNode进行权限、文件是否存在等一系列检查,检查未通过则客户端直接抛出错误,检查通过后NameNode向客户端发送文件的存储的位置、大小、副本数等信息。
3.在接收到NameNode发送的信息后,客户端会根据最近原则选择DataNode,下载第一个block,下载完成后会做CRC校验,若下载失败则客户端会向NameNode汇报,从另一个DataNode下载这个block,并且NameNode会记录这个DataNode,以后的下载和上传避免在这DataNode上执行。
4.依次成功下载完其他block后,客户端(client)会向NameNode反馈下载完成。

四.简单说下MapReduce的编程模型
首先map task会从本地文件系统读取数据,转换成key-value形式的键值对集合,使用的是hadoop内置的数据类型,如Text,Longwritable等。
将键值对集合输入mapper进行业务处理过程,将其转化成需要的key-value再输出。
之后会进行一个partition分区操作,默认使用的是hashpartitioner,可以通过重写hashpartitioner的getPartition方法来自定义分区规则。
之后会对key进行sort排序,grouping分组操作将相同key的value合并分组输出,在这里可以使用自定义的数据类型,重写WritableComparator的Comparator方法来自定义排序规则,重写RawComparator的compara方法来自定义分组规则。
之后进行一个combiner归约操作,就是一个本地的reduce预处理,以减小shuffle,reducer的工作量。
Reduce task会用过网络将各个数据收集进行reduce处理,最后将数据保存或者显示,结束整个job。

五.MapReduce和yarn的详细工作过程
这篇文章写的很详细,供参考。
https://segmentfault.com/a/1190000020617543?utm_source=tag-newest

六.运行Hadoop集群时Hadoop启动时的需要启动的进程有哪些及其作用
1.NameNode它是hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有metadata。
2.SecondaryNameNode它不是namenode的冗余守护进程,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。
3.DataNode它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。
4.ResourceManager(JobTracker)JobTracker负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。
5.NodeManager(TaskTracker)执行任务

七.YARN的组成部分及各部分的作用
YARN是Hadoop2.0版本新引入的资源管理系统,目前YARN支持多种计算框架如MapReduce Storm Spark Flink等
1.ResourceManager
负责整个集群的资源的管理和分配
具体作用:
1)处理客户端请求
2)启动或监控ApplicationMaster
3)监控NodeManager
4)资源的监控和调度
2.ApplicationMaster(AM)
ApplicationMaster 管理在YARN内运行的每个应用程序实例。ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)
具体作用:
1)负责数据的切分
2)为应用程序申请资源并分配给内部的任务
3)任务的监控与容错
3.NodeManager(NM)
NodeManager管理YARN集群中的每个节点。NodeManager 提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康
具体作用:
1)管理单个节点上的资源
2)处理来自ResourceManager的命令
3)处理来自ApplicationMaster的命令
4.Container
Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源
具体作用:
1)对任务运行环境进行抽象,封装CPU、内存等多维度的资源以及环境变量、启动命令等任务运行相关的信息

发布了27 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/I_Demo/article/details/103727266
今日推荐