【20】进大厂必须掌握的面试题-50个Hadoop面试

2021-04-07 10:18:54 浏览数 (1)

1.关系数据库和HDFS之间的基本区别是什么?

以下是HDFS和关系数据库之间的主要区别:

类别

关系数据库管理系统

Hadoop的

资料类型

RDBMS依赖于结构化数据,并且数据模式始终是已知的。

任何类型的数据都可以存储到Hadoop中,即结构化,非结构化或半结构化。

处理中

RDBMS提供的处理能力有限或没有。

Hadoop允许我们以并行方式处理跨集群分布的数据。

相对于读取的架构

RDBMS基于“写入时的模式”,其中在加载数据之前完成架构验证。

相反,Hadoop遵循读取策略架构。

读/写速度

在RDBMS中,由于数据的架构是已知的,因此读取速度很快。

HDFS中的写入速度很快,因为在HDFS写入期间不会发生架构验证。

成本

因此,我必须为许可软件付费。

Hadoop是一个开源框架。因此,我不需要为此软件付费。

最合适的用例

RDBMS用于OLTP(在线迁移处理)系统。

Hadoop用于数据发现,数据分析或OLAP系统。

2.解释“大数据”,大数据的五个V是什么?

“大数据”是用于收集大型和复杂数据集的术语,这使得很难使用关系数据库管理工具或传统数据处理应用程序进行处理。很难捕获,整理,存储,搜索,共享,传输,分析和可视化大数据。大数据已成为公司的机遇。现在,他们可以成功地从数据中获取价值,并通过增强的业务决策能力在竞争者中拥有明显的优势。

♣提示:在这样的问题中谈论5V是一个好主意,无论是否被特别询问!

  • :卷表示以指数速率(即PB和Exabyte)增长的数据量。
  • 速度:速度是指数据增长的速度,这是非常快的。今天,昨天的数据被认为是旧数据。如今,社交媒体是不断增长的数据速度的主要贡献者。
  • 种类:种类是指数据类型的异质性。换句话说,收集的数据具有各种格式,例如视频,音频,csv等。因此,这些各种格式代表了各种数据。
  • 准确性:准确性是指由于数据不一致和不完整而对可用数据有疑问或不确定性的数据。可用数据有时会变得混乱,并且可能难以信任。对于许多形式的大数据,质量和准确性很难控制。数据量通常是数据缺乏质量和准确性的原因。
  • 价值:访问大数据固然很好,但除非我们能够将其转化为价值,否则它是无用的。通过将其转化为价值,我的意思是,它是否会增加组织的利益?致力于大数据的组织是否实现了高ROI(投资回报率)?除非通过处理大数据增加了他们的利润,否则它是没有用的。

3.什么是Hadoop及其组件。

当“大数据”出现时,Apache Hadoop演变为解决方案。Apache Hadoop是一个框架,为我们提供了用于存储和处理大数据的各种服务或工具。它有助于分析大数据并据此做出业务决策,而使用传统系统无法高效地完成这些决策。

提示:现在,在解释Hadoop的同时,您还应该解释Hadoop的主要组件,即:

  • 存储单元– HDFS(NameNode,DataNode)
  • 处理框架– YARN(ResourceManager,NodeManager)

4.什么是HDFS和YARN?

HDFS(Hadoop分布式文件系统)是Hadoop的存储单元。它负责在分布式环境中将不同类型的数据存储为块。它遵循主从拓扑。

♣提示:建议也解释HDFS组件,即

  • NameNode:NameNode是分布式环境中的主节点,它维护存储在HDFS中的数据块的元数据信息,例如块位置,复制因子等。
  • DataNode:DataNode是从属节点,负责将数据存储在HDFS中。NameNode管理所有DataNode。

YARN(另一个资源协商者)是Hadoop中的处理框架,用于管理资源并为流程提供执行环境。

提示:同样,就像我们在HDFS中所做的那样,我们还应该解释YARN的两个组成部分:

  • ResourceManager:它接收处理请求,然后将请求的各个部分相应地传递到相应的NodeManager,在此进行实际处理。它根据需要将资源分配给应用程序。
  • NodeManager:NodeManager安装在每个DataNode上,它负责在每个DataNode上执行任务。

