1. hadoop组件有哪些?分别有什么功能

组件 功能
HDFS 分布式文件存储系统,提供高容错性海量存储
MapReduce 分布式计算框架,并行处理大数据集
YARN 资源调度系统,管理集群资源并分配任务
Hive 主要用于处理结构化和半结构化数据
Common 通用工具库,支持其他模块

2. 分布式存储的组件是什么 ?有哪些进程? 进程的作用是什么?

分布式存储组件是 HDFS,其包含的进程及作用如下:

进程 作用
NameNode 管理元数据(文件名、块位置、权限),响应客户端请求
DataNode 存储实际数据块,定期向NN发送心跳和块报告
SecondaryNameNode 定期合并FsImage和Edits日志(非热备,缓解NN压力)

3. 资源调度使用什么组件? 该组件有哪些进程?每个进程的作用是什么?

资源调度使用的组件是 YARN,相关进程及作用如下:

进程 作用
ResourceManager 负责全局资源的调度和分配
NodeManager 管理单个节点上的资源和容器
ApplicationMaster 为特定应用程序协调资源,并与 NodeManager 进行通信

4. 分布式计算分为几个步骤? shuffle有几个步骤?

分布式计算主要包含 Map 和 Reduce 两个步骤。
典型的 MapReduce 分布式计算过程大致可以分成 4 个主要阶段:

阶段 主要作用
1️⃣ Input 从 HDFS(或其他存储)读取输入数据,切分成 Split,分配给不同的 Map Task
2️⃣ Map 每个 Map Task 处理 Split,生成 <key, value> 对,中间结果按 key 排序、分区、缓冲
3️⃣ Shuffle 核心阶段,从 Map Task 把数据传输到 Reduce Task,包括分区、排序、拷贝、合并
4️⃣ Reduce Reduce Task 聚合同一个 key 的所有 value,执行用户逻辑,输出结果写回 HDFS

Shuffle 作为连接 Map 和 Reduce 的阶段,具体步骤如下:

  1. Map 端输出并分区:Map 任务完成后,输出结果会按照键进行分区。
  2. 排序与合并:对分区内的数据进行排序,并可能进行合并操作。
  3. 网络传输:将排序好的数据通过网络传输到对应的 Reduce 任务。
  4. Reduce 端合并与排序:Reduce 任务接收数据后,再次进行合并和排序。

5. hdfs文件系统的读取数据流程是什么?

  1. 客户端向 NameNode 发送文件读取请求。
  2. NameNode 返回文件数据块的位置信息。
  3. 客户端直接与 DataNode 建立连接读取数据。
  4. DataNode 将数据块传输给客户端。
  5. 若读取多个数据块,客户端会并行读取以提高效率

6. hdfs文件系统的写文件流程是什么?

  1. 客户端向 NameNode 发起文件创建请求。
  2. NameNode 检查文件是否存在以及客户端权限,若通过检查则创建文件记录(响应上传请求)。
  3. 客户端将数据分成数据块,以流式方式写入第一个 DataNode。
  4. DataNode 按照流水线方式将数据块复制到其他副本节点。
  5. 完成写入后,DataNode 向客户端确认,客户端再向 NameNode 确认(数据同步)。

7. hdfs文件系统 namenode的更新流程是什么?

  1. 所有对文件系统元数据的修改操作都会记录到编辑日志(EditLog)中。
  2. 内存中的命名空间(Namespace)会被实时更新。
  3. SecondaryNameNode 定期从 NameNode 获取编辑日志和命名空间镜像。
  4. SecondaryNameNode 将编辑日志合并到命名空间镜像中,生成新的检查点。
  5. NameNode 在启动时会使用最新的检查点恢复元数据。

8. 整个mapreduce阶段经历几次排序?分别在哪些阶段?

在整个 MapReduce 阶段中,核心的排序大致发生 3 次,主要在以下阶段:

阶段 排序目的 主要发生在哪
Map输出排序 对 Map 输出按 key 排序 Map Task 内存缓冲区写磁盘时
Shuffle 归并排序 把多个 Map 输出文件归并成有序流 Reduce Task 拉取后本地归并
Reduce输入排序 按 key 进行最终分组(可有自定义二次排序) Reduce Task 输入流

9. hive中内部表和外部表有什么区别? 分区表和分桶表有什么区别?

  • 内部表与外部表的区别

    • 内部表(Managed Table):Hive 管理数据的存储位置,删除表时会同时删除数据。
    • 外部表(External Table):数据由用户指定存储位置,删除表时仅删除元数据,数据不会被删除。
  • 分区表与分桶表的区别

    • 分区表(Partitioned Table):按照指定字段(如日期、地区)将数据存储在不同的目录中。
    • 分桶表(Bucketed Table):通过哈希函数将数据分到不同的文件(桶)中,常用于提高查询效率

10. 数据倾斜是什么? 如何规避和处理?

数据倾斜指的是在分布式计算中,部分任务处理的数据量远大于其他任务,导致整体性能下降的现象。

规避和处理方法有:

  • 对 key 进行预处理,如添加随机前缀。
  • 采用 Combiner 减少数据传输量。
  • 增大 Reduce 任务数量。
  • 利用 Hive 的 skewjoin 优化。
  • 过滤异常 key 或对其进行单独处理。

11. 如何使用hdfs文件系统上传或下载数据? 关闭hdfs文件系统安全模式

  • 上传数据:使用命令 hdfs dfs -put <本地路径> <HDFS路径>
  • 下载数据:使用命令 hdfs dfs -get <HDFS路径> <本地路径>
  • 关闭安全模式:先使用命令 hdfs dfsadmin -safemode get 查看安全模式状态,再使用 hdfs dfsadmin -safemode leave 关闭安全模式。

12. order by 和sort by 的区别和使用场景?

  • Order By:对查询结果进行全局排序,会将所有数据发送到一个 Reduce 任务中,在处理大量数据时效率较低。
  • Sort By:仅保证每个 Reduce 任务内部数据有序,最终结果可能不是全局有序的,但处理效率更高。

使用场景:当需要严格全局有序时使用 Order By,对全局顺序要求不高时使用 Sort By。

13. cluster by 和distribute by 的区别和使用场景?

  • Cluster By:相当于 Distribute By 和 Sort By 的组合,既按照指定字段进行数据分发,又对分发后的数据进行排序。
  • Distribute By:仅控制数据在不同 Reduce 任务之间的分发,不保证排序。

使用场景:Cluster By 用于需要数据分发和排序的场景,Distribute By 用于只需要控制数据分发的场景。