20道面试题及详细解答!

1.说说什么是结构化数据、非结构化数据和半结构化数据

结构化数据、非结构化数据和半结构化数据是根据数据的组织结构和格式来划分的不同类型的数据。

结构化数据:结构化数据是按照预定义的数据模型进行组织和存储的数据。它通常以表格的形式存在,每个数据项都有明确定义的字段和数据类型。关系型数据库中的数据就是结构化数据的一个常见例子。结构化数据的特点是数据模式固定、清晰、易于查询和分析。 非结构化数据:非结构化数据是指没有明确结构和格式的数据。它以自由文本、图像、音频、视频等形式存在,没有预定义的数据模型。非结构化数据的特点是多样性、灵活性和大量性,例如社交媒体帖子、电子邮件、网页内容等。由于缺乏明确的结构,处理和分析非结构化数据是一项具有挑战性的任务。 半结构化数据:半结构化数据介于结构化数据和非结构化数据之间。它包含部分结构化的元数据,但不符合传统的关系型数据库的表格结构。半结构化数据通常以标记语言(如XML、JSON)或键值对的格式存储,如网页、日志文件、传感器数据等。半结构化数据的特点是部分结构化和部分非结构化,具有一定的灵活性和可扩展性。

2.大数据的五个 V是指什么?

Volume(数据量):大数据的特点之一是其规模庞大,涉及的数据量通常是传统数据处理方法无法处理的。大数据处理需要能够有效处理海量数据的技术和工具。 Velocity(数据速度):大数据的产生速度非常快,需要实时或近实时处理和分析。例如,社交媒体、物联网设备等都能够产生大量的实时数据,对于这些数据的处理需要具备高速处理的能力。 Variety(数据多样性):大数据不仅包括结构化数据,还包括非结构化和半结构化数据,如文本、图像、音频、视频等。这些数据类型的多样性要求处理工具和算法能够适应不同类型和格式的数据。 Veracity(数据真实性):大数据中包含许多来源不确定、质量不一致的数据。确保大数据的真实性和质量对于有效的数据分析和决策至关重要。因此,数据质量控制和数据清洗等步骤非常重要。 Value(数据价值):大数据处理的目标是从数据中提取有价值的信息和洞察,并转化为商业价值。大数据分析需要能够挖掘数据中的潜在价值,帮助企业做出更好的决策和优化业务流程。

3.什么是Hadoop及其组件?

Hadoop是一个开源的分布式计算框架,用于存储和处理大规模数据集。它由Apache基金会开发和维护,提供了可靠、可扩展和高性能的数据处理能力。

Hadoop的核心组件包括:

Hadoop Distributed File System(HDFS):HDFS是Hadoop的分布式文件系统,用于存储大规模数据集的分布式存储。它将数据分散存储在多个节点上,提供高可靠性和高吞吐量的数据访问。 MapReduce:MapReduce是Hadoop的计算模型和编程框架。它通过将大规模数据集分成小块,并在分布式计算节点上并行执行map和reduce操作,实现大规模数据的批处理和计算。 YARN(Yet Another Resource Negotiator):YARN是Hadoop的资源管理器,用于管理和调度集群中的计算资源。它允许多个应用程序共享群集资源,并动态分配和管理计算任务的资源。

4.Hadoop和传统关系型数据库的对比

数据模型和结构:传统关系型数据库使用表格结构,而Hadoop适合存储和处理大规模非结构化和半结构化数据。可扩展性:传统关系型数据库在规模和处理能力上有限,而Hadoop可以水平扩展到大规模数据集。处理速度:传统关系型数据库适用于实时和交互式查询,而Hadoop更适合大规模批处理任务。数据一致性:传统关系型数据库强调数据一致性,而Hadoop更注重数据的可靠性和可扩展性。数据处理能力:传统关系型数据库提供丰富的SQL查询语言和事务支持,而Hadoop适用于大规模数据处理和分布式计算。

5.Hadoop 守护进程及其在 Hadoop 集群中的作用*

