跳到主要内容

Hadoop基础

本文主要介绍了Hadoop 基础面试题


Hadoop是什么?

  • Hadoop是一个由Apache基金会开发的分布式系统基础架构

  • 主要解决海量数据的存储和计算问题

  • 是一个开源的、可靠的、可扩展的分布式计算框架

Hadoop的架构和组件有哪些?

Hadoop的架构主要包含三大核心组件:

HDFS(分布式文件系统)

  • NameNode(主节点)
    • 管理文件系统命名空间
    • 维护文件系统树及树中所有文件和目录
    • 记录每个文件中各个块所在的数据节点信息
  • SecondaryNameNode(辅助节点)
    • 定期合并fsimage和edits文件
    • 用于故障恢复
  • DataNode(数据节点)
    • 存储实际的数据块
    • 执行数据块的读写操作
    • 定期向NameNode汇报状态

YARN(资源管理和调度系统)

  • ResourceManager(资源管理器)
    • 整个集群资源的管理和调度
    • 接收客户端的作业提交请求
    • 启动和监控ApplicationMaster
  • NodeManager(节点管理器)
    • 管理单个节点的资源
    • 处理来自ResourceManager的命令
    • 管理Container的生命周期
  • ApplicationMaster
    • 负责单个应用程序的管理
    • 向ResourceManager申请资源
    • 与NodeManager协同管理任务

MapReduce(分布式计算框架)

  • Container
    • 资源封装
    • 任务运行环境
    • CPU、内存等资源的隔离

Hadoop 生态圈组件有哪些

Zookeeper:是一个开源的分布式应用程序协调服务,基于zookeeper可以实现同步服务,配置维护,命名服务。

Flume:一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。

Hbase:是一个分布式的、面向列的开源数据库, 利用Hadoop HDFS作为其存储系统。

Hive:基于Hadoop的一个数据仓库工具,可以将结构化的数据档映射为一张数据库表,并提供简单的sql询功能,可以将sql语句转换为MapReduce任务进行运行。

Sqoop:将一个关系型数据库中的数据导进到Hadoop的 HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Hadoop的运行模式有哪些?

要点说明:

  1. 单机模式最简单,适合初学者入门
  2. 伪分布模式是开发测试的理想选择
  3. 生产环境一般都使用完全分布式模式

Hadoop 集群的最主要瓶颈

1.服务器性能

CPU、内存、磁盘、网络带宽

I/O操作优化

  • 数据倾斜
  • Map和Reduce数量设计的不合理
  • Map运行的时间过长、导致Reduce等待时间过久
  • 小文件过多
  • 大量的不可切分的超大的压缩文件
  • Spill次数过多(导致大量落盘操作)
  • Merge次数过多

Hadoop Merge次数过多主要有以下几个原因:

  1. 源头原因:

  • 输入的小文件过多

  • 内存配置不合理

  • Map任务输出量大

  1. Map端问题:

  • map.sort.spill.percent阈值设置过小,导致频繁spill

  • io.sort.mb缓冲区设置过小

  • 导致Map端频繁进行中间结果的溢写和合并

  1. Reduce端问题:

  • mapred.reduce.parallel.copies设置过小,影响复制效率
  • shuffle.input.buffer.percent设置不合理
  • 导致Reduce阶段需要多次合并

解决方案:

  1. 合理设置内存参数:
    • 增加io.sort.mb的值
    • 调整map.sort.spill.percent阈值
    • 优化shuffle.input.buffer.percent
  2. 源数据优化:
    • 合并小文件
    • 使用CombineFileInputFormat
    • 优化输入数据格式
  3. 任务优化:
    • 增加mapred.reduce.parallel.copies值
    • 合理设置Map和Reduce任务数
    • 使用Combiner减少数据传输量

Hadoop运行模式

本地模式、伪分布式模式、完全分布式模式

本地模式是指Hadoop运行在单机上,数据存储在本地文件系统中,适用于数据量较小的情况,主要用于开发和测试。

分布式模式是指Hadoop运行在多台机器上,数据被分割成多个块,存储在不同的节点上,通过网络进行通信和协调,适用于处理大规模数据的情况,主要用于生产环境。在分布式模式下,Hadoop提供了两种运行模式:独立模式和伪分布式模式。

伪分布式模式是指Hadoop运行在单台机器上,但是各个组件运行在不同的进程中,模拟了分布式环境,适用于开发和测试。

“hadoop”和“hadoop 生态系统”两个概念

Hadoop是指Hadoop框架本身;hadoop生态系统,不仅包含hadoop,还包括保证hadoop框架正常高效运行其他框架,比如zookeeper、Flume、Hbase、Hive、Sqoop等辅助框架。

请列出正常工作的Hadoop集群中Hadoop都分别需要启动哪些进程,它们的作用分别是什么?

1)NameNode:它是hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有metadate。

2)SecondaryNameNode:它不是namenode的冗余守护进程,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。

3)DataNode:它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。

4)ResourceManager(JobTracker):JobTracker负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。

5)NodeManager:(TaskTracker)执行任务。

6)DFSZKFailoverController:高可用时它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。

7)JournalNode:高可用情况下存放namenode的editlog文件。

HDFS 中的 block 默认保存几份?

在 HDFS 中,block 默认会被保存三份,这也被称为副本(replica)。

这种副本的机制被称为数据冗余(data redundancy),它的目的是为了提高数据的可靠性和可用性。当某个副本不可用时,HDFS 可以使用其他副本来保证数据的可用性。

同时,HDFS 还会定期地对副本进行校验,确保它们的一致性。

可以通过修改 HDFS 的配置来改变副本的数量。

但是需要注意的是,增加副本数量会占用更多的存储空间和网络带宽,因此需要根据实际情况进行权衡。

HDFS 默认 BlockSize 是多大?

HDFS(Hadoop Distributed File System)的默认 BlockSize 是 128MB。

这个值可以通过 HDFS 的配置文件进行修改,但是一般来说,不建议随意修改这个值,因为它会影响到 HDFS 的性能和数据存储的效率。如果你需要存储的文件比较小,可以考虑将多个小文件合并成一个大文件,以达到更好的存储效率。