5.告诉我各种Hadoop守护程序及其在Hadoop集群中的角色。

通常,通过首先解释HDFS守护程序(即NameNode,DataNode和Secondary NameNode),然后转到YARN守护程序(即ResorceManager和NodeManager),最后解释JobHistoryServer,来解决此问题。

  • NameNode:它是主节点,负责存储所有文件和目录的元数据。它具有有关块,组成文件的信息以及这些块在群集中的位置。
  • 数据节点:它是包含实际数据的从节点。
  • 辅助NameNode:它定期将更改(编辑日志)与NameNode中存在的FsImage(文件系统映像)合并。它将修改后的FsImage存储到持久性存储中,可以在NameNode发生故障的情况下使用。
  • ResourceManager:它是管理资源和调度在YARN上运行的应用程序的中央机构。
  • NodeManager:它在从属计算机上运行,并负责启动应用程序的容器(应用程序在其中执行应用程序),监视其资源使用情况(CPU,内存,磁盘,网络)并将其报告给ResourceManager。
  • JobHistoryServer:在Application Master终止后,它维护有关MapReduce作业的信息。

Hadoop HDFS面试问题

6.将HDFS与网络附加存储(NAS)进行比较。

在此问题中,首先解释NAS和HDFS,然后比较它们的功能,如下所示:

  • 网络附加存储(NAS)是连接到计算机网络的文件级计算机数据存储服务器,可提供对异构客户端组的数据访问。NAS可以是提供用于存储和访问文件的服务的硬件或软件。Hadoop分布式文件系统(HDFS)是一个分布式文件系统,用于使用商品硬件存储数据。
  • 在HDFS中,数据块分布在群集中的所有计算机上。而在NAS中,数据存储在专用硬件上。
  • HDFS旨在与MapReduce范例一起使用,在该范例中,计算被移至数据。NAS不适合MapReduce,因为数据与计算分开存储。
  • HDFS使用具有成本效益的商品硬件,而NAS是包含高成本的高端存储设备。

7.列出Hadoop 1和Hadoop 2之间的区别。

这是一个重要的问题,在回答这个问题时,我们必须主要关注两点,即被动NameNode和YARN体系结构。

  • 在Hadoop 1.x中,“ NameNode”是单点故障。在Hadoop 2.x中,我们有主动和被动“ NameNodes”。如果主动“ NameNode”失败,则被动“ NameNode”负责。因此,可以在Hadoop 2.x中实现高可用性。
  • 另外,在Hadoop 2.x中,YARN提供了一个中央资源管理器。借助YARN,您现在可以在Hadoop中运行多个应用程序,所有应用程序共享一个公共资源。MRV2是一种特殊类型的分布式应用程序,它在YARN之上运行MapReduce框架。其他工具也可以通过YARN执行数据处理,这在Hadoop 1.x中是一个问题。

Hadoop 1.x

Hadoop 2.x

被动节点

NameNode是单点故障

主动和被动NameNode

处理中

MRV1(作业跟踪器和任务跟踪器)

MRV2 / YARN(ResourceManager和NodeManager)

8.什么是主动和被动“ NameNode”?

在HA(高可用性)体系结构中,我们有两个NameNode-主动“ NameNode”和被动“ NameNode”。

  • 活动的“ NameNode”是在群集中工作和运行的“ NameNode”。
  • 被动“ NameNode”是备用“ NameNode”,其数据与主动“ NameNode”相似。

当主动“ NameNode”发生故障时,被动“ NameNode”将替换集群中的主动“ NameNode”。因此,群集永远不会没有“ NameNode”,因此它永远不会失败。

9.为什么经常要在Hadoop集群中删除或添加节点?

Hadoop框架最吸引人的功能之一是对商用硬件的利用。但是,这导致Hadoop群集中频繁出现“ DataNode”崩溃。Hadoop框架的另一个引人注目的功能是,随着数据量的快速增长,规模扩展变得容易。由于这两个原因,Hadoop管理员最常见的任务之一是调试(添加)和停用(删除)Hadoop集群中的“数据节点”。