Hadoop集群中的各种守护进程是为了管理和协调集群中的各个节点,确保Hadoop的正常运行和高效的数据处理。以下是Hadoop集群中的一些常见守护进程及其作用:

HDFS:

NameNode:NameNode是HDFS的主节点,负责管理文件系统的命名空间和元数据信息。它跟踪文件和目录的层次结构,记录文件块的位置,并处理客户端(client)的文件系统操作请求。 DataNode:DataNode是HDFS的数据节点,负责存储实际的数据块。它接收来自NameNode的指令,处理数据的读写请求,并定期向NameNode报告数据块信息(心跳信号)。 SecondaryNameNode:SecondaryNameNode协助NameNode进行元数据的备份和检查点操作。它定期从NameNode获取元数据,并创建新的检查点文件,以减少元数据损坏的风险。

YARN:

ResourceManager:ResourceManager是YARN的主节点,负责集群中的资源管理和作业调度。它接收客户端和应用程序的资源请求,为它们分配适当的资源,并监控和管理集群中的计算资源。(全局资源管理) NodeManager:NodeManager是YARN的节点管理器,在每个节点上运行。它负责监控节点上的资源使用情况,并与ResourceManager通信,报告节点的可用资源。(局部资源管理)

MapReduce:

JobTracker:JobTracker是MapReduce的主节点,负责作业的调度和任务的分配。它接收来自客户端(client)的作业请求,将作业分解为多个任务,并将任务分配给空闲的TaskTracker节点进行执行。 TaskTracker:TaskTracker是MapReduce的工作节点,运行在每个节点上。它接收来自JobTracker的任务分配,并执行任务的map和reduce操作。 JobHistoryServer:用于收集和展示MapReduce作业的历史信息。它接收来自JobTracker的作业历史记录文件,并提供一个Web界面,供用户查询和分析作业的执行情况。(从Hadoop 2.x版本开始,JobTracker已经被ResourceManager和NodeManager取代,而JobHistoryServer也与ResourceManager集成,用于收集和展示YARN中的作业历史记录。)

6.Hadoop 1 和 Hadoop 2 的区别*

Hadoop 1和Hadoop 2是Hadoop框架的两个主要版本,它们之间有以下几个主要区别:

架构和组件:Hadoop 1采用了经典的MapReduce计算模型,并使用JobTracker和TaskTracker作为主要的守护进程。而Hadoop 2引入了YARN(Yet Another Resource Negotiator)架构,将资源管理和作业调度从JobTracker中分离出来,使得Hadoop可以同时支持多种计算模型,如MapReduce、Spark等。 资源管理:Hadoop 1中的资源管理由JobTracker负责,它负责管理和分配集群中的计算资源。而Hadoop 2中引入了ResourceManager和NodeManager,ResourceManager负责全局资源管理和作业调度,而NodeManager负责在每个节点上的资源管理。 高可用性:Hadoop 1中的NameNode和JobTracker是单点故障,一旦它们出现故障,整个集群都会受到影响。而Hadoop 2引入了NameNode HA(高可用)和ResourceManager HA机制,通过使用多个活动和备用节点来提供更高的可用性。 编程模型:Hadoop 1中仅支持MapReduce编程模型,开发人员需要使用Java编写MapReduce作业。而Hadoop 2通过引入YARN,可以支持多种计算模型,如MapReduce、Spark、Storm等,并提供了更灵活的编程接口和工具。 性能和扩展性:Hadoop 2相对于Hadoop 1具有更好的性能和扩展性。通过引入YARN,Hadoop 2可以更好地管理和分配计算资源,实现更高的集群利用率和作业执行效率。

7.什么是主动和被动“NameNodes”?

在Hadoop中,主动和被动NameNodes是用于提供高可用性的NameNode节点的概念。

在Hadoop 2及之后的版本中,引入了NameNode HA(高可用性)机制,以解决单个NameNode节点成为单点故障的问题。该机制使用两个NameNode节点:一个是主动(Active)NameNode,另一个是被动(Standby)NameNode。

