Apache Hadoop 是最受欢迎的大数据开源项目之一。它是一项强大的技术,允许组织和个人以有效的方式从大量数据中获取意义,尤其是非结构化数据,同时保持成本效益。
IT 部门中与大数据相关的几个工作简介需要对 Apache Hadoop 有很好的了解。
热门Hadoop常见面试问题和答案合集
如果你正在准备这样的面试,以下是最好的 Hadoop 面试问题,可以为同样的情况做准备或衡量你到目前为止的进度:
问题:什么是Hadoop?为其组件命名。
Hadoop面试题解析:Apache Hadoop 是一个开源软件框架,提供大量工具和服务来存储和处理大数据。决策者利用 Hadoop 分析大数据并提出合适的业务决策。Hadoop 具有以下组件:
- 处理框架
- YARN
- 资源管理器
- 节点管理器
- 存储单元
- 高密度文件系统
- 名称节点
- 数据节点
问题:将关系数据库管理系统与 HDFS(Hadoop 分布式文件系统)进行比较?
答:Hadoop常见面试题有哪些?以下是 HDFS 和 RDBMS 之间的各种差异:
- 数据存储- 在 RDBMS 中,数据的模式始终是已知的,并且只存储结构化数据。相反,Hadoop 可以存储结构化、半结构化甚至非结构化数据。
- 处理能力- RDBMS 几乎没有处理能力。另一方面,Hadoop 允许处理并行分布在 Hadoop 集群中的数据。
- 模式方法- HDFS 和 RDBMS 之间的另一个主要区别是模式方法。RDBMS 遵循传统的 schema-on-write 方法,即在加载数据之前验证 schema,而 HDFS 遵循现代 schema-on-read 方法。
- 读/写速度- 由于模式已知,RDBMS 中的读取速度很快。Hadoop 促进了更快的写入,因为在 HDFS 写入期间没有模式验证。
- 定价- 大多数 RDBMS 是付费软件。相反,Hadoop 是一个开源框架,拥有广泛的社区和大量附加软件,如工具和库。
- 理想用途- RDBMS 的使用仅限于 OLTP 系统。但是,Hadoop 可用于数据发现、分析、OLAP 系统等。
问题: 请解释一下 HDFS 和 YARN?
答:HDFS 或 Hadoop 分布式文件系统是 Apache Hadoop 的存储单元。遵循主/从拓扑,HDFS 将多种形式的数据存储为分布式环境中的块。它有两个组成部分:
- NameNode- 它是维护与存储的数据块有关的元数据的主节点。
- DataNodes - 在 HDFS 中存储数据的从节点。所有的 DataNode 都由 NameNode 管理。
另一个资源协商器或 YARN 是 Apache Hadoop 的处理框架,在 Hadoop 2 中引入。它负责管理资源并为进程提供执行环境。YARN 有 2 个组件:
- ResourceManager - 接收处理请求,然后将其分部分传递给相关的 NodeManager。还根据应用程序的需要为应用程序分配资源。
- NodeManager - 安装在每个 DataNode 上,负责执行任务。
问题:解释各种 Hadoop 守护进程?
答:一个 Hadoop 集群中共有 6 个 Hadoop 守护进程:
- NameNode- 这是存储 Hadoop 集群所有目录和文件的元数据的主节点。包含有关块及其在集群中的位置的信息。
- DataNode(s) - 存储实际数据的从节点。数量多。
- 辅助 NameNode - 定期合并更改 - 编辑日志 - 与 NameNode 中的 FsImage。Secondary NameNode在持久化存储中修改后的FsImage可以用于NameNode失效的场景。
- ResourceManager - 负责管理资源以及调度在 YARN 上运行的应用程序。
- NodeManager - 它负责:
- 启动应用程序的容器
- 监控上述资源的使用情况
- 将它的状态和监控细节报告给 ResourceManager
- JobHistoryServer - 在 Application Master 终止后维护有关 MapReduce 作业的信息
NameNode、DataNode(s) 和 Secondary NameNode 是 HDFS 守护进程,而 ResourceManager 和 NodeManager 是 YARN 守护进程。
问题:简单介绍一下Hadoop架构?
答:Apache Hadoop 架构,又名 Hadoop 分布式文件系统或 HDFS 遵循主/从架构。在这里,集群由单个 NameNode 或 Master 节点组成,其余所有节点都是 DataNode 或 Slave 节点。
NameNode 包含有关存储的数据的信息,即元数据,DataNode 是数据实际存储在 Hadoop 集群中的位置。
问:HDFS 和 NAS(网络附加存储)有什么区别?
Hadoop面试题解析:以下是HDFS和NAS的重要区别点:
一、定义
网络附加存储是连接到某些计算机网络的文件级计算机数据存储服务器。简单地说,NAS 可以是一些提供存储和访问数据文件服务的软件或硬件。
另一方面,Hadoop分布式文件系统是一种通过商品硬件存储数据的分布式文件系统。
2. 数据存储
数据存储在 NAS 的专用硬件上,而 HDFS 以数据块的形式存储数据,这些数据块分布在组成 Hadoop 集群的所有机器上。
3. 设计
HDFS 的设计方式便于使用 MapReduce 范式。在这里,计算转移到数据上。NAS 与 MapReduce 范式不兼容,因为这里的数据与实际发生计算的位置分开存储。
4. 成本
由于 HDFS 使用商品硬件,因此与 NAS 所需的昂贵、专用、高端存储设备相比,使用 HDFS 是一种具有成本效益的解决方案。
问题:Hadoop 1 和 2 之间的主要区别是什么?
答:Hadoop常见面试问题和答案合集 - Hadoop 最初于 2006 年 4 月发布。第一个完整的 Hadoop 版本,Hadoop 1.0.0 于 2011 年 12 月发布,Hadoop 2.0.0 于 2013 年 10 月发布。Hadoop 2 添加了 YARN 作为 MapReduce 引擎的替代品( MRv1) 在 Hadoop 1 中。
中央资源管理器 YARN 支持在 Hadoop 中运行多个应用程序,而所有应用程序共享一个公共资源。Hadoop 2 使用 MRv2 - 一种独特的分布式应用程序 - 在 YARN 之上执行 MapReduce 框架。
问题:请比较 Hadoop 2 和 3?
答:Hadoop常见面试题有哪些?Hadoop 3 于 2017 年 12 月 13 日发布。以下是 Hadoop 2.xx 和 Hadoop 3.xx 版本之间的重要区别:
1. 故障点
在 Hadoop 2 中,NameNode 是单点故障。这为实现高可用性带来了重大问题。Hadoop 3 通过引入主动和被动 NameNode 解决了这个问题。当主动 NameNode 出现故障时,被动 NameNode 之一可以接管。
2. 应用开发
Hadoop 3 中的容器基于 Docker 的原理工作。它有助于减少应用程序开发所需的总时间。
3.纠删码
Hadoop 3 中纠删码的实现降低了存储开销。
4. GPU 硬件使用
无法在 Hadoop 2 中的集群上执行 DL(深度学习)算法。这是在 Hadoop 3 中附加的,能够在 Hadoop 集群中使用 GPU 硬件。
问题:简要说明主动和被动NameNode。
答:活动的 NameNode 在集群中工作和运行。被动 NameNode 具有与主动 NameNode 相似的数据。它仅在出现故障时替换活动的 NameNode。因此,其目的是实现高度的可用性。
问题:为什么在 Hadoop 集群中频繁添加或删除 DataNode?
答:频繁添加(调试)和/或删除(退役)DataNode 有两个原因:
- 利用商品硬件
- 扩展,即适应数据量的快速增长
问题:如果两个用户尝试访问 HDFS 中的同一个文件会发生什么?
答:NameNode 收到打开文件的请求后,向第一个用户授予租用权。当其他用户尝试做同样的事情时,NameNode 会注意到租用已经被授予,此后将拒绝访问请求。
问题:请解释NameNode如何管理DataNode故障?
回答:NameNode 从 Hadoop 集群中的每个 DataNode 接收定期心跳消息,这意味着它们的正常运行。当 DataNode 发送心跳消息失败时,NameNode 会在一段时间后将其标记为死亡。
问题:你对检查点的理解是什么?
答:由辅助 NameNode 执行,检查点减少 NameNode 启动时间。该过程实质上涉及将 FsImage 与编辑日志合并,并将两者压缩成一个新的 FsImage。
检查点允许 NameNode 直接从 FsImage 加载最终的内存状态。
问题: Hadoop常见面试问题和答案合集 - 请解释一下HDFS是如何实现容错的?
答:为了实现容错,HDFS 有一种叫做复制因子的东西。它是 NameNode 将一个 DataNode 的数据复制到其他一些 DataNode 的次数。
默认情况下,复制因子为 3,即 NameNode 存储存储在单个 DataNode 上的数据的 3 个额外副本。在 DataNode 发生故障的情况下,NameNode 从这些副本之一复制数据,从而使数据随时可用。
问题:Apache Hadoop 与 Apache Spark 有何不同?
答:有几个功能强大的集群计算框架可以应对大数据挑战。Apache Hadoop 是分析大数据的合适解决方案,当高效处理批处理是优先事项时。
然而,当优先考虑有效处理实时数据时,我们就有了 Apache Spark。与 Hadoop 不同,Spark 是一种能够交互式处理数据的低延迟计算框架。
虽然 Apache Hadoop 和 Apache Spark 都是流行的集群计算框架。然而,这并不意味着两者完全相同。实际上,两者都迎合了大数据的不同分析需求。以下是两者之间的各种差异:
- 引擎类型- 虽然 Hadoop 只是一个基本的数据处理引擎,但 Spark 是一个专门的数据分析引擎。
- 预期用途- Hadoop 旨在处理具有 Brobdingnagian 数据量的批处理。另一方面,Spark 用于处理实时事件(例如社交媒体)生成的实时数据。
- 延迟- 在计算中,延迟表示给出数据传输指令的时间与数据传输实际开始的时间之间的差异。Hadoop是一个高延迟的计算框架,而Spark是一个低延迟的计算框架。
- 数据处理- Spark 以交互方式处理数据,而 Hadoop 不能。数据在 Hadoop 中以批处理方式处理。
- 复杂性/易用性- 由于抽象模型,Spark 更易于使用。用户可以轻松地与高级操作员一起处理数据。Hadoop 的 MapReduce 模型很复杂。
- 作业调度程序要求- Spark 具有内存计算功能。与 Hadoop 不同,Spark 不需要外部作业调度程序。
- 安全级别- Hadoop 和 Spark 都是安全的。但是,虽然 Spark 只是受到保护,但 Hadoop 却受到严密保护。
- 成本- 由于 MapReduce 模型提供了一种更便宜的策略,与 Spark 相比,Hadoop 的成本更低,而后者由于具有内存计算解决方案而成本更高。
更多关于这个?查看此深入的Hadoop 与 Spark比较。
问题:大数据的五个V是什么?
答:大数据的五个 V 是价值、多样性、速度、真实性和容量。它们中的每一个解释如下:
- 价值 - 除非在大数据上工作产生结果以改善业务流程或收入或以其他方式,否则它是无用的。价值是指大数据带来的生产力。
- Variety——指数据类型的异质性。大数据有多种格式,例如音频文件、CSV 和视频。这些格式代表了大数据的多样性。
- 速度 - 指大数据增长的速度。
- 真实性 - 指由于数据不一致和不完整而存在疑问或可用性不确定的数据。
- Volume - 指大数据的数量,通常以 Exabytes 和 Petabytes 为单位。
问题: NameNode 和 DataNode 的理想存储是什么?
答:处理大数据涉及需要大量存储空间来存储海量数据。因此,商用硬件,例如 PC 和笔记本电脑,是 DataNode 的理想选择。
由于NameNode是Hadoop集群中存储所有数据块元数据的主节点,因此需要较高的内存空间,即RAM。因此,具有良好 RAM 的高端机器是 NameNode 的理想选择。
问题: 请解释NameNode恢复过程?
Hadoop面试题解析:NameNode 恢复过程包括以下两个步骤:
- 步骤 1 - 使用文件系统元数据副本(即 FsImage)启动一个新的 NameNode。
- 第 2 步 - 配置 DataNode 和客户端,以便它们确认新的 NameNode。
一旦新的 NameNode 完成加载最后一个检查点 FsImage 并从 DataNode 接收到足够的块报告,它将开始为客户端提供服务。
问题: 为什么我们不应该使用 HDFS 来存储大量小文件?
答:HDFS 更适合在单个文件中存储大量数据,而不是跨多个文件存储少量数据。
如果你使用 HDFS 来存储大量小文件,那么与所有这些文件中存在的完整数据相比,这些文件的元数据将非常重要。因此,这将不必要地需要更多的 RAM,从而使整个过程效率低下。
问题: Hadoop 1、2 和 3 中的默认块大小是多少?我们怎样才能改变它?
答:Hadoop 1 中的默认块大小为 64MB,Hadoop 2 和 Hadoop 3 中的默认块大小为 128MB。为了根据要求设置块的大小,使用 hdfs-site.xml 文件中的 dfs.block.size 参数。
问题:我们如何检查 Hadoop 守护进程是否正在运行?
答:为了检查 Hadoop 守护进程是否正在运行,我们使用 jps(Java 虚拟机进程状态工具)命令。它显示所有启动和运行的 Hadoop 守护进程的列表。
问题: Hadoop 中的机架感知是什么?
答:NameNode 做出决定的算法,一般来说,决定如何放置块和副本,具体来说,称为机架感知。NameNode 根据机架定义做出决定,目的是最大限度地减少同一机架中 DataNode 之间的网络流量。
Hadoop 集群的默认复制因子为 3。这意味着对于每个数据块,三个副本将可用。一个机架中存在两个副本,另一个机架中存在另一个副本。它被称为副本放置策略。
问题: 请解释一下 Hadoop 中的推测执行?
答:当发现某个节点执行任务的速度较慢时,主节点会在其他节点上执行同一任务的另一个实例。在这两者中,第一个完成的任务被接受,而另一个被杀死。这在 Hadoop 中称为推测执行。
问题:Hadoop常见面试题有哪些:请解释 HDFS Block 和 Input Split 之间的区别?
答:HDFS 块是 Hadoop 集群中存储数据的物理划分。相反,输入拆分是相同的逻辑拆分。
HDFS 将存储的数据划分为块以有效地存储它们,而 MapReduce 将数据划分为 Input Split 并将其分配给 mapper 函数以进行进一步处理。
问题: Apache Hadoop 的运行模式有哪些?
答:Apache Hadoop 以三种模式运行:
- 独立/本地模式 -这是 Hadoop 中的默认模式。在此模式下,所有 Hadoop 组件都作为单个 Java 进程运行并使用本地文件系统。
- 伪分布式模式 -单节点 Hadoop 部署以伪分布式模式运行。在此模式下,所有 Hadoop 服务都在单个计算节点上执行。
- 完全分布式模式 -在完全分布式模式下,Hadoop 主从服务分别在不同的节点上运行。
问题: 你将如何重新启动 NameNode 或所有 Hadoop 守护进程?
答:对于重新启动 NameNode:
- 步骤 1 - 首先,输入 /sbin/hadoop-daemon.sh stop namenode 命令以停止 NameNode。
- 第 2 步 - 现在,输入 /sbin/hadoop-daemon.sh start namenode 命令以启动 NameNode。
重新启动所有 Hadoop 守护进程:
- 步骤 1 - 要停止所有 Hadoop 守护进程,请使用 /sbin/stop-all.sh 命令。
- 第 2 步 - 要再次启动所有 Hadoop 守护进程,请使用 /sbin/start-all.sh 命令。
问题: 定义 MapReduce。运行 MapReduce 程序的语法是什么?
答:MapReduce 是一种编程模型以及相关的实现,用于在 Hadoop 集群上使用并行分布式算法生成大数据集。MapReduce 程序包括:
- 映射过程 -执行过滤和排序
- Reduce 方法 -执行汇总操作
运行 MapReduce 程序的语法是:
hadoop_jar_file.jar/input_path/output_path
问题:枚举一个MapReduce程序中需要指定的各种配置参数?
答:Hadoop常见面试问题和答案合集 - 以下是用户在 MapReduce 程序中需要指定的各种配置参数:
- 数据输入格式
- 作业在分布式文件系统中的输入位置
- 作业在分布式文件系统中的输出位置
- 数据输出格式
- 包含地图功能的类
- 包含reduce函数的类
- 包含映射器、减速器和驱动程序类的 JAR 文件
问题: 为什么在mapper中不能进行聚合?为什么我们需要减速机呢?
答:以下是无法在映射器中执行聚合的各种原因:
- 聚合需要所有映射器函数的输出,这可能无法在映射阶段收集,因为映射器可能运行在与包含数据块的机器不同的机器上。
- 没有排序就无法进行聚合,并且它不会出现在映射器函数中。
- 试图在mapper上聚合数据,那么就需要所有mapper函数之间进行通信。由于不同的映射器功能可能在不同的机器上运行,因此需要高网络带宽,这可能会导致网络瓶颈。
分类只发生在reducer端,我们需要reducer函数来完成聚合。
问题: 为什么我们需要在 Hadoop 中使用 RecordReader?它在哪里定义?
回答:输入拆分是任务的一部分,没有对其访问方式的任何描述。RecordReader 类负责从其源加载数据并将其转换为 K,V (Key, Value) 对,适合 Mapper 任务读取。输入格式定义了 RecordReader 的一个实例。
Q:请解释一下MapReduce框架中的分布式缓存?
答:分布式缓存是 MapReduce 框架提供的一个实用程序,用于缓存应用程序所需的文件。一旦用户缓存了一个作业的文件,Hadoop 框架就会使其在运行 map/reduce 任务的所有数据节点上可用。缓存文件可以作为本地文件在 Mapper 或 Reducer 作业中访问。
问题: MapReduce 编程模型是否允许 reducer 相互通信?
答:Reducers 在 MapReduce 框架中独立运行。没有办法建立彼此的通信。
问题: 请解释一个 MapReduce 分区器?
答:MapReduce Partitioner 有助于将地图输出均匀分布在减速器上。它通过确保单个键的所有值都进入同一个减速器来做到这一点。
MapReduce Partitioner 通过确定哪个 reducer 负责特定键,将 mapper 输出重定向到 reducer。
问题: 你能解释一下在 Apache Hadoop 中编写自定义分区器的步骤吗?
答:以下是在 Hadoop 中编写自定义分区器的分步过程:
- 步骤 1 - 创建一个扩展 Partitioner 类的新类
- 第 2 步 - 接下来,在 MapReduce 中运行的包装类中覆盖 getPartition 方法
- 第 3 步 - 现在,你可以将自定义分区程序作为配置文件添加到作业中,也可以使用 Set Partitioner 方法。
问题: 你对Hadoop中的Combiner是怎么理解的?
答:Combiners 通过减少发送到 reducer 所需的数据来提高 MapReduce 框架的效率。一个组合器是一个小型化的reducer,负责执行本地reduce 任务。
组合器从特定节点上的映射器接收输入,并将输出发送到减速器。
问题: 你能解释一下 SequenceFileInputFormat 吗?
答:序列文件是数据从一个 MapReduce 作业传递到另一个作业的有效中间表示。它们可以作为其他 MapReduce 任务的输出生成。
SequenceFileInputFormat 是一种经过优化的压缩二进制文件格式,用于在一个 MapReduce 作业的输出和其他一些 MapReduce 作业的输入之间传递数据。它是一种用于在序列文件中读取的输入格式。
问题: 列出 Apache Hadoop 的一些最著名的应用程序?
答:Apache Hadoop 是一个开源平台,用于完成大量数据的可扩展和分布式计算。它提供了一种快速、高效且经济高效的方法来分析结构化、半结构化和非结构化数据。以下是 Apache Hadoop 的一些最佳用例:
- 实时分析客户数据
- 归档电子邮件
- 捕获和分析点击流、社交媒体、交易和视频数据
- 内容管理
- 欺诈检测和预防
- 交通管理
- 理解非结构化数据
- 管理社交媒体平台上的内容和媒体
- 科学研究
- 流处理
问题: 使用分布式缓存有什么好处?
答:使用分布式缓存有以下好处:
- 它可以分发从简单的只读文本文件到档案等复杂文件的任何内容。
- 它跟踪缓存文件的修改时间戳。
问题: 什么是备份节点和检查点 NameNode?
Hadoop面试题解析:Checkpoint NameNode 定期为命名空间创建检查点。它通过下载 FsImage、编辑文件并将其合并到本地目录中来实现。合并后,新的 FsImage 被上传到 NameNode。它具有与 NameNode 相同的目录结构。
备份节点在功能上类似于检查点名称节点。尽管它维护文件系统命名空间的最新内存副本,但它不需要定期记录更改。简单来说,备份节点将内存中的当前状态保存到一个图像文件中,用于创建一个新的检查点。
问题: Apache Hadoop 中常见的输入格式有哪些?
答:Apache Hadoop 有三种常见的输入格式:
- 键值输入格式- 适用于将文件分成几行的纯文本文件
- 序列文件输入格式- 用于按顺序读取文件
- 文本输入格式- 这是 Hadoop 中的默认输入格式
问题: 解释一个Reducer的核心方法?
答:一个Reducer的核心方法有3个,解释如下:
- cleanup() - 在清理临时文件的任务结束时仅使用一次。
- reduce() - 每个键总是调用一次关联的缩减任务。
- setup() - 用于配置各种参数,例如分布式缓存和输入数据大小。
问题: 请解释一下 JobTracker 在 Hadoop 中的作用?
答:Hadoop集群中的一个JobTracker负责:
- 资源管理,即管理 TaskTrackers
- 任务生命周期管理,即跟踪任务进度和任务容错
- 跟踪资源可用性
问题: Map-side Join 和 Reduce-side Join 有什么不同?
答:Map-side Join 需要一个严格的结构。当数据到达 Map 并且输入数据集必须结构化时执行。Reduce-side Join 更简单,因为不需要对输入数据集进行结构化。Reduce-side Join 比 Map-side Join 效率低,因为它需要经过排序和改组阶段。
问题: 你知道如何调试 Hadoop 代码吗?
答:Hadoop常见面试题有哪些?首先检查当前正在运行的 MapReduce 作业列表。此后,检查是否有一个或多个孤立作业正在运行。如果有,则需要确定 RM 日志的位置。这可以按如下方式完成:
- 步骤 1 - 使用 ps -ef | grep -I ResourceManager 命令在结果中查找日志目录。找出作业 ID 并检查孤立作业是否有错误消息。
- 步骤 2 - 使用 RM 日志来识别与孤立作业相关的任务执行所涉及的工作节点。
- 步骤 3 - 登录受影响的节点并运行以下代码:
ps -ef | grep -iNodeManager
- 步骤 4 - 检查节点管理器日志。大多数错误来自每个 MapReduce 作业的用户级日志。
Hadoop常见面试问题和答案合集总结
这总结了我们最热门的 Hadoop 面试问题列表。希望你发现这些有助于准备即将到来的面试或只是检查你学习 Hadoop 的进度。而且,不要忘记查看这些最好的 Hadoop 教程来学习 Hadoop。