6道经典大数据面试题

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 6道经典大数据面试题

1、HDFS 读写流程是什么?

HDFS(Hadoop Distributed File System)的读写流程如下:

写流程:

  1. 客户端向 NameNode 发送写请求,请求在 HDFS 上创建一个新的文件。
  2. NameNode 为该文件分配一些数据块(默认情况下为 128 MB)以及在哪些 DataNode 上存储这些数据块的信息。
  3. NameNode 向客户端返回可用于写入数据的 DataNode 列表。
  4. 客户端选择最近的 DataNode,并向其发送一个写入数据块的请求。
  5. DataNode 向客户端确认写入请求,并向其发送一个写入确认。
  6. 客户端开始向 DataNode 写入数据块。
  7. DataNode 将写入的数据块存储在本地磁盘上。
  8. DataNode 向客户端发送一个写入完成的确认。
  9. 客户端通知 NameNode 数据块已经写入完成。
  10. NameNode 更新文件元数据信息,并将这些信息写入持久化存储。

读流程:

  1. 客户端向 NameNode 发送读请求。
  2. NameNode 返回文件的数据块位置信息以及存储这些数据块的 DataNode 列表。
  3. 客户端选择最近的 DataNode,向其发送读取数据块的请求。
  4. DataNode 向客户端返回数据块。
  5. 客户端读取数据块,并向 DataNode 发送确认。
  6. 如果需要读取的数据跨越了多个数据块,客户端将重复执行步骤 3~5,直到读取了整个文件。
  7. 客户端关闭文件,结束读取过程。

需要注意的是,HDFS 写操作采用流水线式写入机制,即当一个数据块正在写入时,客户端可以继续写入下一个数据块,以此来提高写入效率。此外,HDFS 读操作还支持数据本地性优化,即优先在存储数据块的 DataNode 上进行数据读取,以减少网络传输的开销。

2、HDFS小文件过多会有什么危害,如何避免?

HDFS 中存在大量小文件会导致以下危害:

  1. 巨大的元数据开销:HDFS 的元数据信息保存在 NameNode 中,而每个文件在 HDFS 中都对应着一个元数据信息。如果存在大量小文件,NameNode 需要管理大量的元数据信息,这会导致 NameNode 压力过大,导致性能下降。
  2. 数据块的利用率低:HDFS 采用的是数据块存储模式,即将大文件分成多个数据块存储在不同的 DataNode 上。如果文件大小小于数据块的大小,也会将其存储在一个单独的数据块中,造成存储空间浪费,降低了存储空间的利用率。
  3. 数据读取效率低下:小文件较多时,HDFS 中存在大量的小文件,导致 NameNode 需要进行大量的元数据信息的管理,同时也会增加网络传输的开销,降低数据读取效率。

为了避免小文件过多的问题,可以采取以下措施:

  1. 合并小文件:将多个小文件合并成一个大文件,以减少 HDFS 中的小文件数量。
  2. 合并小文件存储到 SequenceFile 中:SequenceFile 是 Hadoop 提供的一种二进制文件格式,它可以将多个小文件合并为一个 SequenceFile 文件,进而减少 HDFS 中小文件数量。
  3. 使用 HAR 文件:HAR 文件是一种归档文件格式,它可以将多个小文件合并成一个文件,并对文件进行压缩和索引,以便于快速访问。
  4. 限制小文件创建:可以通过 HDFS 参数 dfs.namenode.fs-limits.max-files-per-directory 限制单个目录下的小文件数量。
  5. 使用其他文件系统:如果小文件数量较大,可以考虑使用其他文件系统,如 HBase 等,它们能更好地处理大量的小文件。

3、YARN 集群的架构和工作原理是什么?

YARN(Yet Another Resource Negotiator)是 Hadoop 中的资源管理器,它的主要作用是管理集群中的资源,并协调运行在集群上的应用程序。YARN 通过其独特的架构和工作原理,实现了集群资源的高效管理和应用程序的高效执行。