当主动NameNode发生故障或需要维护时,被动NameNode会自动切换为主动状态,接管集群的管理责任。在切换过程中,客户端可以无缝地继续对文件系统进行读写操作,而不会中断或丢失数据。

通过使用主动和被动NameNodes,Hadoop实现了更高的可用性和容错性,确保了文件系统的稳定性和持续可用性。

8.命名空间和元数据分别是什么?

命名空间(Namespace):命名空间是指Hadoop分布式文件系统(HDFS)中用于组织和管理文件和目录的层次结构。它类似于传统文件系统中的文件路径,但在HDFS中,命名空间是一个全局唯一的标识符。命名空间以根目录(/)开始,通过一系列的目录和子目录来表示文件的层次结构。元数据(Metadata):元数据是指关于文件和目录的描述信息,包括文件名、文件大小、创建时间、修改时间、访问权限、数据块的位置等。元数据并不包含文件的实际内容,而是存储了关于文件的描述和管理信息。

9.为什么在Hadoop集群中频繁删除或添加节点?

高可用性和容错性:通过在集群中添加更多的节点,可以提高系统的可用性和容错性。当一个节点发生故障或需要维护时,系统可以自动将任务和数据迁移到其他节点上,从而实现对业务的无缝服务。频繁删除或添加节点可以确保集群始终具有足够的可用节点来应对故障和维护。 资源管理和负载均衡:通过删除或添加节点,可以调整集群的资源分配和负载均衡。当集群中某些节点的负载过高或资源利用率不均衡时,可以通过增加节点来分担负载,或通过删除节点来减少资源浪费和提高利用率。这样可以确保集群中的任务能够高效地利用资源并平衡地分布在各个节点上。 扩展性和性能优化:随着数据量和业务需求的增长,可能需要扩展Hadoop集群以提高性能和处理更大规模的数据。通过添加更多的节点,可以增加集群的计算和存储能力,以满足不断增长的需求。频繁添加节点可以使集群具有更好的扩展性,并提高作业的处理速度和整体性能。 硬件升级和维护:当集群中的硬件设备需要升级或维护时,可能需要暂时删除或替换节点。这可以包括更换故障硬件、升级硬件规格或进行系统配置更改。频繁删除或添加节点可以确保集群中的硬件设备始终处于良好状态,并提供最佳的性能和可靠性。

总之,频繁删除或添加节点是为了实现高可用性、容错性、负载均衡、性能优化和硬件维护等目标,以确保Hadoop集群能够按照预期运行,并适应不断变化的需求和环境。

10.NameNode 如何处理 DataNode 故障?

当DataNode发生故障时,NameNode会采取以下步骤来处理:

心跳检测:NameNode会定期向所有注册的DataNode发送心跳请求,以检测DataNode的状态。如果NameNode在一定时间内没有收到DataNode的心跳响应,就会将该DataNode标记为不可用。 副本恢复:当一个DataNode被标记为不可用时,NameNode会检查该DataNode上存储的数据块的副本情况。如果某个数据块的所有副本都存储在不可用的DataNode上,那么NameNode会启动副本恢复过程。

首先,NameNode会确定其他可用的DataNode上是否有该数据块的副本。如果有,NameNode会选择一个可用的DataNode,并从该DataNode的副本中复制数据块来替换不可用DataNode上的副本。如果没有足够的副本,NameNode会根据配置的副本策略来决定是否需要创建新的副本,并将其复制到其他可用的DataNode上。 数据块复制:为了提高数据的可靠性和容错性,Hadoop通常会在集群中创建多个数据块的副本。当DataNode发生故障时,NameNode会确保副本数量保持在设定的阈值范围内,以保证数据的可用性。

11.NameNode宕机了怎么办?

为了解决这个问题,Hadoop提供了NameNode高可用性(HA)机制,以保证在NameNode宕机时能够快速恢复并提供持续可用的服务。以下是处理NameNode宕机的步骤:

被动NameNode接管:当主动NameNode宕机时,被动NameNode会自动接管其职责,成为新的活动(Active)NameNode。被动NameNode会从宕机的主动NameNode的元数据备份中恢复,并启动对客户端请求的响应。 快速故障转移:被动NameNode接管后,它会尽快通知所有的DataNode切换到新的主动NameNode。DataNode会更新它们的注册信息,并开始向新的主动NameNode发送心跳和块报告。 元数据同步:被动NameNode会与新的主动NameNode同步元数据。它会请求主动NameNode发送最新的命名空间和元数据更改,以保持两个NameNode之间的一致性。 客户端重新连接:当主动NameNode宕机后,客户端的请求将无法被正常处理。客户端需要重新连接到新的主动NameNode,以继续对文件系统进行读写操作。

什么是FsImage文件?

FsImage:是HDFS中用于存储文件系统的命名空间和元数据的快照的持久化文件。它在NameNode启动时被加载,并用于恢复文件系统的状态,以支持对文件的操作和管理。

为了保证文件系统的一致性和可靠性,FsImage文件通常会定期(例如每隔一段时间或在特定事件发生时)进行更新,以反映文件系统的最新状态。更新过程中,NameNode会将修改的元数据信息记录在编辑日志(Edit Log)中,并将其应用到FsImage文件中,从而保持FsImage文件的最新性。

什么是编辑日志(Edit Log)?

编辑日志(Edit Log):是记录文件系统状态的增量变化。

主要作用:是保持文件系统的一致性和可靠性。当发生NameNode故障或重启时,通过读取编辑日志,可以将未应用到持久化存储FsImage文件中的操作重新应用,从而恢复文件系统的状态。 

什么是检查点(Checkpoint)?

检查点(Checkpoint):是将HDFS中内存中的文件系统状态持久化到磁盘上的FsImage文件的过程。它确保了文件系统的一致性和可靠性,并支持在NameNode故障或重启后快速恢复文件系统的状态,即通过编辑日志(Edit Log)中的记录+现有的FsImage文件=新的完整FsImage文件。

检查点操作是由辅助NameNode(Secondary NameNode)来辅助执行的

注:在Hadoop分布式文件系统(HDFS)中,对文件和目录进行的操作,如创建、删除、重命名等,以及相应的元数据变化时不是立刻写入至FsImage文件中的,所以以上操作会先存在内存中,并将记录至编辑日志(Edit Log),但如果此时NameNode故障或重启,内存数据将消失,FsImage文件就需要检查点(Checkpoint)根据编辑日志中的记录来恢复至完整的FsImage文件。

12.HDFS如何容错? 

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

13.HDFS更适用于大规模数据集的应用程序还是有很多小文件的情况?为什么?

HDFS更适用于大规模数据集的应用程序。

原因以下几点:

        1.数据存储效率:HDFS是为处理大规模数据而设计的,它采用了块存储的方式,将大文件分割为固定大小的数据块,并分布式存储在集群中的各个节点上。这种方式可以提高数据的存储效率,减少存储空间的浪费。

        而对于有很多小文件的场景:每个小文件都会占用一定的存储空间和存储元数据的开销。当文件数量增多时,存储和访问小文件会导致存储空间的浪费和系统开销的增加。

        2.数据处理效率:HDFS采用了数据本地性原则,即将数据存储在与计算节点相近的位置,以减少数据传输的开销。在大数据集的应用程序中,数据通常以块的方式进行处理,而不是单个文件。HDFS的数据块大小通常设置为128MB或更大,可以提高数据处理的效率和并行性。

        对于有很多小文件的情况,每个小文件的读取和处理都需要单独的I/O操作和资源分配,导致系统开销增加,并且无法充分利用并行处理的优势。

        3.元数据管理:HDFS的元数据管理是基于主要的NameNode节点,它负责维护文件系统的层次结构和元数据信息。对于大量数据集的应用程序,元数据管理相对较为高效,因为它只需要维护较少的大文件和数据块的元数据。

        对于有很多小文件的情况,元数据管理的开销会增加,因为每个小文件都需要维护相应的元数据,包括文件名、权限、时间戳等。