10.两个客户端尝试访问HDFS中的同一文件时会发生什么?

HDFS仅支持独占写入。

当第一个客户端联系“ NameNode”以打开文件进行写入时,“ NameNode”将租约授予客户端以创建此文件。当第二个客户端尝试打开同一文件进行写入时,“ NameNode”将注意到该文件的租约已被授予另一个客户端,并且将拒绝第二个客户端的打开请求。

11. NameNode如何解决DataNode故障?

NameNode会定期从群集中的每个DataNode接收心跳(信号),这表明DataNode正常运行。

块报告包含DataNode上所有块的列表。如果DataNode无法发送心跳消息,则在特定时间段后将其标记为无效。

NameNode使用先前创建的副本将死节点的块复制到另一个DataNode。

12.当NameNode关闭时,您将如何处理?

NameNode恢复过程涉及以下步骤,以使Hadoop集群启动并运行:

  1. 使用文件系统元数据副本(FsImage)启动新的NameNode。
  2. 然后,配置数据节点和客户端,以便它们可以确认此新的名称节点已启动。
  3. 现在,新的NameNode将在完成加载最后一个检查点FsImage(用于元数据信息)并从DataNodes接收到足够的阻止报告后开始为客户端提供服务。

13.什么是检查站?

简而言之,“检查点”是一个获取FsImage,编辑日志并将其压缩为新的FsImage的过程。因此,代替重播编辑日志,NameNode可以直接从FsImage加载最终的内存状态。这是非常有效的操作,并减少了NameNode启动时间。检查点由辅助NameNode执行。

14. HDFS的容错能力如何?

通过HDFS存储数据时,NameNode会将数据复制到多个DataNode。默认复制因子为3。您可以根据需要更改配置因子。如果DataNode出现故障,NameNode会自动将数据从副本复制到另一个节点并使数据可用。这样可以在HDFS中提供容错功能。

15. NameNode和DataNode可以作为商品硬件吗?

这个问题的明智答案是,DataNode是商用硬件,例如个人计算机和便携式计算机,因为它存储数据并且需要大量数据。但是从您的经验来看,您可以知道NameNode是主节点,它存储有关HDFS中存储的所有块的元数据。它需要高内存(RAM)空间,因此NameNode必须是具有良好存储空间的高端计算机。

16.为什么在具有大量数据集的应用程序中使用HDFS,而不是在存在大量小文件的情况下使用HDFS?

与分散在多个文件中的少量数据相比,HDFS更适合单个文件中的大量数据集。如您所知,NameNode将有关文件系统的元数据信息存储在RAM中。因此,内存量限制了我的HDFS文件系统中的文件数量。换句话说,文件过多会导致生成过多的元数据。并且,将这些元数据存储在RAM中将成为挑战。根据经验法则,文件,块或目录的元数据占用150个字节。

17.您如何在HDFS中定义“阻止”?Hadoop 1和Hadoop 2中的默认块大小是多少?可以更改吗?

块不过是硬盘上存储数据的最小连续位置。HDFS将每个存储为块,然后将其分布在Hadoop集群中。HDFS中的文件分为块大小的块,这些块作为独立的单元存储。

  • Hadoop 1默认块大小:64 MB
  • Hadoop 2默认块大小:128 MB

是的,可以配置块。可以在hdfs-site.xml文件中使用dfs.block.size参数来设置Hadoop环境中块的大小。

18.’jps’命令有什么作用?

“ jps”命令可帮助我们检查Hadoop守护程序是否正在运行。它显示了机器上运行的所有Hadoop守护程序,即namenode,datanode,resourcemanager,nodemanager等。

19.您如何在Hadoop中定义“机架感知”?

机架感知是一种算法,其中“ NameNode”基于机架定义来决定如何放置块及其副本,以最小化同一机架内“ DataNode”之间的网络流量。假设我们考虑复制因子3(默认值),该策略是“对于每个数据块,一个机架中将存在两个副本,另一个机架中将存在第三副本”。该规则称为“复制品放置策略”。

20. Hadoop中的“推测执行”是什么?