YARN 集群的架构如下:

  1. ResourceManager(RM):ResourceManager 是整个 YARN 集群的核心组件,它负责管理集群中的资源,如 CPU、内存、磁盘等,以及管理运行在集群上的应用程序。ResourceManager 的主要功能包括为应用程序分配资源、监控集群资源的使用情况、处理应用程序的启动和停止请求等。
  2. NodeManager(NM):NodeManager 是运行在每个节点上的代理组件,它负责管理该节点上的资源,如 CPU、内存、磁盘等,并与 ResourceManager 交互以管理资源的分配和回收。NodeManager 的主要功能包括启动和停止容器、处理容器状态信息、管理本地资源等。
  3. ApplicationMaster(AM):ApplicationMaster 是运行在集群上的每个应用程序中的组件,它负责为应用程序协调资源、处理任务分配、监控应用程序状态等。每个应用程序都会有一个对应的 ApplicationMaster。
  4. Container:Container 是 YARN 中的一个基本概念,它是资源的抽象表示,包括 CPU、内存、磁盘等资源,以及运行应用程序所需的执行环境。Container 是由 NodeManager 来启动和管理的,它负责运行一个特定的任务。

YARN 集群的工作原理如下:

  1. 应用程序向 ResourceManager 提交应用程序,包括应用程序的描述信息和资源需求。
  2. ResourceManager 为该应用程序分配一个 ApplicationMaster,ApplicationMaster 向 ResourceManager 请求资源,并为应用程序协调资源、处理任务分配、监控应用程序状态等。
  3. ResourceManager 根据 ApplicationMaster 的请求,为其分配资源并通知 NodeManager 在相应的节点上启动 Container。
  4. NodeManager 在相应的节点上启动 Container,并由 Container 中的 ApplicationMaster 协调任务执行。
  5. ApplicationMaster 向 ResourceManager 报告任务的执行状态,并请求更多的资源,以便在更多的 Container 中运行任务。
  6. 应用程序完成后,ApplicationMaster 通知 ResourceManager 释放资源,并停止容器的运行。

4、Hive 内部表和外部表的区别是什么?

Hive 是 Hadoop 生态系统中的一种数据仓库工具,可以将结构化的数据映射到 Hadoop 的 HDFS 上,并通过类 SQL 的方式来查询数据。在 Hive 中,数据可以被存储在内部表或外部表中,它们的区别如下:

  1. 存储位置:内部表的数据存储在 Hive 管理的 HDFS 目录下,而外部表的数据存储在用户指定的路径中,可以是 HDFS 或本地文件系统等。
  2. 数据管理:内部表是由 Hive 管理的,当删除内部表时,表的元数据和数据都会被删除。而外部表是由用户管理的,当删除外部表时,只会删除元数据,而不会删除数据。
  3. 数据备份和恢复:内部表的数据备份和恢复由 Hive 管理,而外部表的数据备份和恢复由用户自行管理。
  4. 数据导入和导出:内部表数据的导入和导出需要使用 Hive 的特定命令或 API,而外部表数据的导入和导出可以使用 Hadoop 或其他工具。
  5. 数据共享:内部表只能被 Hive 识别和访问,而外部表的数据可以被多个应用程序或工具访问,包括 Hive。

综上所述,内部表和外部表的主要区别在于数据的存储位置、管理方式和备份恢复策略等方面。在实际应用中,应根据实际情况选择使用内部表还是外部表。如果数据是由 Hive 管理的,并且不需要共享给其他应用程序或工具,则应该使用内部表。如果数据需要在多个应用程序或工具之间共享,并且需要由用户自行管理,则应该使用外部表。

5、Flink 相比 Spark Streaming 有什么区别?

Flink 和 Spark Streaming 都是实时流处理框架,它们都可以处理实时数据流,并支持流处理的多种应用场景。它们之间的区别如下:

  1. 数据处理模型:Flink 和 Spark Streaming 采用不同的数据处理模型。Flink 采用基于事件驱动的模型,它将数据流看作事件序列,并在事件到达时立即处理。而 Spark Streaming 采用基于微批处理的模型,它将数据流分成一系列小的批次进行处理。
  2. 精度:Flink 的流处理精度可以达到毫秒级别,而 Spark Streaming 的批处理间隔默认为数秒,精度较低。
  3. 状态管理:Flink 的状态管理机制非常灵活,可以在内存和磁盘之间进行平衡,从而支持更复杂的应用场景。Spark Streaming 的状态管理机制比较简单,仅支持将状态存储在内存中。
  4. 任务调度:Flink 采用基于优先级的任务调度策略,它可以在集群中自动调整资源分配。而 Spark Streaming 使用 Spark 的任务调度器,调度器仅仅会考虑 CPU 和内存资源,无法考虑网络带宽等其他因素。
  5. 应用场景:Flink 适用于对低延迟和高吞吐量的需求较高的应用场景,如金融交易分析、网络实时监控等。Spark Streaming 适用于对实时数据处理要求较低,但需要大规模批量处理的场景,如离线批量分析等。