综上,HDFS适用于大规模数据集的应用程序,可以提供高效的数据存储和处理能力。而在有很多小文件的情况下,HDFS的存储效率和数据处理效率会受到影响,因此可能需要考虑其他存储方案或对小文件进行合并和优化。

14.在HDFS中如何定义“块”?Hadoop 1 、Hadoop 2 和 Hadoop 3 中的默认块大小是多少?可以改变吗? 

块只是硬盘驱动器上存储数据的最小连续位置。HDFS 将每个存储为块,并将其分布在整个 Hadoop 集群中。HDFS 中的文件被分解为块大小的块,这些块作为独立的单元存储。

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

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

15.'jps' 命令有什么作用? 

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

16.说说Hadoop 中的“机架感知”?

Hadoop中的“机架感知”(Rack Awareness)是一种优化策略,用于在数据处理和存储过程中考虑数据节点和机架的物理位置关系,以提高数据访问的效率和容错性。

在Hadoop集群中,数据通常会被分割成多个数据块,并分布式存储在不同的数据节点上。机架感知策略通过了解数据节点和机架的物理位置关系,将数据块存储在与计算节点相近的位置,以减少数据传输的开销。

机架感知的具体实现包括以下几个方面:

机架信息的配置:在Hadoop集群中,通常会配置每个数据节点所在的机架信息,例如机架的名称或编号。这样,Hadoop系统就可以了解每个数据节点所处的机架位置。 数据块的位置分配:在数据写入过程中,Hadoop系统会尽量将数据块分布在不同的机架上,以提高数据的容错性。同时,Hadoop会尽量将数据块存储在与计算节点相近的位置,以减少数据传输的网络开销。这样,当需要处理或读取数据时,就可以更快地从本地节点获取数据,而不需要通过网络传输。 副本的位置分布:Hadoop通过复制数据块来提供数据冗余和容错性。机架感知也会影响数据副本的位置分布。Hadoop会尽量将副本存储在不同的机架上,以提高数据的容错性。这样,即使某个机架发生故障,仍然可以从其他机架获取数据。

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

Hadoop中的“推测执行”(Speculative Execution)是一种优化策略,用于提高作业的执行时间和整体性能。

在Hadoop集群中,一个作业通常会被分成多个任务(Task)并分布式地在不同的计算节点上执行。这些任务的执行时间可能会有所差异,因为节点之间的负载不均衡、网络延迟或硬件差异等原因。

推测执行的策略是,当某个任务的执行时间超过了平均执行时间的某个阈值时,Hadoop系统会启动一个备份任务(Speculative Task),并在另一个计算节点上并行地执行这个备份任务。原始任务和备份任务同时运行,不论哪个任务先完成,系统都会使用最快完成的任务的结果。

推测执行的目的是通过并行执行备份任务,来提高整体作业的执行速度。如果某个任务由于节点负载高或其他问题导致执行时间过长,通过同时执行备份任务,可以尽量避免这个任务成为作业的瓶颈,从而提高作业的整体执行效率。

需要注意的是,推测执行可能会导致一些额外的资源消耗,因为系统会同时执行原始任务和备份任务。因此,在配置Hadoop集群时,需要根据实际情况和需求来决定是否启用推测执行,并设置相应的阈值参数。

推测执行是Hadoop中的一项重要优化策略,可以提高作业的执行时间和整体性能,尤其对于那些执行时间不稳定的任务来说尤为有效。

18.如何重启“NameNode”或Hadoop中的所有守护进程?

1.停止所有守护进程:使用以下命令停止Hadoop中的所有守护进程:

$ stop-all.sh

```

这个命令会停止NameNode、DataNode、SecondaryNameNode和其他相关的守护进程。

2.重启NameNode:使用以下命令重启NameNode:

$ hdfs namenode -format

$ start-dfs.sh

```

