目录
1、什么是Hadoop及其组件
Hadoop是一个开源分布式计算平台架构,基于apache协议发布,由java语言开发。主要包括
- HDFS(分布式文件管理系统)
- MapReduce(分布式计算框架)
- Hive(基于Hadoop的数据仓库)
- Pig(基于Hadoop的数据流系统)
- HBase(一个分布式面向列的数据库)
- Spark(快速和通用计算的Hadoop数据引擎)
- ZooKeeper(分布式协作服务)
2、Hadoop的守护进程
- NameNode(元数据服务器) 主节点,存储文件的元数据(文件名,文件目录结构,文件属性——生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等
- SecondaryNameNode(辅助元数据服务器) 用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据快照
- DataNodes(块存储) 在本地文件系统存储文件块数据,以及块数据校验
- JobTracker(任务调度) 负责接收用户提交的作业,负责启动、跟踪任务执行,每个 DataNode有一个TaskTracker,它们执行实际工作。
- TaskTrackers(任务执行) 负责执行由JobTracker分配的任务,管理各个任务在每个节点的执行情况。
3、Hadoop的YARN/HDFS/MapReduce分别包含哪些组件,每个组件的职能是什么?
3.1 YARN:Yet Another Resource Negotiator,是一种新的Hadoop资源管理器
- ReasourManager 负责资源管理的,整个系统有且只有一个 RM ,来负责资源的调度。它也包含了两个主要的组件:定时调用器(Scheduler)以及应用管理器(ApplicationManager)。
- ApplicationMaster 每当 Client 提交一个 Application 时候,就会新建一个 ApplicationMaster 。由这个 ApplicationMaster 去与 ResourceManager 申请容器资源,获得资源后会将要运行的程序发送到容器上启动,然后进行分布式计算。
- NodeManager NodeManager 是 ResourceManager 在每台机器的上代理,负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向ResourceManager/Scheduler 提供这些资源使用报告。
- Container Container是YARN集群中资源的抽象,将NM上的资源进行量化,根据需要组装成一个个Container,然后服务于已授权资源的计算任务。计算任务在完成计算后,系统会回收资源,以供后续计算任务申请使用。Container包含两种资源:内存和CPU,后续Hadoop版本可能会增加硬盘、网络等资源。
3.2 HDFS:分布式文件管理系统
- NameNode
- SecondaryNameNode
- DataNode
3.3 MapReduce:分布式计算框架,采用Master/Slave架构,1个JobTracker带多个TaskTracker
- JobTracker
- TaskTracker
- MapTask
- ReduceTask
4、一个MapReduce任务在提交阶段是如何对输入数据进行分片划分的?
通过InputSplit()函数来处理,设置分片数量为Math.max(minSize,Math.min(goalSize, blockSize)),一个数据片分配一个map任务。
5、MapReduce里的Combiner是做什么用的?什么情况下需要,和Reduce的区别是什么?
Combiner主要是在map完成后,reducer之前对数据做一次聚合,以减少数据传输的IO开销。
数据格式转换
- map: (K1, V1) → list(K2, V2)
- combine: (K2, list(V2)) → list(K2, V2)
- reduce: (K2, list(V2)) → list(K3, V3) 注意:combine的输入和reduce的完全一致,输出和map的完全一致
Combiner和Reducer的区别在于运行的位置
Combiner是在每一个MapTask所在的节点运行;
Reducer是接收全局所有Mapper的输出结果;
6、MapReduce的Shuffle过程包含了哪几个阶段,分别做了什么工作?Shuffle的数据量是由什么决定的?
- map端shuffle 1、split,将文件切片 2、partition,得到key,value形式的结果 3、写入环形内存缓冲区 4、spill,执行溢出写 5、归并
- reduce端shuffle 1、复制copy 2、归并merge 3、reduce
7、什么是推测机制,它是如何解决计算慢节点问题的?
当一个task被认定很慢后,JobTracker会起一个新的task attempt来双跑,取最先完成的task的结果,本文记录下Hadoop中是如何判断一个task需要起speculative task的。
8、HDFS是如何实现容错机制的?如果NameNode挂了会怎么样,DataNode挂了会怎么样?
- HDFS 通过复制进程来保证容错机制。在文件写入 HDFS 时,HDFS 会首先把文件分割成块,并把这些数据块存储在集群不同机器上,然后在其他机器创建各个块的副本,默认情况下,HDFS 会在其他机器创建3个文件的副本。
- NameNode挂了 使用文件系统元数据副本(FsImage)启动一个新的 NameNode。 然后,配置 DataNode 和客户端,以便它们可以确认这个新的 NameNode,即启动。 现在,新的 NameNode 将在完成加载最后一个检查点 FsImage(用于元数据信息)并从 DataNode 接收到足够的块报告后开始为客户端提供服务。
- DataNode挂了 NameNode 定期从集群中的每个 DataNode 接收心跳(信号),这意味着 DataNode 运行正常。 块报告包含 DataNode 上所有块的列表。如果一个 DataNode 发送心跳消息失败,则在特定时间段后将其标记为死亡。 NameNode 使用之前创建的副本将死节点的块复制到另一个 DataNode
9、HDFS的一次读数据请求经历了怎样的过程?一次写请求经历了怎样的过程?
- 写数据请求 1、客户端通过Distributed FileSystem模块向NameNode请求上传文件; 2、NameNode检查是否已存在文件和检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象; 3、客户端按照配置参数(dfs.blocksize,比如128MB)的大小将文件切分为块(Block),并向NameNode请求上传第一个Block; 4、NameNode返回分配的可写的DataNode列表,比如dn1、dn2、dn3; 5、客户端通过FSDataOutputStream模块向dn1请求上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道pipeline建 立完成; 6、dn1、dn2、dn3逐级应答客户端; 7、客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答;(注:并不是每写完一个packet后就返回确认信息,因为packet中的每个chunk都携带校验信息,没必要每写一个就汇报一下,这样效率太慢。正确的做法是写完一个block块后对校验信息进行汇总分析,进而得出是否有块写错的情况发生) 8、当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步); 9、写完数据,关闭输出流。
- 读数据请求 1、客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据获得这个文件的数据块位置列表,返回输入流对象; 2、挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据; 3、DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验); 4、客户端以Packet为单位接收,先在本地缓存,然后写入目标文件; 5、写完数据,关闭输入流。
10、YARN的产生解决了什么样的调度问题?
Hadoop 由MapReduce和HDFS组成,1.x版本设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题,这使得Hadoop在相当长时间内仅适合离线存储和离线计算。
Hadoop 2.0由三个分支组成,分别是HDFS、MapReduce和YARN,YARN是Hadoop 2.x中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度。YARN不仅限于MapReduce一种框架使用,也可以供其他框架使用,Spark、Storm等。
Yarn的作用:解耦资源与计算
11、YARN是如何做计算资源的调度的,有哪些策略?
- FIFO:先到先得
- Capacity:给小任务单独一份计算资源
- Fair:平均分配
版权归原作者 zuolixiangfisher 所有, 如有侵权,请联系我们删除。