如果某个节点执行任务的速度较慢,则主节点可以在另一个节点上冗余地执行同一任务的另一个实例。然后,首先完成的任务将被接受,而另一个任务将被杀死。该过程称为“推测执行”。

21.如何重新启动Hadoop中的“ NameNode”或所有守护程序?

这个问题可以有两个答案,我们将讨论两个答案。我们可以通过以下方法重新启动NameNode:

  1. 您可以使用单独停止NameNode / sbin /hadoop-daemon.sh停止namenode命令,然后使用来启动NameNode /sbin/hadoop-daemon.sh启动namenode 命令。
  2. 要停止和启动所有守护程序,请使用 / sbin / stop-all。***sh* 然后使用。*/sbin/start-all.sh*** 命令,它将首先停止所有守护程序,然后再启动所有守护程序。

这些脚本文件位于Hadoop目录内的sbin目录中。

22.“ HDFS块”和“输入拆分”之间有什么区别?

“ HDFS块”是数据的物理划分,而“输入拆分”是数据的逻辑划分。HDFS将数据划分为多个块以将块存储在一起,而对于处理,MapReduce将数据划分为输入拆分并将其分配给映射器功能。

23.命名Hadoop可以运行的三种模式。

Hadoop可以运行的三种模式如下:

  1. 独立(本地)模式:如果我们不进行任何配置,这是默认模式。在这种模式下,Hadoop的所有组件(例如NameNode,DataNode,ResourceManager和NodeManager)都作为单个Java进程运行。这使用本地文件系统。
  2. 伪分布式模式:单节点Hadoop部署被视为以伪分布式模式运行Hadoop系统。在这种模式下,所有Hadoop服务(包括主服务和从服务)都在单个计算节点上执行。
  3. 完全分布式模式:Hadoop部署中的Hadoop主服务和从属服务在单独的节点上运行,被称为完全分布式模式。

Hadoop MapReduce面试问题

24.什么是“ MapReduce”?运行“ MapReduce”程序的语法是什么?

它是一个框架/编程模型,用于使用并行编程在计算机集群上处理大型数据集。运行MapReduce程序的语法为hadoop_jar_file.jar / input_path / output_path

25.“ MapReduce”程序中的主要配置参数是什么?

用户需要在“ MapReduce”框架中指定的主要配置参数是:

  • 作业在分布式文件系统中的输入位置
  • 作业在分布式文件系统中的输出位置
  • 数据输入格式
  • 数据输出格式
  • 包含地图功能的类
  • 包含reduce函数的类
  • 包含映射器,Reducer和驱动程序类的JAR文件

26.说明为什么我们不能在mapper中执行“聚合”(加法)?为什么我们为此需要“减速器”?

这个答案包括很多要点,因此我们将按顺序进行讲解。

  • 我们无法在映射器中执行“聚合”(添加),因为在“映射器”功能中不会发生排序。排序仅发生在reduce端,没有排序就无法进行聚合。
  • 在“聚合”期间,我们需要所有映射器函数的输出,这些输出可能无法在映射阶段收集,因为映射器可能正在存储数据块的另一台机器上运行。
  • 最后,如果我们尝试在mapper上聚合数据,则需要所有可能在不同机器上运行的mapper函数之间的通信。因此,它将消耗较高的网络带宽,并可能导致网络瓶颈。

27. Hadoop中“ RecordReader”的目的是什么?

“ InputSplit”定义了一个工作片段,但没有描述如何访问它。“ RecordReader”类从其源加载数据,并将其转换为适合“ Mapper”任务读取的(键,值)对。“ RecordReader”实例由“输入格式”定义。

28.在“ MapReduce框架”中解释“分布式缓存”。

分布式缓存可以解释为MapReduce框架提供的一种用于缓存应用程序所需文件的工具。一旦为工作缓存了文件,Hadoop框架将使其在您运行/映射/减少任务的每个数据节点上可用。然后,您可以在Mapper或Reducer作业中将缓存文件作为本地文件访问。

29.“减速器”如何相互通信?

这是一个棘手的问题。“ MapReduce”编程模型不允许“缩减器”彼此通信。“减速器”是孤立运行的。

30.“ MapReduce分区程序”做什么?