第一条命令`hdfs namenode -format`用于格式化NameNode,确保其处于干净的状态。然后,使用`start-dfs.sh`命令启动NameNode和数据节点。

3.重启其他守护进程:使用以下命令重启其他守护进程,如SecondaryNameNode和YARN的ResourceManager和NodeManager:

$ start-yarn.sh

```

这个命令会启动YARN的ResourceManager和NodeManager。

19.“HDFS Block”和“Input Split”有什么区别?

“HDFS Block”和“Input Split”是Hadoop中两个不同概念的术语,具有以下区别:

定义和作用:

HDFS Block:HDFS Block是Hadoop分布式文件系统(HDFS)中数据的基本单位。HDFS将大文件划分为固定大小的块,并将这些数据块分布式地存储在不同的数据节点上。HDFS Block的大小通常为128MB(在Hadoop 3中是默认值),并且可以通过配置进行调整。 Input Split:Input Split是在Hadoop MapReduce中用于划分数据的单位。MapReduce是Hadoop中的一种计算模型,用于分布式处理大规模数据。Input Split是将输入数据(通常是大文件)划分为逻辑上的小块,每个Input Split都由一个Map任务处理。Input Split的大小通常由Hadoop自动计算,以便在不同的Map任务之间实现负载均衡。 划分方式:

HDFS Block:HDFS Block是文件系统层面上的划分,由HDFS负责将大文件划分为块,并将这些块存储在不同的数据节点上。HDFS Block的划分是固定大小的。 Input Split:Input Split是在MapReduce作业层面上的划分,由MapReduce框架根据数据的大小和配置参数来计算。Input Split的划分是根据数据大小和数据位置来进行的,以实现负载均衡和数据本地性。 处理方式:

HDFS Block:HDFS将数据块并行地存储在不同的数据节点上,可以通过数据块的复制和数据本地性来提供数据冗余和容错性。在数据处理过程中,HDFS会将数据块移动到计算节点上进行处理,以实现数据本地性。 Input Split:在MapReduce作业中,每个Input Split会生成一个Map任务,并由计算节点上的Map任务进行处理。Map任务会读取Input Split中的数据,并将其转换为键值对进行处理。MapReduce框架会为每个Input Split分配一个Map任务,并在不同的计算节点上并行执行。

总的来说,HDFS Block是文件系统层面上的数据划分,用于存储和管理数据,而Input Split是在MapReduce作业层面上的数据划分,用于实现并行计算和负载均衡。两者在Hadoop中扮演不同的角色,但都对大规模数据的处理和存储起到了重要的作用。

20.说出 Hadoop 可以运行的三种模式。

本地模式(Local Mode):在本地模式下,Hadoop只在单个计算节点上运行,不涉及分布式计算。这种模式主要用于开发、调试和测试,以及处理小规模数据。在本地模式下,Hadoop使用本地文件系统而不是HDFS来存储数据。 伪分布式模式(Pseudo-Distributed Mode):在伪分布式模式下,Hadoop在单个计算节点上模拟了一个完整的分布式环境。各个Hadoop组件(如NameNode、DataNode、ResourceManager、NodeManager等)都在同一台机器上运行,并通过网络进行通信。虽然只有一台机器,但是各个组件的运行方式和配置与真实的分布式环境类似。伪分布式模式用于在单台机器上进行开发和测试,并验证Hadoop集群的配置和功能。 完全分布式模式(Fully-Distributed Mode):在完全分布式模式下,Hadoop运行在一个真实的分布式集群上,其中包含多个计算节点和数据节点。每个节点都运行着Hadoop的各个组件,并通过网络进行通信。完全分布式模式是用于处理大规模数据和进行生产环境的数据处理任务的模式。在完全分布式模式下,数据会被分割成HDFS块并分布式存储在多个数据节点上,任务会并行执行在多个计算节点上,以实现高性能和高可靠性的数据处理。

待续下一篇文章…… 

如对你有帮助,感谢点赞

如有出错可评论区留言~

相关链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: