Hadoop面试知识点

一.Hadoop

1.Hadoop 主要有以下几个优点

(1)高扩展性:Hadoop支持集群节点的动态增加,方便集群的扩展 ,可以根据需要扩展到上千节点
(2)高容错性:Hadoop能够自动保存数据的多个副本,当有集群数据丢失时,能自动实现数据备份。
(3)高效性:Hadoop可以充分地利用网络、磁盘I/O资源和备份数据实现文件的快速读写。
(4)高可靠性:正在执行的子任务由于某种原因挂掉的话,Hadoop可以自动让其他节点继续执行该子任务,不影响整个任务的执行
(5)低成本:Hadoop集群不用部署在专用服务器上,只需部署在通用的计算机中即可;而且Hadoop生态系统绝大部分都是开源的,用户很容易拿来开发使用

二.HDFS

1.HDFS架构

一个HDFS集群是由一个NameNode(Master)节点和若干个DataNode(Slave)节点组成。
(1)NameNode节点作为主服务器,管理整个文件系统的命名空间和客户端对文件的访问操作,比如打开、关闭、重命名文件或目录等,同时它也负责数据块到具体DataNode的映射
(2)SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息,周期性保存 NameNode的元数据(包括 fsimage和edits)
(3)DataNode管理存储的数据,处理客户端的文件读写请求,并在NameNode的统一调度下进行数据块的创建、删除和复制工作

2.Block

(1)HDFS中采用了数据块作为数据读写单位
(2)HDFS数据块的默认大小是128MB,之所以设置这么大,目的是为了减少寻址开销
(3)数据块只是 HDFS 文件分割的单位,并不是数据存储单位。 比如文件为200MB,它会被分成两个数据块,一个数据块为128MB,另一个数据块为72MB而不128MB

3.HDFS的特点

(1)优点
(1)高容错性
* 上传的数据自动保存多个副本 它是通过增加副本的数量来增加它的容错性的。
* 如果某一个副本丢失,HDFS 机制会复制其他机器上的副本, 而我们不必关注它的实现。
(2)适合大数据的处理。
* 能够处理 GB,TB甚至 PB 级别的数据
* 能够处理百万规模的数据, 非常的大。
(3)流式文件写入
* 一次写入,多次读取。文件一旦写入,不能修改,只能增加
* 这样可以保证数据一致性
(4)可构建在廉价机器上。
* 通过多副本提高可靠性。
* 提供了容错和恢复机制
(2)劣势
(1)低延时数据访问
* 它适合高吞吐率的场景,就是在某一时间内写入大量的数据,但是它在低延时的情况下是不行的,比如毫秒级以内读取数据,这样它是很难做到的
(2)小文件的存储
* 存放大量小文件的话,它会占用 NameNode的大量内存在存储文件、目录和块信息上。这样是不可取的,因为 NameNode 的内存总是有限的。
* 小文件存储的寻道时间会超过文件的读取时间,这违背了 HDFS 的设计初衷。
(3)并发写入,文件随机修改
* 一个文件只能一个线程写,不能多个线程同时写
* 仅支持文件的追加,不支持文件的随机修改
(4)不支持超强的事务。
* 没有像关系型数据库那样,对事务具有强有力的支持。

4.HDFS的读写数据流程

读:
(1).客户端向 NameNode 发起 RPC 调用,请求读取文件数据
(2).NameNode检查文件是否存在,如果存在则获取文件的元信息(block id及对应的DataNode列表)
(3).客户端收到元信息后选取一个网络距离最近的DataNode,依次请求读取每个数据块,客户端首先要校验文件是否损坏,如果损坏,客户端会选取另外的DataNode请求。
(4).DataNode与客户端建立Socket连接,传输对应的数据块,客户端收到数据缓存到本地,之后写入文件。
(5).依次传输剩下的数据块,直到整个文件合并完成

写:
(1).客户端根namenode通信请求上传文件,namenode检查目标文件和目录是否已存在,判断是否上传,并向客户端返回检查结果
(3).客户端得到上传文件的允许后读取客户端配置,向NameNode请求上传第一个数据块,
(4).Namenode会根据客户端配置来查询DataNode信息,返回3个datanode服务器ABC
(5).client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将真个pipeline建立完成,逐级返回客户端
(6).client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答
(7).当一个block传输完成之后,client再次请求namenode上传第二个block的服务器

5.fsimage和edits

(1)fsimage和edits是NameNode 中两个很重要的文件
(2)fsimage镜像文件包含了整个HDFS文件系统的所有目录、文件的 indoe 信息和数据块到文件的映射
(3)edits 文件主要是在 NameNode 经启动的情况下对 HDFS 进行的各种更新操作进行记录,HDFS客户端执行所有的写操作都会被记录到 dits 文件中
(4)NameNode数据是保存在内存中的,由 DataNode 其汇报每个节点所保存的相关信息

三.MapReduce

1.MapReduce

MapReduce是一个简单易用的并行计算模型,它将运行于大规模集群上的复杂的并行计算过程高度地抽象为两个函数Map和Reduce。

四.Yarn

1.Yarn

(1).Yarn主要负责集群的资源管理和调度,它不仅可以支持 MapReduce 计算,还支持Hive,HBase,Pig,Spark等应用,这样就可以方便地使用Yarn从系统层面对集群进行统一管理。
(2).Yarn采用 Master-Slave结构,其中ResourceManager为Master, ResourceManager负责整个系统的资源管理和分配,
(3).NodeManager为Slave, NodeManager负责每个 DataNode 上的资源和任务管理

2.Yarn基本框架与组件

(1).Yarn主要由ResourceManager,NodeManager,Container和ApplicationMaster组件组成
(2).ResourceManager
* ResourceManager是Yarn集群的主控节点,负责协调和管理整个集群(所有NodeManager)的资源,响应用户提交的不同类型应用程序的解析,调度和监控等工作。
* 它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(ApplicationsManager, ASM)
(3).NodeManager 
* NodeManager是Yarn集群从节点,它是Yarn集群当中资源的提供者,也是真正执行应用程序的容器(Container)的提供者 
* NodeManager负责接收ResourceManager的资源分配请求,监控应用程序的资源使用情况(CPU,内存,硬盘,网络),并通过心跳向集群资源调度器ResourceManager汇报Container 的使用信息 通过与ResourceManager配合,负责整个Hadoop集群中的资源分配工作
(3).ApplicationMaster 
* 主要负责向ResourceManager申请执行任务的资源容器,运行任务,监控整个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。

3.Yarn工作流程

(1)客户端通 ResourceManager向ApplicationsManager提交应用,将JAR包文件等上传到HDFS的指定目录,并请求一个ApplicationMaster实例
(2).ApplicationsManager生成一个Application ID,ResourceManager将请求转发给调度器,调度器分配一个Container ,然后ResourceManager在这个 Container中启动ApplicationMaster实例,并交由NodeManager对ApplicationMaster实例进行管理
(3)ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以通过查询ResourceManager获得 ApplicationMaster的详细信息
(4)ApplicationMaster通过计算任务数和数据本地性等信息向ResourceManager申请Container,并由ApplicationMaster负责将Container启动。
(5)应用程序的代码在启动的Container中运行,NodeManager把运行的进度、状态等信息发送给 ApplicationMaster
(6)重复步骤(4)(5)直至应用程序运行结束。 ApplicationMaster向ResourceManager取消注册然后关闭,所有用到的Container也归还给系统。