“ MapReduce分区程序”可确保单个键的所有值都到达同一个“归约器”,从而允许将地图输出均匀地分配到“归约器”上。通过确定哪个“还原器”负责特定密钥,它将“映射器”输出重定向到“还原器”。

31.您将如何编写自定义分区程序?

通过执行以下步骤,可以轻松编写针对Hadoop作业的自定义分区程序:

  • 创建一个新的类来扩展Partitioner类
  • 覆盖方法– getPartition,位于MapReduce中运行的包装器中。
  • 使用方法set Partitioner将自定义分区程序添加到作业中,或将自定义分区程序作为配置文件添加到作业中。

32.什么是“合并器”?

“组合器”是执行本地“减少”任务的微型“减少器”。它从特定“节点”上的“映射器”接收输入,并将输出发送到“缩减器”。“合并器”通过减少需要发送到“缩减器”的数据量来帮助提高“ MapReduce”的效率。

33.您对“ SequenceFileInputFormat”了解多少?

“ SequenceFileInputFormat”是用于在序列文件中读取的输入格式。它是一种特定的压缩二进制文件格式,经过优化,可以将一个“ MapReduce”作业的输出之间的数据传递到其他“ MapReduce”作业的输入。

序列文件可以作为其他MapReduce任务的输出生成,并且是从一个MapReduce作业传递到另一个MapReduce作业的数据的有效中间表示。

Apache Pig面试问题

34. Apache Pig比MapReduce有什么好处?

Apache Pig是一个平台,用于分析代表Yahoo开发的数据流的大型数据集。它旨在提供对MapReduce的抽象,从而减少编写MapReduce程序的复杂性。

  • Pig Latin是一种高级数据流语言,而MapReduce是一种低级数据处理范例。
  • 无需在MapReduce中编写复杂的Java实现,程序员就可以使用Pig Latin非常轻松地实现相同的实现。
  • Apache Pig将代码的长度减少了大约20倍(根据Yahoo)。因此,这将开发周期缩短了近16倍。
  • Pig提供了许多内置的运算符来支持数据操作,例如联接,过滤器,排序,排序等。而在MapReduce中执行相同的功能是一项艰巨的任务。
  • 在Apache Pig中执行Join操作很简单。然而,在MapReduce中很难在数据集之间执行Join操作,因为它需要顺序执行多个MapReduce任务才能完成工作。
  • 此外,pig还提供了MapReduce中缺少的嵌套数据类型,如元组,包和地图。

35. Pig Latin中有哪些不同的数据类型?

Pig Latin可以处理原子数据类型(如int,float,long,double等)和复杂数据类型(如元组,bag和map)。

原子数据类型:原子或标量数据类型是在所有语言(例如字符串,整数,浮点数,长整数,双精度字符,char [],byte [])中使用的基本数据类型。

复杂数据类型:复杂数据类型为Tuple,Map和Bag。

36.您处理过的“Pig Latin”中有哪些不同的关系运算?

不同的关系运算符是:

  1. for each
  2. order by
  3. filters
  4. group
  5. distinct
  6. join
  7. limit

37.什么是UDF?

如果某些函数在内置运算符中不可用,我们可以通过编程方式创建用户定义函数(UDF),以使用其他语言(如Java,Python,Ruby等)来实现这些功能,并将其嵌入脚本文件中。

Apache Hive面试问题

38.“ Hive”中的“ SerDe”是什么?

Apache Hive是建立在Hadoop之上的数据仓库系统,用于分析Facebook开发的结构化和半结构化数据。Hive抽象了Hadoop MapReduce的复杂性。

“ SerDe”界面使您可以指示“ Hive”如何处理记录。“ SerDe”是“ Serializer”和“ Deserializer”的组合。“ Hive”使用“ SerDe”(和“ FileFormat”)读取和写入表的行。

39.默认的“ Hive Metastore”是否可以同时被多个用户(进程)使用?

“ Derby数据库”是默认的“ Hive Metastore”。多个用户(进程)不能同时访问它。它主要用于执行单元测试。

40.“ Hive”存储表数据的默认位置是什么?

Hive存储表数据的默认位置在/ user / hive / warehouse中的HDFS中。

Apache HBase面试问题

41.什么是Apache HBase?

HBase是一个开源的,多维的,分布式的,可伸缩的,用Java编写的NoSQL数据库。HBase在HDFS(Hadoop分布式文件系统)之上运行,并为Hadoop提供类似BigTable(Google)的功能。它旨在提供一种容错的方式来存储大量稀疏数据集。HBase通过在大型数据集上提供更快的读/写访问来实现高吞吐量和低延迟。

42. Apache HBase的组成部分是什么?

HBase具有三个主要组件,即HMaster Server,HBase RegionServer和Zookeeper。

  • Region Server:一个表可以分为几个区域。区域服务器将一组区域提供给客户端。
  • HMaster:它协调和管理区域服务器(类似于NameNode在HDFS中管理DataNode)。
  • ZooKeeper:Zookeeper充当HBase分布式环境中的协调者。通过会话进行通信,有助于维护群集内的服务器状态。

43.区域服务器的组成部分是什么?

区域服务器的组件为:

  • WAL:预写日志(WAL)是附加到分布式环境中每个Region Server的文件。WAL将尚未持久保存或提交给永久存储的新数据存储。
  • Block Cache:块缓存位于区域服务器的顶部。它将频繁读取的数据存储在内存中。
  • MemStore:这是写缓存。在将所有传入数据提交到磁盘或永久存储器之前,它将存储所有传入数据。一个区域中的每个列族都有一个MemStore。
  • HFile:HFile存储在HDFS中。它将实际单元存储在磁盘上。

44.在HBase中解释“ WAL”吗?

预写日志(WAL)是附加到分布式环境中每个区域服务器的文件。WAL将尚未持久保存或提交给永久存储的新数据存储。在无法恢复数据集的情况下使用它。

45.提到“ HBase”和“关系数据库”之间的区别吗?

HBase是一个开源的,多维的,分布式的,可伸缩的,用Java编写的 NoSQL数据库。HBase在HDFS之上运行,并为Hadoop提供类似BigTable的功能。让我们看看HBase和关系数据库之间的区别。

HBase

关系型数据库

它是无架构的

它是基于架构的数据库

它是面向列的数据存储

它是面向行的数据存储

用于存储非规范化数据

用于存储规范化数据

它包含稀疏填充的表

它包含薄表

HBase已完成自动分区

没有这样的规定或内置的分区支持

Apache Spark面试问题

46.什么是Apache Spark?

这个问题的答案是,Apache Spark是一个用于分布式计算环境中的实时数据分析的框架。它执行内存中计算以提高数据处理速度。

通过利用内存计算和其他优化,它比MapReduce进行大规模数据处理的速度快100倍。

47.您可以使用任何特定的Hadoop版本构建“ Spark”吗?

是的,您可以为特定的Hadoop版本构建“ Spark”。

48.定义RDD。

RDD是弹性分布数据集(Resilient Distribution Datasets)的缩写-并行运行的操作元素的容错集合。RDD中的分区数据是不可变的且是分布式的,这是Apache Spark的关键组件。

Oozie和ZooKeeper面试问题

49.什么是Apache ZooKeeper和Apache Oozie?

Apache ZooKeeper在分布式环境中与各种服务进行协调。通过执行同步,配置维护,分组和命名,可以节省大量时间。

Apache Oozie是一个调度程序,用于调度Hadoop作业并将其绑定为一项逻辑工作。Oozie工作有两种:

  • Oozie工作流程:这些是要执行的顺序动作集。您可以将其视为接力赛。每个运动员都在等待最后一个运动员完成比赛的地方。
  • Oozie协调器:这些是Oozie作业,这些作业在数据可用时触发。将此视为我们体内的反应刺激系统。以同样的方式,当我们对外部刺激做出响应时,Oozie协调员会对数据的可用性做出响应,而其他情况则不然。

50.如何在Hadoop中配置“ Oozie”作业?

“ Oozie”与其他Hadoop堆栈集成在一起,支持多种类型的Hadoop作业,例如“ Java MapReduce”,“ Streaming MapReduce”,“ Pig”,“ Hive”和“ Sqoop”。

0 人点赞