Hadoop面试题+详解-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

20道面试题及详细解答


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

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

  1. 结构化数据结构化数据是按照预定义的数据模型进行组织和存储的数据。它通常以表格的形式存在每个数据项都有明确定义的字段和数据类型。关系型数据库中的数据就是结构化数据的一个常见例子。结构化数据的特点是数据模式固定、清晰、易于查询和分析。

  2. 非结构化数据非结构化数据是指没有明确结构和格式的数据。它以自由文本、图像、音频、视频等形式存在没有预定义的数据模型。非结构化数据的特点是多样性、灵活性和大量性例如社交媒体帖子、电子邮件、网页内容等。由于缺乏明确的结构处理和分析非结构化数据是一项具有挑战性的任务。

  3. 半结构化数据半结构化数据介于结构化数据和非结构化数据之间。它包含部分结构化的元数据但不符合传统的关系型数据库的表格结构。半结构化数据通常以标记语言如XML、JSON或键值对的格式存储如网页、日志文件、传感器数据等。半结构化数据的特点是部分结构化和部分非结构化具有一定的灵活性和可扩展性。

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

  1. Volume数据量大数据的特点之一是其规模庞大涉及的数据量通常是传统数据处理方法无法处理的。大数据处理需要能够有效处理海量数据的技术和工具。

  2. Velocity数据速度大数据的产生速度非常快需要实时或近实时处理和分析。例如社交媒体、物联网设备等都能够产生大量的实时数据对于这些数据的处理需要具备高速处理的能力。

  3. Variety数据多样性大数据不仅包括结构化数据还包括非结构化和半结构化数据如文本、图像、音频、视频等。这些数据类型的多样性要求处理工具和算法能够适应不同类型和格式的数据。

  4. Veracity数据真实性大数据中包含许多来源不确定、质量不一致的数据。确保大数据的真实性和质量对于有效的数据分析和决策至关重要。因此数据质量控制和数据清洗等步骤非常重要。

  5. Value数据价值大数据处理的目标是从数据中提取有价值的信息和洞察并转化为商业价值。大数据分析需要能够挖掘数据中的潜在价值帮助企业做出更好的决策和优化业务流程。

3.什么是Hadoop及其组件

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

Hadoop的核心组件包括

  1. Hadoop Distributed File SystemHDFSHDFS是Hadoop的分布式文件系统用于存储大规模数据集的分布式存储。它将数据分散存储在多个节点上提供高可靠性和高吞吐量的数据访问。

  2. MapReduceMapReduce是Hadoop的计算模型和编程框架。它通过将大规模数据集分成小块并在分布式计算节点上并行执行map和reduce操作实现大规模数据的批处理和计算。

  3. YARNYet Another Resource NegotiatorYARN是Hadoop的资源管理器用于管理和调度集群中的计算资源。它允许多个应用程序共享群集资源并动态分配和管理计算任务的资源。

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

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

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

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

HDFS

  1. NameNodeNameNode是HDFS的主节点负责管理文件系统的命名空间和元数据信息。它跟踪文件和目录的层次结构记录文件块的位置并处理客户端client的文件系统操作请求。

  2. DataNodeDataNode是HDFS的数据节点负责存储实际的数据块。它接收来自NameNode的指令处理数据的读写请求并定期向NameNode报告数据块信息心跳信号。

  3. SecondaryNameNodeSecondaryNameNode协助NameNode进行元数据的备份检查点操作。它定期从NameNode获取元数据并创建新的检查点文件以减少元数据损坏的风险。

YARN

  1. ResourceManagerResourceManager是YARN的主节点负责集群中的资源管理作业调度。它接收客户端和应用程序的资源请求为它们分配适当的资源并监控和管理集群中的计算资源。全局资源管理

  2. NodeManagerNodeManager是YARN的节点管理器在每个节点上运行。它负责监控节点上的资源使用情况并与ResourceManager通信报告节点的可用资源。局部资源管理

