大数据相关面试题每日五问(三)
- 对ES的倒排索引了解多少?工作原理?如何提高其查询效率?
- 了解MySQL中的事务吗?它的ACID特性指的是什么?
- 简述数据仓库中“维度”和“事实”表的区别及其作用
- 构建数仓的模型有哪些?展开讲讲。
- HDFS 的写数据流程是怎样的?如果一个 DN在写入过程中发生故障,Hadoop 会如何处理?
(1)https://www.nowcoder.com/discuss/738791848554086400
(2)https://www.nowcoder.com/discuss/739079633773023232
对ES的倒排索引了解多少?工作原理?如何提高其查询效率?
Elasticsearch 使用的是倒排索引(Inverted Index),这是实现全文检索的核心机制。其原理是:将每个文档中的字段内容进行分词处理,然后为每个词项建立一个词典(term),记录该词在哪些文档(文档 ID)中出现,以及出现的位置和频率。这样查询时不是遍历每个文档去找关键词,而是直接查词典获取相关文档列表,极大提升了检索效率。为了进一步提高查询性能,可以采取多种优化手段:一是合理设置字段类型和分词器,减少无效字段的索引;二是使用 keyword
类型字段做精确匹配,避免不必要的全文分词;三是通过设置合适的 filter
缓存结果、避免重复计算;四是开启 doc_values
支持聚合、排序等操作,减少内存消耗;五是避免过度嵌套结构,必要时使用 flattened
或 join
优化文档结构。此外,合理的索引设计、分片分配和冷热数据分离也是保障查询效率的重要手段。
了解MySQL中的事务吗?它的ACID特性指的是什么?
MySQL 中的事务是指一组操作的集合,要么全部执行成功,要么全部回滚撤销,常用于保证数据的一致性与完整性。事务具有四大特性,也就是 ACID:原子性(Atomicity) 指事务中的操作要么全部完成,要么全部不做,出现错误可以回滚;一致性(Consistency) 保证事务执行前后数据都满足数据库的约束规则,不会出现破坏数据逻辑的状态;隔离性(Isolation) 表示多个事务并发执行时互不干扰,常见的隔离级别包括读未提交、读已提交、可重复读、串行化;持久性(Durability) 指事务一旦提交,对数据的修改就是永久性的,即使系统宕机也不会丢失。MySQL 中默认使用 InnoDB 引擎来支持事务,其通过 redo log、undo log 和锁机制来实现对 ACID 的保障。
简述数据仓库中“维度”和“事实”表的区别及其作用
在数据仓库中,维度表和事实表是构建星型或雪花模型的核心组成部分。事实表(Fact Table) 用于存储与业务事件相关的度量值或指标数据,例如订单金额、销售数量等,通常数据量大,记录的是“发生了什么”;而 维度表(Dimension Table) 则存储描述事实的维度信息,比如时间、地区、产品、用户等,是对事实的多角度分析视角。二者的主要区别在于:事实表关注“数值和业务行为”,维度表关注“描述和分类信息”;事实表一般包含外键关联多个维度表,而维度表一般数据量小但字段丰富,便于查询和筛选。在实际应用中,通过维度表可以对事实表的数据进行分组、聚合、切片和钻取,是实现多维分析(OLAP)的基础。
构建数仓的模型有哪些?展开讲讲。
构建数仓的常见模型主要包括星型模型、雪花模型和事实星座模型。星型模型是最常用的一种,其特点是一个中心事实表直接连接多个维度表,结构简单、查询高效,适合于查询频繁、维度较少的场景;雪花模型是在星型模型基础上对维度表进一步规范化,将维度表拆分为多个层级子表,形成树状结构,减少冗余、节省存储,但查询时关联复杂、效率较低;事实星座模型(也叫复合星型模型)是多个事实表共享维度表的结构,适用于存在多个业务过程(如订单、支付、退货等)且共享维度的复杂分析需求。选择哪种模型需根据业务需求、数据复杂度和查询性能权衡,实际开发中也常采用分层建模(ODS、DWD、DWS、ADS)与上述模型相结合,实现数据的稳定、复用与灵活分析。
HDFS 的写数据流程是怎样的?如果一个 DN在写入过程中发生故障,Hadoop 会如何处理?
HDFS 中的写数据流程从客户端开始,首先客户端向 NameNode 请求文件写入权限。NameNode 确认文件不存在后,将文件写入的权限以及负责存储数据块的 DataNode 信息返回给客户端。客户端然后会与 DataNode 建立连接,并通过一个个数据块的方式进行写入。每个数据块(Block)会按照一定的副本策略(默认三个副本)分配到多个 DataNode 上。客户端向每个 DataNode 传输数据时,会将数据写入第一个数据块,完成后接着写第二个、第三个,以此类推。如果在写入过程中,某个 DataNode 发生故障,NameNode 会根据副本机制将数据复制到其他健康的 DataNode 上,确保数据不会丢失。通过心跳机制和副本机制,DataNode 故障会被检测到,并且数据会自动恢复到最新副本。故障发生时,HDFS 会根据剩余副本的数据恢复丢失的部分。
1、Client通过Distributed FileSystem模块向NN请求上传文件,NN检查目标文件是否已存在,父目录是否存在 2、NN返回是否可以上传 3、Client请求第一个block上传哪几个DN服务器上 4、NN返回3个DN节点,分别为DN1、DN2、DN3 5、Client通过FSDataOutputStream模块请求DN1建立传输通道,DN1收到请求会继续调用DN2,DN2继续调用DN3 6、DN3应答DN2,DN2应答DN1,DN1应答Client 7、Client开始往DN1上传第一个block(先读取数据放到一个本地磁盘缓存),以packet为单位,DN1收到一个packet就会上传给DN2,DN2传给DN3;DN1每传一个packet会放入到一个应答队列等待应答 8、当一个block传输完成后,Client会再次请求NN上传第二个block的服务器,重复执行3-7
#牛客解忧铺##数据人的面试交流地#
努力找实习中,整理一些大数据相关面试题和大家分享,共同学习进步,有建议或批评欢迎留言!