综上所述,Flink 和 Spark Streaming 都有自己的优势和适用场景,具体的选择应该根据具体的应用场景和需求来进行。如果需要实现低延迟、高吞吐量的实时数据处理,可以考虑使用 Flink;如果需要对大规模数据进行批量处理,可以考虑使用 Spark Streaming。

6、星型模型和雪花模型的区别是什么?

星型模型和雪花模型是数据仓库中最常用的两种数据建模方式,它们的主要区别如下:

  1. 结构复杂度:星型模型中只包含一个事实表和多个维度表,所有维度表都直接关联到事实表。而雪花模型相比星型模型多了一个步骤,即将维度表进行归一化,使得维度表中的属性也可以成为新的维度表,从而产生更多的维度表,这样可以降低冗余度,但同时也增加了模型的复杂度。
  2. 灵活性:星型模型比较简单,易于理解和维护,同时也具有较好的查询性能。但它的灵活性相对较低,难以应对一些复杂的查询场景。而雪花模型相对灵活,可以支持更多的查询场景,但同时也会增加查询的复杂度。
  3. 存储空间:星型模型中存在大量的冗余数据,而雪花模型将维度表进行归一化,可以减少冗余数据,节省存储空间。
  4. 可读性:星型模型比较简单,易于理解和维护,同时也具有较好的可读性。而雪花模型的结构比较复杂,可读性相对较低。

综上所述,星型模型比较适合简单的数据分析场景,如数据统计、报表分析等;而雪花模型比较适合复杂的数据分析场景,如数据挖掘、OLAP 分析等。同时,在具体应用时,应根据数据规模、查询场景和应用需求等因素来选择适合的数据建模方式。




相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
7月前
|
SQL 前端开发 程序员
【面试题】前端开发中如何高效渲染大数据量?
【面试题】前端开发中如何高效渲染大数据量?
121 0
|
7月前
|
设计模式 SQL 算法
大数据面试总结
大数据面试总结
71 0
|
7月前
|
存储 安全 Java
Java大数据面试复习30天冲刺 - 日积月累,每日五题【Day03】——JavaSE
Java大数据面试复习30天冲刺 - 日积月累,每日五题【Day03】——JavaSE
67 0
|
6月前
|
SQL 大数据
常见大数据面试SQL-每年总成绩都有所提升的学生
一张学生成绩表(student_scores),有year-学年,subject-课程,student-学生,score-分数这四个字段,请完成如下问题: 问题1:每年每门学科排名第一的学生 问题2:每年总成绩都有所提升的学生
|
7月前
|
分布式计算 监控 大数据
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
111 1
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
|
7月前
|
SQL 分布式计算 算法
程序员必备的面试技巧——大数据工程师面试必备技能
程序员必备的面试技巧——大数据工程师面试必备技能
119 0
|
7月前
|
缓存 运维 NoSQL
面试分享:Redis在大数据环境下的缓存策略与实践
【4月更文挑战第10天】探索Redis在大数据缓存的关键作用,本文分享面试经验及必备知识点。聚焦Redis数据结构(String、List、Set、Hash、Sorted Set)及其适用场景,缓存策略(LRU、LFU、TTL)与过期机制,集群和数据分片,以及性能优化和运维技巧。通过代码示例深入理解,助你面试成功,构建高效缓存服务。
177 4
|
7月前
|
消息中间件 分布式计算 Kafka
50道大数据精选面试题
50道大数据精选面试题
|
7月前
|
Java 大数据
Java大数据面试复习30天冲刺 - 日积月累,每日五题【Day04】——JavaSE
Java大数据面试复习30天冲刺 - 日积月累,每日五题【Day04】——JavaSE
64 0
|
13天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
105 7

热门文章

最新文章

下一篇
无影云桌面