MapReduce

  1. JobTrackerJobTracker是MapReduce的主节点负责作业的调度任务的分配。它接收来自客户端client的作业请求将作业分解为多个任务并将任务分配给空闲的TaskTracker节点进行执行。

  2. TaskTrackerTaskTracker是MapReduce的工作节点运行在每个节点上。它接收来自JobTracker的任务分配并执行任务的map和reduce操作。

  3. JobHistoryServer用于收集和展示MapReduce作业的历史信息。它接收来自JobTracker的作业历史记录文件并提供一个Web界面供用户查询和分析作业的执行情况。从Hadoop 2.x版本开始JobTracker已经被ResourceManager和NodeManager取代而JobHistoryServer也与ResourceManager集成用于收集和展示YARN中的作业历史记录。

6.Hadoop 1 和 Hadoop 2 的区别*

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

  1. 架构和组件Hadoop 1采用了经典的MapReduce计算模型并使用JobTracker和TaskTracker作为主要的守护进程。而Hadoop 2引入了YARNYet Another Resource Negotiator架构将资源管理和作业调度从JobTracker中分离出来使得Hadoop可以同时支持多种计算模型如MapReduce、Spark等。

  2. 资源管理Hadoop 1中的资源管理由JobTracker负责它负责管理和分配集群中的计算资源。而Hadoop 2中引入了ResourceManager和NodeManagerResourceManager负责全局资源管理和作业调度而NodeManager负责在每个节点上的资源管理。

  3. 高可用性Hadoop 1中的NameNode和JobTracker是单点故障一旦它们出现故障整个集群都会受到影响。而Hadoop 2引入了NameNode HA高可用和ResourceManager HA机制通过使用多个活动和备用节点来提供更高的可用性。

  4. 编程模型Hadoop 1中仅支持MapReduce编程模型开发人员需要使用Java编写MapReduce作业。而Hadoop 2通过引入YARN可以支持多种计算模型如MapReduce、Spark、Storm等并提供了更灵活的编程接口和工具。

  5. 性能和扩展性Hadoop 2相对于Hadoop 1具有更好的性能和扩展性。通过引入YARNHadoop 2可以更好地管理和分配计算资源实现更高的集群利用率和作业执行效率。

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

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

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

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

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

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

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

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

  1. 高可用性和容错性通过在集群中添加更多的节点可以提高系统的可用性和容错性。当一个节点发生故障或需要维护时系统可以自动将任务和数据迁移到其他节点上从而实现对业务的无缝服务。频繁删除或添加节点可以确保集群始终具有足够的可用节点来应对故障和维护。

  2. 资源管理和负载均衡通过删除或添加节点可以调整集群的资源分配和负载均衡。当集群中某些节点的负载过高或资源利用率不均衡时可以通过增加节点来分担负载或通过删除节点来减少资源浪费和提高利用率。这样可以确保集群中的任务能够高效地利用资源并平衡地分布在各个节点上。

  3. 扩展性和性能优化随着数据量和业务需求的增长可能需要扩展Hadoop集群以提高性能和处理更大规模的数据。通过添加更多的节点可以增加集群的计算和存储能力以满足不断增长的需求。频繁添加节点可以使集群具有更好的扩展性并提高作业的处理速度和整体性能。

  4. 硬件升级和维护当集群中的硬件设备需要升级或维护时可能需要暂时删除或替换节点。这可以包括更换故障硬件、升级硬件规格或进行系统配置更改。频繁删除或添加节点可以确保集群中的硬件设备始终处于良好状态并提供最佳的性能和可靠性。

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

10.NameNode 如何处理 DataNode 故障

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

  1. 心跳检测NameNode会定期向所有注册的DataNode发送心跳请求以检测DataNode的状态。如果NameNode在一定时间内没有收到DataNode的心跳响应就会将该DataNode标记为不可用。

  2. 副本恢复当一个DataNode被标记为不可用时NameNode会检查该DataNode上存储的数据块的副本情况。如果某个数据块的所有副本都存储在不可用的DataNode上那么NameNode会启动副本恢复过程。

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

11.NameNode宕机了怎么办

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

  1. 被动NameNode接管当主动NameNode宕机时被动NameNode会自动接管其职责成为新的活动ActiveNameNode。被动NameNode会从宕机的主动NameNode的元数据备份中恢复并启动对客户端请求的响应。

  2. 快速故障转移被动NameNode接管后它会尽快通知所有的DataNode切换到新的主动NameNode。DataNode会更新它们的注册信息并开始向新的主动NameNode发送心跳和块报告。

  3. 元数据同步被动NameNode会与新的主动NameNode同步元数据。它会请求主动NameNode发送最新的命名空间和元数据更改以保持两个NameNode之间的一致性。

  4. 客户端重新连接当主动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文件

检查点操作是由辅助NameNodeSecondary 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 MB
  • Hadoop 2 默认块大小128 MB
  • Hadoop 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集群中数据通常会被分割成多个数据块并分布式存储在不同的数据节点上。机架感知策略通过了解数据节点和机架的物理位置关系将数据块存储在与计算节点相近的位置以减少数据传输的开销。

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

  1. 机架信息的配置在Hadoop集群中通常会配置每个数据节点所在的机架信息例如机架的名称或编号。这样Hadoop系统就可以了解每个数据节点所处的机架位置。

  2. 数据块的位置分配在数据写入过程中Hadoop系统会尽量将数据块分布在不同的机架上以提高数据的容错性。同时Hadoop会尽量将数据块存储在与计算节点相近的位置以减少数据传输的网络开销。这样当需要处理或读取数据时就可以更快地从本地节点获取数据而不需要通过网络传输。

  3. 副本的位置分布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中两个不同概念的术语具有以下区别

  1. 定义和作用

    • HDFS BlockHDFS Block是Hadoop分布式文件系统HDFS中数据的基本单位。HDFS将大文件划分为固定大小的块并将这些数据块分布式地存储在不同的数据节点上。HDFS Block的大小通常为128MB在Hadoop 3中是默认值并且可以通过配置进行调整。

    • Input SplitInput Split是在Hadoop MapReduce中用于划分数据的单位。MapReduce是Hadoop中的一种计算模型用于分布式处理大规模数据。Input Split是将输入数据通常是大文件划分为逻辑上的小块每个Input Split都由一个Map任务处理。Input Split的大小通常由Hadoop自动计算以便在不同的Map任务之间实现负载均衡。

  2. 划分方式

    • HDFS BlockHDFS Block是文件系统层面上的划分由HDFS负责将大文件划分为块并将这些块存储在不同的数据节点上。HDFS Block的划分是固定大小的。

    • Input SplitInput Split是在MapReduce作业层面上的划分由MapReduce框架根据数据的大小和配置参数来计算。Input Split的划分是根据数据大小和数据位置来进行的以实现负载均衡和数据本地性。

  3. 处理方式

    • HDFS BlockHDFS将数据块并行地存储在不同的数据节点上可以通过数据块的复制和数据本地性来提供数据冗余和容错性。在数据处理过程中HDFS会将数据块移动到计算节点上进行处理以实现数据本地性。

    • Input Split在MapReduce作业中每个Input Split会生成一个Map任务并由计算节点上的Map任务进行处理。Map任务会读取Input Split中的数据并将其转换为键值对进行处理。MapReduce框架会为每个Input Split分配一个Map任务并在不同的计算节点上并行执行。

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

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

  1. 本地模式Local Mode在本地模式下Hadoop只在单个计算节点上运行不涉及分布式计算。这种模式主要用于开发、调试和测试以及处理小规模数据。在本地模式下Hadoop使用本地文件系统而不是HDFS来存储数据。

  2. 伪分布式模式Pseudo-Distributed Mode在伪分布式模式下Hadoop在单个计算节点上模拟了一个完整的分布式环境。各个Hadoop组件如NameNode、DataNode、ResourceManager、NodeManager等都在同一台机器上运行并通过网络进行通信。虽然只有一台机器但是各个组件的运行方式和配置与真实的分布式环境类似。伪分布式模式用于在单台机器上进行开发和测试并验证Hadoop集群的配置和功能。

  3. 完全分布式模式Fully-Distributed Mode在完全分布式模式下Hadoop运行在一个真实的分布式集群上其中包含多个计算节点和数据节点。每个节点都运行着Hadoop的各个组件并通过网络进行通信。完全分布式模式是用于处理大规模数据和进行生产环境的数据处理任务的模式。在完全分布式模式下数据会被分割成HDFS块并分布式存储在多个数据节点上任务会并行执行在多个计算节点上以实现高性能和高可靠性的数据处理。

待续下一篇文章…… 

如对你有帮助感谢点赞

如有出错可评论区留言~

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Hadoop