大数据(Hadoop)面试题及答案
声明:此文档由本人学习整理所做,答案由个人整理,所引部分已经标出出处,牛友们按需查看,文章难免有纰漏错误之处,望交流指正。
题目摘自牛客网:大数据面试题V3.0,约870篇牛客大数据面经480道面试题 发布者:蓦_然 ,在此表达感谢。
Hadoop基础
- 介绍下Hadoop
● Hadoop是什么
○ 1.Hadoop是一个由Apache基金会开发的分布式系统基础架构
○ 2.主要解决海量数据的存储和分析计算问题
○ 3.广义上来说,Hadoop通常指的是广泛的概念--Hadoop生态圈
- Hadoop的特点
● Hadoop的优势(4高)
○ 1.高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算或者存储节点出现故障,也不会导致数据的丢失。
○ 2.高拓展性:在集群之间分配任务数据,可以方便拓展数以千计的节点
○ 3.高效性:在MapReduce的思想下,Hadoop是并行工作的,加快了任务处理的速度。
○ 4.高容错性:能够自动将失败的任务重新分配。
- 说下Hadoop生态圈组件及其作用
● 大数据技术生态体系
○ 1)Sqoop:Sqoop 是一款开源的工具,主要用于在大数据框架(Hadoop、Hive 等)与传统的数据库(MySql) 间进行数据的传递,可以将一个关系型数据库中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。
○ 2)Flume:Flume 是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据。
○ 3)Kafka:Kafka 是一种高吞吐量的分布式 发布/订阅消息系统;
○ 4)Spark:Spark 是当前非常流行的开源大数据内存计算框架。可以基于 Hadoop 上存储的大数据进行计算。
○ 5)Flink:Flink 是当前非常流行的开源大数据内存计算框架。用于实时计算的场景较多。
○ 6)Oozie:Oozie 是一个管理 Hdoop 作业(job)的工作流程调度管理系统。
○ 7)Hbase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
○ 8)Hive:Hive 是基于 Hadoop 的一个 数据仓库工具,可以将结构化的数据文件映射为一张 数据库表,并提供简单的 SQL 查询功能。可以将 SQL 语句转换为 MapReduce 任务进行运行。
■ 其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析。
○ 9)ZooKeeper:它是一个针对大型分布式系统的 可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
Hadoop主要分哪几个部分? 他们有什么作用?
● Hadoop1.x○ MapReduce(计算+资源调度)
○ HDFS(数据存储)
○ Common(辅助工具)
● Hadoop2.x
○ MapReduce(计算)
○ HDFS(数据存储)
○ Yarn(资源调度)
5. Hadoop 1.x,2x,3.x 的区别
Hadoop1.x 的组成为:Common(辅助工具)、HDFS(数据存储)、MapReduce (计算+资源调度);
Hadoop2.x 的组成为:Common(辅助工具)、HDFS(数据存储)、MapReduce (计算)、Yarn (资源调度)
Hadoop3.x在组成上和Hadoop2.x没有任何区别
- Hadoop集群工作时启动哪些进程? 它们有什么作用?
● 一、HDFS 架构概述
○ 1、NameNode(NN):存储文件的元数据,如:文件名,文件目录结构,文件属性,以及每个文件的块列表和块所在的DataNode等
○ 2、DataNode(DN):在本地文件系统存储文件的块数据,以及块数据的校验和。
○ 3、Secondary NameNode(2NN):每隔一段时间对NameNode进行元数据的备份。
○
● 二、YARN 架构概述
○ 1、ResourceManager(RM):
■ 1.处理客户端的请求 ■ 2.监控NodeManager ■ 3.启动或者监控ApplicationMaster ■ 4.资源分配和调度
○ 2、NodeManager(NM):
■ 1.管理单个节点上的资源 ■ 2.处理来自ResourceManager的命令 ■ 3.处理来自ApplicationManager的命令
○ 3、ApplicationMaster(AM):
■ 1.负责数据的切分 ■ 2.为应用程序申请资源并分配内部的任务。 ■ 3.任务的监控和容错
○ 4、Container:
■ YARN中资源的抽象,封装了本地节点的多维度资源。如:内存、CPU、磁盘、网络等
○
● 三、MapReduce 架构概述
○ MapReduce 将计算过程分为两个阶段:Map 和 Reduce
○ 1)Map 阶段并行处理输入数据
○ 2)Reduce 阶段对 Map 结果进行汇总
○
- 在集群计算的时候,什么是集群的主要瓶颈
● MapReduce的执行效率的瓶颈在于两点:
○ 1、计算机的性能
■ CPU、内存、磁盘健康、网络带宽
○ 2、I/O操作优化
■ 1、数据倾斜 ■ 2、Map和Reduce数量设计的不合理 ■ 3、Map运行的时间过长、导致Reduce等待时间过久 ■ 4、小文件过多 ■ 5、大量的不可切分的超大的压缩文件 ■ 6、Spill次数过多(导致大量落盘操作) ■ 7、Merge次数过多
搭建Hadoop集群的xml文件有哪些?
● 2)配置文件说明○ core-default.xml
○ hdfs-default.xml
○ yarn-default.xml
○ mapred-default.xml
Hadoop的checkpoint流程
● 5.1 NN和2NN工作机制
○ 1、NameNode的元数据信息是通过Fsimage文件 + Edits编辑日志来维护的,当NameNode启动的时候Fsimage文件和Edits编辑日志的内容会被加载到内存中进行合并形成最新的元数据信息,当我们对元数据进行操作的时候,考虑到直接修改文件的低效性,从而不会直接修改Fsimage文件,而是会往Edits编辑日志文件中追加操作记录。
○ 2、当满足一定条件的时候 SecondaryNameNode会将Fsimage文件和 Edits 编辑日志文件的合并:SecondaryNameNode首先会让NameNode停止对正在使用的Edits编辑日志文件的使用,并重新生成一个新的Edits编辑日志文件。
○ 3、接着把NameNode 的 Fsimage文件和已停止的Edits文件拷贝到本地在内存中。将Edits编辑日志文件的操作记录合并到Fsimage 文件中形成一个最新的Fsimage文件,最后会将这个最新的Fsimage文件推送给NameNode并自己也备份一份。
○
- Hadoop的默认块大小是多少? 为什么要设置这么大?
● HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认的大小是128M。
● HDFS块大小设置与磁盘的传输速度紧密相关。寻址时间为传输时间的百分之一时,为最佳的状态。一般的寻址时间约为10ms,则传输时间约为1s,而目前磁盘的传输速度普遍为100MB/s,所以将Block的大小设置为128M最为合理,当然,随着磁盘的传输速度的提升,可以适当调整Block的大小。
- Block划分的原因
● Block划分的原因
○ (1)分布式存储大文件,可以动态调整集群的规模。
○ (2)容易对数据进行备份,提高容错能力
○ (3)使用抽象块概念而非整个文件作为存储单元,大大简化存储子系统的设计
- Hadoop常见的压缩算法?
● 1.3 压缩方式选择
○ 1.3.1 Gzip压缩
■ 优点:压缩率比较高,并且压缩/解压的速度比较快,(压缩率第二,解压缩速率倒数第二) ■ 缺点:不支持对文件Split(切分)
○ 1.3.2 Bzip2压缩
■ 优点:支持对文件进行Split;具有很高的压缩率,比Gzip压缩率都高(压缩率第一,解压缩速率倒数第一) ■ 缺点:压缩/解压速度慢
○ 1.3.3 Lzo压缩
■ 优点:合理的压缩率,压缩/解压速度比较快,支持Split,是Hadoop中最流行的压缩格式。 ■ 缺点:压缩率比Gzip要低一些,Hadoop本身不支持,需要单独安装
○ 1.3.4 Snappy压缩
■ 优点:高速的压缩速度和合理的压缩率 ■ 缺点:不支持Split,压缩率比Gzip要低,Hadoop本省也不支持,需要单独安装。
- Hadoop作业提交到YARN的流程?
● 1)作业提交
○ 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
○ 第2步:Client向RM申请一个作业id。
○ 第3步:RM给Client返回该job资源的提交路径和作业id。
○ 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。
○ 第5步:Client提交完资源后,向RM申请运行ApplicationMaster。
- Hadoop的Combiner的作用
● 3.3.7 Combiner合并
○ 1)Combiner是MR程序汇总Mapper和Reducer之外的一种组件
○ 2)Combiner组件的父类就是Reducer
○ 3) Combiner和Reducer组件的区别局在于运行的位置
■ Combiner是在每一个MapTask所在的节点运行 ■ Reducer是接受全局的所有Mapper的输出结果,然后进行运算。
○ 4)Combiner的意义就是对每一个MapTask的输出进行局部汇总,以减少网络传输量。
○ 5)Combiner能够应用的前提是不能影响最终的业务逻辑。
○ 自定义Combiner实现步骤:
■ 1.自定义一个Combiner并继承Reducer,重写Reduce方法 ■ 2.在Job驱动中配置使用。
- Hadoop序列化和反序列化
● 什么是序列化?
○ 序列化就是把内存中的对象,转换成字节序列(或者其他的数据传输协议)以便于存储大到磁盘(持久化)或者网络传输。
○ 反序列化就是将收到的字节序列(或者其他的数据传输协议)或者磁盘的持久化数据,转换成内存中的对象。
- Hadoop的运行模式
本地模式:(hadoop默认安装后启动就是本地模式,就是将来的数据存在Linux本地,并且运行MR程序的时候也是在本地机器上运行)
伪分布式模式:伪分布式其实就只在一台机器上启动HDFS集群,启动YARN集群,并且数据存在HDFS集群上,以及运行MR程序也是在YARN上运行,计算后的结果也是输出到HDFS上。本质上就是利用一台服务器中多个java进程去模拟多个服务
完全分布式:完全分布式其实就是多台机器上分别启动HDFS集群,启动YARN集群,并且数据存在HDFS集群上的以及运行MR程序也是在YARN上运行,计算后的结果也是输出到HDFS上。
- Hadoop小文件处理问题
● 2.4.1 Hadoop小文件弊端
○ 1、HDFS 上每个文件都要在 NameNode 上创建对应的元数据,这个元数据的大小约为150byte,这样当小文件比较多的时候,就会产生很多的元数据文件,一方面会大量占用NameNode 的内存空间,另一方面就是元数据文件过多,使得寻址索引速度变慢。
○ 2、小文件过多,在进行 MR 计算时,会生成过多切片,需要启动过多个 MapTask。每个MapTask 处理的数据量小,导致 MapTask 的处理时间比启动时间还小,白白消耗资源。
- Hadoop为什么要从1.x升级到2.x?
● 3.1 Hadoop2.x新特性
○ 3.1.1 集群间数据拷贝
■ 1)scp 实现两个远程主机之间的文件复制 ■ 2)采用 distcp 命令实现两个 Hadoop 集群之间的递归数据复制
○ 3.1.2 小文件存档
■ HDFS存档文件或HAR文件是一个更高效的文件存档工具,能够将多个小文件打包成一个 HAR 文件,从而达到减少 NameNode 的内存使用。具体来说,HDFS存档文件对内还是多个独立文件 ,对NameNode而言却是一个整体,从而减少了NameNode的内存使用。
○ 3.1.3 回收站
■ 开启回收站的功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 ● 1、默认值fs.trash.interval = 0,0表示禁用回收站,其他值表示设置的存活时间。 ● 2、默认值fs.trash.checkpoint.interval = 0 ,检查回收站的间隔时间,如果该值为0,则该值设置和fs.trash.interval的参数值相等 ● 3、要求fs.trash.checkpoint.interval <= fs.trash.interval ○ 检查时间fs.trash.checkpoint.interval时间到,会检查回收站中的文件,删除达到存活时间的文件。
- Hadoop为什么要从2.x升级到3.x?
● 3.2 Hadoop3.x新特性
○ 3.2.1 多NN的HA架构
■ Hadoop3.x 允许用户运行多个备用 NameNode。 ● 例如,通过配置三个 NameNode 和五个 JournalNode,群集能够容忍两个节点而不是一个节点的故障。 ■ HDFS HA 功能通过配置 多个 Active/Standby 状态的 NameNodes 实现在集群中对 NameNode的热备来解决单点故障问题。
○ 3.2.2 纠删码
■ 纠删码(Erasure Coding)能够在不到 50% 的数据冗余情况下提供和 3 副本相同的容错能力,因此,使用纠删码作为副本机制的改进是自然而然的。 ■ 缺点:副本策略牺牲空间,纠删码策略牺牲时间 ■
- Hadoop的优缺点
● 2.4 Hadoop的优势(4高)
○ 1.高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算或者存储节点出现故障,也不会导致数据的丢失。
○ 2.高拓展性:在集群之间分配任务数据,可以方便拓展数以千计的节点
○ 3.高效性:在MapReduce的思想下,Hadoop是并行工作的,加快了任务处理的速度。
○ 4.高容错性:能够自动将失败的任务重新分配。
Hadoop的缺点
1、Hadoop不适用于低延迟数据访问。
2、Hadoop不能高效存储大量小文件。
3、Hadoop不支持多用户写入并任意修改文件。