1、介绍一下Hadoop的框架
存储hdfs,计算框架MapReduce,资源管理Yarn
2、简单说下HDFS的读写流程
a、客户端发送请求,调用DistributedFileSystem API的open方法发送请求到Namenode,获取block的位置信息,因为真正的block是存在Datanode节点上的,而
namenode里存放block位置信息的元数据。
b、Namenode返回所有block的位置信息,并将这些信息返回给客户端。
c、客户端拿到block的位置信息后调用FSDataInputStream API的read方法并行的读取block信息,block默认是3个副本,所以每个block只需要取一个副本就可以了。
d、datanode返回给客户端。
3、介绍下HDFS中实现数据容错的方式/机制
a、每个数据块3个副本,分布在不同的机架上
b、DataNode定期向NameNode发送心跳
4、介绍一下Yarn的框架结构
a、ResourceManager:负责整个集群的资源管理和调度
b、ApplicationMaster:负责应用程序相关事务,比如任务调度、监控和容错等。
5、介绍一下Yarn框架中的Job调度方式
6、说明一下MapReduce的框架结构
一个完整的mapreduce程序在分布式运行时有三类实例
a、MRAppMaster:负责整个程序的过程调度及状态协调
b、mapTask:负责map阶段的整个数据处理流程
c、ReduceTask:负责reduce阶段的整个数据处理流程。
7、简单说明一下MapReduce中的Shuffle过程
8、MapReduce的容错机制是如何实现的
9、MapReduce的二次排序机制是什么?
10、HDFS启动流程
第一步:启动namenode;
第二步:启动datanode;
11、MapReduce的生命周期/MapReduce的提交执行流程
MapReduce的提交执行流程
a、作业提交
client调用Job.waitForCompletion方法,向整个集群提交MapReduce作业(第1步)。新的作业ID(应用ID)由资源管理分配(第2步)。作业的client核实作业的输出,计算输入的split,将作业的资源(包括Jar包,配置文件,split信息)拷贝给HDFS(第3步)。最后,通过调用资源管理器的YarnClient.submitApplication()提交作业(第4步)
b、作业初始化
当资源管理器收到submitApplication()的请求时,就将该请求发给调度器(scheduler),调度器分配container,然后资源管理器在该container内启动应用管理器进程,由节点管理器监控(第5a和5b步)
MapReduce作业的应用管理器是一个主类为MRAppMaster的Java应用,其通过创造一些bookkeeping对象监控作业的进度,得到任务的进度和完成报告(第6步),然后其通过分布式文件系统得到由客户端计算好的输入split(第7步),然后为每个输入split创建一个map任务,根据mapreduce,job.reduces创建reduce任务对象。
c、任务分配
如果作业很小,应用管理器会选择在其自己的JVM中运行任务
如果不是小作业,那么应用管理器向资源管理器请求container来运行所有的map和reduce任务(第8步)。这些请求时通过心跳来传输的,包括每个map任务的数据位置,比如存放输入split的主机名和机架(rask),
d、任务运行
当一个任务由资源管理器的调度器分配给一个container后,应用管理器通过联系节点管理器来启动container(第9a步和9b步)。任务由一个主类为YarnChild的Java应用执行,在运行任务之前首先本地化任务需要的资源,比如作业配置,JAR文件,以及分布式缓存的所有文件(第10步)。最后,运行map或reduce任务(第11步)
YarnChild运行在一个专用的JVM中,但是YARN不支持JVM重用。
e、进度和状态更新
YARN中的任务将其进度和状态(包括counter)返回给应用管理器,客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。
f、作业完成
除了向应用管理器请求作业进度外,客户端每5分钟都会通过调用waitForCompletion()方法来检查作业是否完成,时间间隔可以通过mapreduce.client.completion.pollinterval来设置. 作业完成之后, 应用管理器和container会清理工作状态, OutputCommiter的作业清理方法也会被调用. 作业的信息会被作业历史服务器存储以备之后用户核查。